System sterowania dla celów mieszkaniowych

Uniwersytet Śląski

Wydział Matematyki, Fizyki i Chemii

Instytut Fizyki

 

 

PRACA DYPLOMOWA

Piotr Trzcionkowski

 

 

 

 

System sterowania dla celów mieszkaniowych

 

 

 

 

 

 

 

Opiekun

Mgr Zenon Kukuła

Promotor

Prof. dr hab. inż.

Lech Tomawski

 

 

 

 

Katowice 1998

Spis treści

Wstęp *

Koncepcja systemu *

Przykładowe rozwiązanie *

I. Podstawy teoretyczne *

I.1. Mikrokontroler jednoukładowy 8051 *

I.2. Magistrala ISA komputera PC *

I.3. Układ ICL232 *

I.4. Pamięć EPROM 2764 *

I.5. Pamięć RAM 6264 *

I.6. Rodzaje transmisji *

I.6.1. Wg sposobu synchronizacji *

I.6.2. Wg sposobu przesyłania *

I.7. Topologie sieci komputerowych *

I.8. Sterowanie dostępem do zasobów sieci *

II. Wykonanie *

II.1. Karta prototypowa *

II.1.1. Podłączenie do magistrali ISA komputera *

II.1.2. Mikrokontroler jednoukładowy rozbudowany o dodatkowe układy *

II.1.3. Układ transmisyjny *

II.2. Oprogramowanie karty *

II.2.1. Program ładujący *

II.2.2. Program transmisyjny *

II.3. Oprogramowanie PC *

II.3.1. Klient *

II.3.2. Serwer *

III. Wyniki pracy *

Wnioski *

Literatura *

Załączniki *

Listing programu obsługującego *

Klient *

Serwer *

Schemat karty prototypowej *

Projekt płytki karty prototypowej *

 

Wstęp

Koncepcja systemu

W ostatnich latach wzrosło poważnie zainteresowanie systemami sterowania dla celów mieszkalnictwa. Ostatnio odbyła się we Wrocławiu dwudniowa konferencja "Budynek Inteligentny"[4]. Ilość prezentacji ofert była tak duża, że prelekcje odbywały się równolegle. Wymieniono przykłady już sprzedanych budynków mieszkalnych budowanych aktualnie w Polsce zawierających pełne okablowanie strukturalne.

Niniejsza praca koncentruje się głównie na automatyzacji pojedynczego mieszkania (ang. Home Automation) raczej wypracowując własne rozwiązania niż wykorzystując gotowe. Ma to związek z koniecznością zaproponowania możliwie niskiej ceny akceptowalnej dla większej liczby odbiorców.

Impulsem twórczym rozpoczęcia prac był całkiem niewinny system sterowania oświetleniem, który wielu projektantów i użytkowników uważa za pożyteczny. Chodzi o tak niewdzięczne pomieszczenia jak przedpokoje, przez które chcąc przejść bezpiecznie trzeba załączyć oświetlenie a także inne pomieszczenia, gdzie wygoda użytkownika wymusza stworzenie systemu załączającego oświetlenie w zależności od obecności osób w pomieszczeniu czy innych czynników jak pora, aktualne ustawienie. Najbardziej oczywistym rozwiązaniem jest użycie fotokomórek we framugach drzwi i zliczanie wchodzących i wychodzących osób. Pojawia się jednak problem kolejkowania danych z dwu lub więcej fotokomórek w danym pomieszczeniu a także współdzielenia fotokomórek przez liczniki dwu sąsiadujących pomieszczeń. Wszystko to powoduje, że przy czysto sprzętowej realizacji takiego systemu pojawiłoby się mnóstwo połączeń a na to nie zgodzi się przeciętny użytkownik. Pojawił się więc pomysł stworzenia na te potrzeby sieci magistralowej. Oczywiście nadal wymaga to okablowania prawie całego mieszkania jednak wszędzie są to pojedyncze połączenia do magistrali w odróżnieniu od sprzętowej realizacji, gdzie w okolicach liczników połączeń musiałoby być więcej.

Skoro koncepcja obejmowała sieć to nie było żadnego powodu by ograniczać użyteczność systemu tylko do sterowania oświetleniem tym bardziej, że sygnały z istniejących już fotokomórek można wykorzystać do innych celów jak ochrona obiektu czy sterowanie budzikami. Niezależnie od wymienionych można przesyłać dane z dzwonka do drzwi czy z domofonu. De facto można realizować dowolne transmisje.

Pojawiła się więc koncepcja systemu składającego się z sieci magistralowej i urządzeń komunikujących się przy jej pomocy. Jednym z przydatnych acz nie niezbędnych do pracy elementów systemu powinien być komputer umożliwiający konfigurację sieci i bieżące sprawdzanie jej stanu. Zrozumiałe więc, że jednym z elementów systemu musi być karta do komputera. Należy zauważyć, że wszystkie urządzenia przyłączone do sieci z jej punktu widzenia są skonstruowane podobnie i traktowane jednakowo. Różnią się tylko urządzeniami wykonawczymi. Przyglądając się dokładniej karta do komputera jest jedną z bardziej skomplikowanych.

Oprócz karty mają powstać konkretne rozwiązania umożliwiające sterowanie popularnymi urządzeniami elektrycznymi, oświetleniem a także przesyłanie danych między komputerami. Koncepcyjnie uznano za celowe wydzielenie następujących komponentów:

