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 je
dnoukł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
*
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ż sprzeda
nych 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 z
ależ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 k
arta 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.
Zdecydowałem, że pierwszym realizowany
m 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.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, E
2PROM, 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ń 8051Rysunek 3. Struktur
a wewnętrzna 8051Rysunek 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
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:
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.
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.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. Manc
hester. 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]
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 g
wiazdy 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.Topologi
a 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.
Wykonanie wymagało:
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 el
ektryczny 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. Wystawia
niu 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 czytani
a.Kolejne urządzenie to pamięć
zrealizowana na buforach U3 i U5 bramkowana sygnałami RD, RW poprzez układy U25, U26.
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.
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].
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
;-------------
Program transmisyjny ma za zadanie p
rzeprowadzanie 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
;-------------
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].
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.
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 zamies
zczono w załączniku do niniejszej 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.
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ść st
worzenia 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.
Listing programu obsługującego
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
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
łównejobject 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.
(do uzupełnienia)
Projekt płytki karty prototypowej
(do uzupełnienia)