Niniejsza praca ma ambicję podania propozycji jak powinien wyglądać taki system oraz przygotowanie wybranych jego elementów.

 

Przykładowe rozwiązanie

Zdecydowałem, że pierwszym realizowanym urządzeniem będzie wspomniana już karta sieciowa. Biorąc pod uwagę konieczność wypracowania rozwiązania przydatnego także w konstrukcji innych przyłączonych urządzeń oraz możliwości stworzenia taniego sterownika uniwersalnego zdecydowałem także o użyciu procesora jednoukładowego 8051 [1,3,6,7,8,13,19,21] po rozbudowaniu o dodatkowe elementy.

W pozostałych urządzeniach procesor oprócz zapewnienia komunikacji z siecią będzie pełnił aktywną rolę realizując zadania odpowiednie do urządzeń, w które zostanie wbudowany. Prędkość transmisji takiego rozwiązania dla celów sterowania jest wystarczająca a obniża znacznie cenę porównując do uzyskanej przy wbudowaniu w urządzenia szybkich, ale dodatkowych sterowników. Oczywiście nie wyklucza to innych rozwiązań. Do bardziej wymagających zastosowań jak np. transmisja danych cyfrowych między komputerami można skonstruować równoległą, szybką sieć, która z czasem (coraz niższe ceny) przejmie zapewne zadania wolniejszej. Jednocześnie są gotowe i dość szeroko stosowane na świecie rozproszone rozwiązania firmy Echelon [4] dla niektórych popularnych "głupich" elementów jak np. oprawy oświetleniowe, które można wykorzystać.

Bazując na wcześniejszych doświadczeniach w konstruowaniu karty zgodnej z popularnymi swego czasu Arcnet [20] lub obecnie Ethernet zaprojektowałem nieco prostszą kartę komunikującą się z komputerem w podobny sposób.

Reszta elementów systemu powstanie póĹşniej w zależności od uzyskanych rezultatów przy konstrukcji karty.

 

 

I. Podstawy teoretyczne

 

I.1. Mikrokontroler jednoukładowy 8051

Mikrokontroler jednoukładowy jest pojedynczym układem scalonym zawierającym oprócz samego procesora także najczęściej używane urządzenia peryferyjne takie jak pamięć stała ROM, EPROM, E2PROM, FLASH, pamięć RAM, sterowniki przerwań, układy transmisji szeregowej, układy wejścia-wyjścia, zegar itp. Jest często stosowany w sprzęcie elektronicznym powszechnego użytku ze względu na małe rozmiary i wystarczającą elastyczność. Następca procesora 8048 układ 8051 jest jednym z częściej stosowanych. Jest dostarczany przez wielu producentów np. Intel, Signetics. Na rysunku 1 pokazano z jakich bloków składa się. Rozkład wyprowadzeń pokazano na rysunku 2. Strukturę wewnętrzną na rysunku 3 a na rysunku 4 mapę pamięci procesora. [1,19]

Rysunek 1. Schemat blokowy mikroprocesora jednoukładowego

Rysunek 2. Rozkład wyprowadzeń 8051

Rysunek 3. Struktura wewnętrzna 8051

Rysunek 4. Mapa pamięci 8051

Dokładny opis układu 8051 znajduje się literaturze. W szczególności dość dokładnie opisuje go praca [19].

 

I.2. Magistrala ISA komputera PC

Magistrala ISA [15] komputera pozwala na rozbudowę komputera PC. Umożliwia włączenie w obszar adresowy zarówno dodatkowych portów jak i pamięci także z osobnym DMA.

Wykorzystane w pracy wyprowadzenia magistrali:

A0..A19 - 20 bitów adresu

D0..D7 - 8 bitów danych

GND - masa

+5V - zasilanie

IOW, IOR - czytanie/pisanie z/do portów

AEN - adres na magistrali adresowej dostępny

 

I.3. Układ ICL232

Układ przeznaczony jest do transmisji danych zgodnie ze standardem RS232 [16]. Sprowadza poziom napięć z wartości charakterystycznych dla układów cyfrowych +5V tj. napięcia jedynki i zera do 12 V odpowiednio dodatnie i ujemne.

Z punktu widzenia układów współpracujących istotne są jedynie wyprowadzenia:

 

I.4. Pamięć EPROM 2764

Pamięć stała EPROM o organizacji 8x8kb używana do przechowywania programu. Dostarczana przez wielu producentów. Kasowana promieniowaniem ultrafioletowym a programowana elektrycznie przez podanie znacznego napięcia. Tak zaprogramowana przechowuje dane przynajmniej przez 25 lat. Ilość cykli kasowanie/programowanie około 50 razy. Sterowana sygnałami:

Adres na wejściach A0..A12. Dane na D0..D7.

 

I.5. Pamięć RAM 6264

Pamięć RAM 6264 to pamięć statyczna o swobodnym dostępie, programowana i kasowana elektrycznie o organizacji 8x8kb. Sterowana sygnałami:

Adres na wejściach A0..A12. Dane na D0..D7.

 

I.6. Rodzaje transmisji

I.6.1. Wg sposobu synchronizacji

Należy rozróżnić dwa podstawowe rodzaje transmisji:

Główna różnica polega na sposobie synchronizacji. W układach asynchronicznych można uzyskać ją tylko przez porównanie przesłanych porcji informacji podczas gdy w układach synchronicznych jest utrzymywana na bieżąco podczas dokonywania transmisji. Używa się do tego kodów samosynchronizujących np. Manchester. Ze sposobu synchronizacji wynika także długość przesyłanych porcji. W transmisji asynchronicznej są to zwykle krótkie porcje 5 do 8 bitów. Każda porcja rozpoczyna się bitem startu a kończy jednym, półtora lub dwoma bitami stopu. Stosuje się także dodatkowy bit parzystości. W transmisji synchronicznej mamy do czynienia z dłuższymi porcjami. Również każda ramka (porcja danych) ma określony format i jest możliwe przesyłanie sumy kontrolnej CRC, nagłówków. [20]

 

I.6.2. Wg sposobu przesyłania

Można wymienić transmisję [20]:

Transmisja w paśmie podstawowym polega na bezpośrednim odwzorowaniu wartością sygnału stanu 0 lub 1.

Transmisja z modulacją polega na odwzorowaniu wartości przebiegiem modulującym. Spotykane są modulacje: amplitudy, częstotliwości, fazy.

Transmisja szerokopasmowa polega na przesyłaniu w szerokim paśmie częstotliwościowym wielu sygnałów.

 

I.7. Topologie sieci komputerowych

Znane topologie [20]:

Topologia gwiazdy na zastosowanie tam, gdzie chodzi o rozdystrubuowanie danych z jednego centralnego punktu do wielu klientów. Przykład serwer obsługujący wiele terminali np. specjalizowany serwer terminali czy ogólna hierarchia publicznych niusów w Polsce.

Topologia magistrali jest dość wygodna. Zaletą swobodne przyłączanie nowych urządzeń bez potrzeby konfiguracji uwzględniającej topologię. Wadą łatwe zatykanie sieci przez wymagające urządzenia jak np. współpracujące ze sobą serwery. Jako panaceum stosuje się przyłączanie takich urządzeń przez switch'e tak by ruch generowany przez nie nie przenosił się na całą sieć.

Topologia pierścienia. Zaletą wzmacniające właściwości urządzeń przekazujących pakiety. Wadą upadek całej sieci w przypadku uszkodzenia któregokolwiek. Jako panaceum producenci (IBM) kontrolują działanie i w razie potrzeby fizycznie czy prawie fizycznie pomijają wadliwe.

W zależności od wymagań i możliwości projektant sieci powinien zdecydować się na odpowiednią topologię. Można czy należy także mieszać poszczególne tak by właściwie wykorzystać zalety każdej z nich.

 

I.8. Sterowanie dostępem do zasobów sieci

W sytuacji kiedy dostępu do sieci domaga się wiele podłączonych urządzeń zachodzi potrzeba bezkolizyjnego dostępu do medium transmisyjnego oraz zagwarantowania przesłania pakietu do właściwego celu. [20]

Dostęp:

Z dostępem niekomutowanym mamy do czynienia przy podłączeniu dokładnie dwóch węzłów. Przy większej ilości węzłów niezbędne jest adresowanie połączone z przydzielaniem uprawnień do nadawania w sieci. Najczęściej nie wystarcza adresowanie zawartością tj. przesyłanie w treści pakietu informacji o celu przesyłki ponieważ w przypadku rozpoczęcia nadawania przez więcej niż jednego użytkownika dochodzi zwykle do zniekształcenia pakietu, który może zostać uznany za prawidłowy mimo zniekształcenia. Aby temu zapobiec użytkownik powinien dokonać detekcji nośnika (CSMA - Carrier Sense Multiple Access) i rozpocząć nadawanie kiedy medium jest wolne. To niestety nie rozwiązuje problemu ponieważ przy dużym obciążeniu sieci istnieje spore prawdopodobieństwo, że dwa urządzenia uznają, że medium jest wolne i jednocześnie rozpoczną nadawanie. Wprowadzono więc dodatkowo detekcję kolizji (CSMA/CD. - CSMA with Collision Detection) tj. kiedy w pewnym momencie dane urządzenie zauważy, że nadaje wraz z drugim przerywa transmisję i wznawia ją po losowym odcinku czasu. Stosowane w popularny kartach Ethernet. I to nie jest idealnym rozwiązaniem bo przy dużym ruchu większość urządzeń znajduje się po trafieniu w kolizję w wyniku czego mimo zajętości nośnika nie odbywa się przesyłanie kompletnych paczek. Przy pierścieniowej topologii zaczęto więc stosować adresowanie ruchomym slotem, w którym krążący slot przesyła dane aż do zwolnienia przez nadawcę (samego siebie). Jeszcze innym sposobem jest adresowanie ruchomym znacznikiem (ang. Token passing). Ruchomy znacznik służy przydzielaniu uprawnień podczas gdy dane krążą osobno. Może być stosowany zarówno przy topologii pierścieniowej jak i magistralowej wtedy jest tworzony pierścień logiczny (jak w kartach Arcnet) czy dowolnej innej. Przy adresowaniu ruchomym znacznikiem i topologii magistralowej praktycznie nie ma kolizji. Jedyną sytuacją kiedy urządzenie zakłóca innym pracę jest jego pierwsze podłączenie. Wymusza się zakłóceniem rekonfigurację sieci tak by zauważyła je.

 

II. Wykonanie

Wykonanie wymagało:

 

II.1. Karta prototypowa

Przy projektowaniu i wykonywaniu karty całości posłużono się komercyjnym oprogramowaniem: Orcad, AutoTrax, Protel do narysowania schematu oraz zaprojektowania druku płytki [18]. Wykorzystano opisany we wstępie do niniejszej pracy procesor jednoukładowy 8051 taktowany zegarem 12MHz, pamięć RAM 6264, EPROM 2764 oraz kilka układów małej i średniej skali integracji TTL. Schemat elektryczny całej karty udostępniono w dodatku.

 

II.1.1. Podłączenie do magistrali ISA komputera

Podłączenie do magistrali ISA [15] komputera zrealizowano poprzez typowe złącze krawędziowe ED1 wykorzystując krótką jego część zapewniającą przesyłanie 8 bitów danych i 20 bitów adresowych oraz zasilanie dla układu. Sygnały danych są zatrzaskiwane w buforach U3 i U5 [10,11,12,14] tak by zarówno komputer PC jak i procesor jednoukładowy nie musiały analizować stanu magistrali danych w czasie rzeczywistym. Wystawianiu danej z obu stron towarzyszy generowanie przerwania. Tak, więc zarówno PC jak i procesor jednoukładowy zareagują na udostępnienie danej obsługą przerwania. Impuls dla komputera PC jest formowany programowo na porcie P1.0 mikroprocesora U1 i transmitowany poprzez układ U24 i przełącznik SW1 tak by wygenerowane zostało odpowiednie do wybranego ustawienia przełącznika przerwanie PC. Dla procesora jednoukładowego impuls jest generowany sprzętowo wraz z wpisywaniem danych do bufora U3. Niezbędne przedłużenie czasu trwania impulsu do przynajmniej 12 cykli zegarowych (1 cykl przy zegarze 12MHz to 2 Îźs) procesora jednoukładowego zapewnia układ U28. Dla podanych wartości R10, C8 osiąga się wydłużenie impulsu do 31Îźs. Dekodowaniem adresu zajmują się układy U14 i U15 [10] reagujące na adres 2E1h. Biorąc pod uwagę bramkowanie wejściami G1,G2A i G2B, wykorzystanie odpowiedniego wyjścia Y oraz wzajemne połączenie układów otrzymujemy ciąg binarny 101110001 odpowiadający właśnie heksadecymalnie wyrażonemu adresowi 2E1. Sygnał z tego dekodera jest bramkowany sygnałami AEN, IOW i IOR przy użyciu bramek U25 i U26. Od strony procesora jednoukładowego impulsy sterujące buforami U3 i U5 powstają poprzez zbramkowanie sygnału z dekodera U10 z sygnałami RD, WR.

II.1.2. Mikrokontroler jednoukładowy rozbudowany o dodatkowe układy

Mikroprocesor jednoukładowy został uzupełniony dodatkowymi układami zapewniającymi możliwość komunikowania się z komputerem PC a przede wszystkim zwiększające jego możliwości. Dodano dekoder adresu U10 [10] umożliwiający umieszczenie w obszarze adresowym większej liczby urządzeń. Wykorzystano dwa najstarsze bity adresu do wyboru urządzenia: 00 - EPROM U17, 01 - latch'e U3, U5, 10 - wolne i 11 - pamięć buforująca RAM U19.

Pierwszym z przyłączonych urządzeń jest pamięć programu U17 w postaci pamięci EPROM przyłączonej do magistrali danych, magistrali adresowej oraz sterującej sygnałem PSEN. Pełny adres niezbędny do jej adresowania uzyskano zatrzaskując w buforze U16 bity 0..7 adresu zgodnie z sygnałem ALE.

Drugie urządzenie to pamięć U19 typu RAM. Adresowanie wykorzystuje bufor pamięci EPROM U16 oraz sygnały WR i PSEN U1 w taki sposób by pamięć była "widoczna" jako pamięć danych w trybie tylko do pisania i jednocześnie jako pamięć programu tylko do czytania.

Kolejne urządzenie to pamięć zrealizowana na buforach U3 i U5 bramkowana sygnałami RD, RW poprzez układy U25, U26.

 

II.1.3. Układ transmisyjny

Do transmisji wykorzystano wewnętrzny port szeregowy procesora U1 uzupełniony zewnętrznym nadajnikiem U27. Układ U27 został przyłączony standardowym wejściami TxD i RxD procesora U1 i wyprowadzony na zewnątrz karty złączem zgodnie ze standardem RS tj. wyprowadzeniami 2 (RxD), 3 (TxD) i 7(GND). Nie zdecydowano się na zaimplementowanie swobodnego dostępu do medium ze względu na szkoleniowy charakter pracy. Jednak ze względu na dość wyraziste wydzielenie tego modułu nic nie stoi na przeszkodzie by w działającej już karcie zmienić układ transmisyjny na inny zapewniający np. adresowanie ruchomym znacznikiem.

 

II.2. Oprogramowanie karty

Oprogramowanie karty zostało napisane w całości w asemblerze korzystając z informacji zawartych w literaturze polskiej i zagranicznej [1,3,6,7].

 

II.2.1. Program ładujący

Program ładujący znajdujący się w pamięci stałej EPROM na karcie prototypowej ma za zadanie załadowanie poprzez port komputera programu wykonującego transmisje. W rzeczywistym urządzeniu w pamięci EPROM zamiast programu ładującego może znajdować się właściwy program transmisyjny.

Po uruchomieniu układu w związku z wyzerowaniem procesora program rozpoczyna pracę od adresu zerowego. Następuje programowe ustalenie warunków pracy procesora po czym program wchodzi w pętlę czekając na ustawienie flagi ProgramSprawdzony. Wcześniejsze uaktywnienie przerwań powoduje, że przy wysyłaniu kolejnych bajtów na port wejściowy karty, widoczny od strony komputera, są generowane przerwania zmierzające do zmiany flagi ProgramSprawdzony. W rzeczywistości ładowanie programu jest dwuetapowe. Najpierw jest ładowany program tj. następuje kopiowanie danych podawanych na port wejściowy do pamięci RAM. Po jego załadowaniu jest ustawiana flaga ProgramZaładowany i następuje jego sprawdzanie. Karta wystawia kolejne komórki pamięci na port wyjściowy PC a program uruchomiony na komputerze może porównać je z tymi, które wysyłał. Dopiero po tym ustawiana jest flaga ProgramSprawdzony. Sterowanie jest oddawane do załadowanego programu poprzez skok na jego początek. Przerwania również są przekierowywane do załadowanego programu.

;-------------

; Program zawarty w EPROM'ie karty sieciowej

; z dodatkowym RAM'em programu

; Zawiera tylko:

; - zaladowanie programu z portow do naszej pamieci RAM

; - skoki do obslugi przerwan w nowej pamieci

PoczatekRAM equ 0C000h ; poczatek pamieci RAM (programu)

KoniecRAM equ 0d0h ; koniec ram (programu)

FlagProgramZaladowany equ 20h.0 ; gdy=1 zaladowany

FlagProgramSprawdzony equ 20h.1

PortWeWy equ 04000h ; poczatek portow

MaskCmd equ ex0 ; przyjscie komendy ie.0

MaskCmdZb equ it0 ; wyzwalany zboczem tcon.0

;UWAGA !!! Zmienna FlagProgramSprawdzony nalezy uwzglednic takze w programie

; ladowanym do dodatkowego RAM'u tak by jej zawartosc pozostala

; nienaruszona. Umozliwia ona jednorazowe zaladowanie programu

; a po wykonaniu tego dalsze przerwania beda juz tylko wolaly

; obsluge przerwania w zaladowanym programie.

; skok do programu glownego

org 0

ljmp Main

; tablica przerwan

org 03h ; komenda bo wystapilo int0

sjmp IntCmd

org 0bh

ljmp 0bh+PoczatekRAM

org 13h

ljmp 13h+PoczatekRAM

org 1bh

ljmp 1bh+PoczatekRAM

org 23h

ljmp 23h+PoczatekRAM

org 2bh ; wlasciwie tylko dla 8052/32

ljmp 2bh+PoczatekRAM

;-------------------------

; obsluga komendy

IntCmd:

; czy sprawdzony

jb FlagProgramSprawdzony,DoNowegoIntCmd

; czy zaladowany

jb FlagProgramZaladowany,DoPoZaladowaniu

DoPrzedZaladowaniem:

; odlozenie flag

push psw

push acc

; zablokowanie przerwan

clr MaskCmd

; czytanie portu

push dpl

push dph

mov dptr,#PortWeWy

movx a,@dptr

movx @dptr,a ; kopia na wyjscie

pop dph

pop dpl

; przeniesienie do pamieci

movx @dptr,a

; sprawdzenie

mov r2,a

mov a,#0

movc a,@a+dptr

subb a,r2

Stop:

cjne a,#0,Stop ; zawiesiloby sie w razie bledu

; kolejny bajt

inc dptr

mov a,dph

cjne a,#KoniecRAM,KonKop

; zaznaczenie, ze juz przekopiowano

setb FlagProgramZaladowany

mov dptr,#PoczatekRAM

mov r3,0

KonKop:

; przywrocenie przerwan

se(b MaskCmd

; zdjecie flag

pop acc

pop psw

reti

DoPoZaladowaniu:

; odlozenie flag

push psw

push acc

; zablokowanie przerwan

clr MaskCmd

; wysylanie na port pamieci

mov a,#0

movc a,@a+dptr

push dpl

push dph

mov dptr,#PortWeWy

movx @dptr,a

pop dph

pop dpl

; kolejny bajt

inc dptr

mov a,dph

cjne a,#KoniecRAM,KonTest

; zaznaczenie, ze juz przekopiowano

setb FlagProgramSprawdzony

KonTest:

; przywrocenie przerwan

setb MaskCmd

; zdjecie flag

pop acc

pop psw

reti

DoNowegoIntCmd:

ljmp 03h+PoczatekRAM ; skok do zaladowanego podprogramu obslugi

; --------------------

; program glowny

; --------------------

Main:

; przerwania beda poki co dotyczyly tego programu

clr FlagProgramZaladowany

clr FlagProgramSprawdzony

; inicjacja ukladu

setb MaskCmd ; zezwolenie na obsluge przyjscia komendy

setb MaskCmdZb ; zboczem

mov dptr,#PoczatekRAM ; poczatek ramu

; skasowanie ew. przerwanie wygenerowanego przed wlaczeniem

clr ie0

; zalaczamy wreszcie te przerwania

setb ea

; petla czekajaca na zaladowanie programu

Petla:

jnb FlagProgramSprawdzony,Petla

; skok do zaladowanego programu

; niestety nie wychodzi

ljmp PoczatekRAM

END

;-------------

 

II.2.2. Program transmisyjny

Program transmisyjny ma za zadanie przeprowadzanie transmisji w odpowiedzi na żądania przesyłane na port wejściowy przez komputer PC. Znajduje się w pamięci RAM po załadowaniu przez program ładujący. Jest możliwe, że program transmisyjny zastępuje program ładujący, umieszczony w pamięci stałej EPROM.

;-------------

; Program zawarty w EPROM'ie karty sieciowej

; z dodatkowym RAM'em programu

; Zawiera tylko:

; - zaladowanie programu z portow do naszej pamieci RAM

; - skoki do obslugi przerwan w nowej pamieci

PoczatekRAM equ 0C000h ; poczatek pamieci RAM (programu)

KoniecRAM equ 0d0h ; koniec ram (programu)

FlagProgramZaladowany equ 20h.0 ; gdy=1 zaladowany

FlagProgramSprawdzony equ 20h.1

PortWeWy equ 04000h ; poczatek portow

MaskCmd equ ex0 ; przyjscie komendy ie.0

MaskCmdZb equ it0 ; wyzwalany zboczem tcon.0

;UWAGA !!! Zmienna FlagProgramSprawdzony nalezy uwzglednic takze w programie

; ladowanym do dodatkowego RAM'u tak by jej zawartosc pozostala

; nienaruszona. Umozliwia ona jednorazowe zaladowanie programu

; a po wykonaniu tego dalsze przerwania beda juz tylko wolaly

; obsluge przerwania w zaladowanym programie.

; skok do programu glownego

org 0

ljmp Main

; tablica przerwan

org 03h ; komenda bo wystapilo int0

sjmp IntCmd

org 0bh

ljmp 0bh+PoczatekRAM

org 13h

ljmp 13h+PoczatekRAM

org 1bh

ljmp 1bh+PoczatekRAM

org 23h

ljmp 23h+PoczatekRAM

org 2bh ; wlasciwie tylko dla 8052/32

ljmp 2bh+PoczatekRAM

;-------------------------

; obsluga komendy

IntCmd:

; czy sprawdzony

jb FlagProgramSprawdzony,DoNowegoIntCmd

; czy zaladowany

jb FlagProgramZaladowany,DoPoZaladowaniu

DoPrzedZaladowaniem:

; odlozenie flag

push psw

push acc

; zablokowanie przerwan

clr MaskCmd

; czytanie portu

push dpl

push dph

mov dptr,#PortWeWy

movx a,@dptr

movx @dptr,a ; kopia na wyjscie

pop dph

pop dpl

; przeniesienie do pamieci

movx @dptr,a

; sprawdzenie

mov r2,a

mov a,#0

movc a,@a+dptr

subb a,r2

Stop:

cjne a,#0,Stop ; zawiesiloby sie w razie bledu

; kolejny bajt

inc dptr

mov a,dph

cjne a,#KoniecRAM,KonKop

; zaznaczenie, ze juz przekopiowano

setb FlagProgramZaladowany

mov dptr,#PoczatekRAM

mov r3,0

KonKop:

; przywrocenie przerwan

setb MaskCmd

; zdjecie flag

pop acc

pop psw

reti

DoPoZaladowaniu:

; odlozenie flag

push psw

push acc

; zablokowanie przerwan

clr MaskCmd

; wysylanie na port pamieci

mov a,#0

movc a,@a+dptr

push dpl

push dph

mov dptr,#PortWeWy

movx @dptr,a

pop dph

pop dpl

; kolejny bajt

inc dptr

mov a,dph

cjne a,#KoniecRAM,KonTest

; zaznaczenie, ze juz przekopiowano

setb FlagProgramSprawdzony

KonTest:

; przywrocenie przerwan

setb MaskCmd

; zdjecie flag

pop acc

pop psw

reti

DoNowegoIntCmd:

ljmp 03h+PoczatekRAM ; skok do zaladowanego podprogramu obslugi

; --------------------

; program glowny

; --------------------

Main:

; przerwania beda poki co dotyczyly tego programu

clr FlagProgramZaladowany

clr FlagProgramSprawdzony

; inicjacja ukladu

setb MaskCmd ; zezwolenie na obsluge przyjscia komendy

setb MaskCmdZb ; zboczem

mov dptr,#PoczatekRAM ; poczatek ramu

; skasowanie ew. przerwanie wygenerowanego przed wlaczeniem

clr ie0

; zalaczamy wreszcie te przerwania

setb ea

; petla czekajaca na zaladowanie programu

Petla:

jnb FlagProgramSprawdzony,Petla

; skok do zaladowanego programu

; niestety nie wychodzi

ljmp PoczatekRAM

END

;-------------

 

II.3. Oprogramowanie PC

Obydwa programy kliencki i serwerowy powstały z użyciem kompilatora Delphi firmy Borland International Inc. korzystając z nabytej wcześniej wiedzy programistycznej oraz według literatury, publicznych grup dyskusyjnych i materiałów dostępnych w internecie [5,9,17].

II.3.1. Klient

Program klienta ma za zadanie cykliczne pobieranie czasu z serwera czasu dostępnego w sieci oczywiście z użyciem skonstruowanej karty sieciowej i wyświetlanie tego czasu na ekranie. Listing programu zamieszczono w załączniku do niniejszej pracy.

 

II.3.2. Serwer

Program serwera zajmuje się odpowiadaniem na żądania z sieci dotyczące aktualnego czasu. Wraz z kartą może więc pełnić funkcję zegara centralnego. Programowa jego realizacja wynika z edukacyjnego charakteru pracy. Docelowo powinien to być osobny sterownik nie połączony inaczej niż przez ogólnodostępną sieć z komputerem zgodnie z założeniami podanymi we wstępie. Listing programu zamieszczono w załączniku do niniejszej pracy.

 

III. Wyniki pracy

Udało się wykonać dwie kompletne karty przesyłające dane między sobą. Do komunikacji wykorzystano popularny interfejs RS232. Konstrukcyjnie karty są wykonane tak by było możliwe wstawienie dowolnego innego interfejsu biorąc pod uwagę nieco inne zastosowania lub wykorzystanie gotowych sterowników sieci oraz dzięki wbudowanej pamięci RAM, dowolnego programu transmisyjnego.

 

Wnioski

Podczas konstrukcji urządzenia brano pod uwagę uniwersalność urządzenia, możliwość dostosowania go do specyficznego zastosowania, czytelność dokumentacji. Wszystko po to by mogło być używane do założonego celu sterowania urządzeń w mieszkaniu a także czysto naukowych prób w laboratorium. Brano pod uwagę np. możliwość stworzenia podobnego przez przeciętnego elektronika na podstawie niniejszej pracy. Urządzenie znajdzie praktyczne zastosowanie do sterowania w mieszkaniu a także jako wdzięczny obiekt szkoleniowy dla studentów.

 

Literatura

  1. "8049/8051 Family Microcontroler User's. Guide 1988", Signetics Corporation, 1988
  2. Skrypty Uniwersytetu Śląskiego nr 353, Jan Piecha, "Podzespoły maszyn cyfrowych ...", Uniwersytet Śląski, Katowice 1985
  3. Piotr i Paweł Gałka, "Podstawy programowania mikrokontrolera 8051", MIKOM, Warszawa1995
  4. "Inteligentny budynek - Integracja systemów raport 1997/1998", Walter Open Systems,Wrocław 1998
  5. Dan. Osier, Steve Grobman, Steve Batson, "Delphi 2", SAMS Publishing, 1996
  6. Henryk Małysiak, "Mikrokomputery jednoukładowe serii MCS48, MCS51, MCS96", Wydawnictwo Pracownik Komputerowej Jacka Skalmierskiego, Gliwice 1992
  7. Wybrane numery czasopisma, "Radioelektronik", z lat 1982-1998
  8. Wybrane numery czasopisma, "Elektronika Praktyczna", z lat 1995-1998
  9. Wybrane numery czasopisma, "PC Kurier", z lat 1990-1998
  10. Jan Pieńkoś, Janusz Turczyński, "Układy scalone TTL w systemach cyfrowych", Wydawnictwa Telekomunikacji i łączności, Warszawa 1986
  11. Piotr Misiurewicz, Marek Grzybek, "Półprzewodnikowe układy logiczne TTL", Wydawnictwa Naukowo-Techniczne, Warszawa 1982
  12. Włodzimierz Sasal, "Układy scalone UCA64/UCY74", Wydawnictwa Komunikacji i łączności, Warszawa 1985
  13. Piotr Misiurewicz, "Układy mikroprocesorowe", Wydawnictwa Naukowo-Techniczne, Warszawa 1983
  14. Jan Pieńkoś, Stanisław Moszczyński, Adam Pluta, "Układy mikroprocesorowe 8080/8085 w modułowych systemach sterowania", Wydawnictwa Komunikacji i łączności, Warszawa 1988
  15. Wybrane numery czasopisma, "Mikroklan"
  16. Wojciech Mielczarek, "Szeregowe interfejsy cyfrowe", Helion, Gliwice 1993
  17. Don Taylor, Jim Mischel, John Penman, Terence Goggin, "Programowanie w Delphi", Mikom, Warszawa 1997
  18. Jerzy Kondarewicz, "Projektowanie płytek obwodów drukowanych...", Lynx-Sft, Warszawa 1993
  19. Praca magisterska Zenona Kukuły, "Miernik różnicy pojemności z zastosowaniem mikrokomputera jednoukładowego 80C535", Uniwersytet Śląski, Katowice 1997
  20. Jan Piecha, Piotr Porwik, "Transmisja danych w sieciach komputerowych", Skrypty Uniwersytetu Śląskiego, Katowice 1992

 

Załączniki

Listing programu obsługującego

 

Klient

Program główny

program fiKlientPrg;

uses

Forms,

fiKlientMain in 'fiKlientMain.pas' {FormKlientMain};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TFormKlientMain, FormKlientMain);

Application.Run;

end.

Moduł formatki głównej

unit fiKlientMain;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Menus, ExtCtrls;

type

TFormKlientMain = class(TForm)

LabelKlientCzas: TLabel;

KlientMainMenu: TMainMenu;

Czas1: TMenuItem;

Zamknij1: TMenuItem;

Timer1: TTimer;

procedure Zamknij1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormKlientMain: TFormKlientMain;

implementation

{$R *.DFM}

 

procedure TFormKlientMain.Zamknij1Click(Sender: TObject);

begin

Close;

end;

procedure PiszKarta( const Maska:Byte);

begin

end;

function CzytajKarta( const AMaska:Byte):Byte;

var DataCzas:TTimeStamp;

Hour,Min,Sec,MSec:Word;

begin

PiszKarta(AMaska);

// czekaj az karta odpowie <>0

PiszKarta($00);

// czekaj az nastapi potwierdzenie zerem

// zerownie po bo przed nigdy nie wiadomo czy nie z

// poprzedniego rozkazu

DecodeTime(Time,Hour,Min,Sec,MSec);

case AMaska and $f0 of

$10:Result:=Hour;

$20:Result:=Min;

$30:Result:=Sec;

end;

Result:=Result and not AMaska;

end;

procedure TFormKlientMain.Timer1Timer(Sender: TObject);

var Godzin,Minut,Sekund:Integer;

begin

Godzin:=CzytajKarta($10);

Minut:=CzytajKarta($20);

Sekund:=CzytajKarta($30);

LabelKlientCzas.Caption:=Format('%.2d:%.2d:%.2d',[Godzin,Minut,Sekund]);

end;

end.

Zasoby formatki głównej

object FormKlientMain: TFormKlientMain

Left = 200

Top = 110

BorderStyle = bsSingle

Caption = 'Klient pobierający czas z zegara centralnego'

ClientHeight = 89

ClientWidth = 361

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

Menu = KlientMainMenu

PixelsPerInch = 96

TextHeight = 13

object LabelKlientCzas: TLabel

Left = 96

Top = 16

Width = 160

Height = 61

Caption = '??:??:??'

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -53

Font.Name = 'Times New Roman'

Font.Style = []

ParentFont = False

end

object KlientMainMenu: TMainMenu

Left = 296

Top = 16

object Czas1: TMenuItem

Caption = '&Czas'

object Zamknij1: TMenuItem

Caption = '&Zamknij'

OnClick = Zamknij1Click

end

end

end

object Timer1: TTimer

Interval = 200

OnTimer = Timer1Timer

Left = 64

end

end

Serwer

Program główny

program fiSerwerPrg;

uses

Forms,

fiSerwerMain in 'fiSerwerMain.pas' {FormSerwerMain};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TFormSerwerMain, FormSerwerMain);

Application.Run;

end.

Moduł formatki głównej

unit fiSerwerMain;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Menus, ExtCtrls;

type

TFormSerwerMain = class(TForm)

LabelSerwerCzas: TLabel;

SerwerMainMenu: TMainMenu;

Czas1: TMenuItem;

Start1: TMenuItem;

Stop1: TMenuItem;

N1: TMenuItem;

Zamknij1: TMenuItem;

Pobierz1: TMenuItem;

Timer1: TTimer;

procedure Start1Click(Sender: TObject);

procedure Zamknij1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormSerwerMain: TFormSerwerMain;

implementation

{$R *.DFM}

procedure TFormSerwerMain.Start1Click(Sender: TObject);

begin

//

end;

procedure TFormSerwerMain.Zamknij1Click(Sender: TObject);

begin

Close;

end;

procedure TFormSerwerMain.Timer1Timer(Sender: TObject);

begin

///tutaj moze nastapic zgloszenie od karty, na ktore nalezy

//zreagowac np. odpowiedziec

//po czym wyzerowac je

end;

end.

Zasoby formatki głównej

object FormSerwerMain: TFormSerwerMain

Left = 200

Top = 110

BorderStyle = bsSingle

Caption = 'Zegar centralny'

ClientHeight = 97

ClientWidth = 269

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

Menu = SerwerMainMenu

PixelsPerInch = 96

TextHeight = 13

object LabelSerwerCzas: TLabel

Left = 64

Top = 16

Width = 122

Height = 61

Caption = '12:25'

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -53

Font.Name = 'Times New Roman'

Font.Style = []

ParentFont = False

end

object SerwerMainMenu: TMainMenu

Left = 216

Top = 8

object Czas1: TMenuItem

Caption = '&Czas'

object Start1: TMenuItem

Caption = '&Start'

OnClick = Start1Click

end

object Stop1: TMenuItem

Caption = '&Stop'

end

object Pobierz1: TMenuItem

Caption = '&Pobierz'

end

object N1: TMenuItem

Caption = '-'

end

object Zamknij1: TMenuItem

Caption = '&Zamknij'

OnClick = Zamknij1Click

end

end

end

object Timer1: TTimer

Interval = 100

OnTimer = Timer1Timer

Left = 16

Top = 8

end

end

 


Wspólne dla obu programów

Unit

(do uzupełnienia)

End.

 


Schemat karty prototypowej

(do uzupełnienia)

 


Projekt płytki karty prototypowej

(do uzupełnienia)


Wszelkie prawa zastrzeżone © Piotr Trzcionkowski 1999-2002