Klawiatura szesnastkowa, Bascom 8051 - kurs
[ Pobierz całość w formacie PDF ]
//-->###BASCOM CollegeKlawiatura szesnastkowado systemów mikroprocesorowych2503Do czego to służy?Prawie każdy system mikroprocesorowy mu−si posiadać wbudowane układy, które umoż−liwiają mu komunikację ze światem zewnę−trznym. Procesor musi skądś otrzymywać da−ne, przetwarzać je i wysyłać dalej, najczę−ściej do interfejsu czytelnego dla człowieka.Najlepszym przykładem takiego systemu jestkomputer PC. Posiada on szereg układówprzechwytujących informację ze świata ze−wnętrznego, czyli klawiaturę, myszkę, mo−dem telefoniczny lub skaner. Informacjaprzetworzona przez komputer przekazywanajest jego użytkownikowi za pomocą monito−ra, karty dźwiękowej, lub drukarki. O ilejednak dodawanie dodatkowych układów ko−munikacyjnych do komputera nie sprawiaprawie nigdy większych trudności, to inaczejma się sprawa z miniaturowymi komputerka−mi jakimi są nasze systemy mikroprocesoro−we. Przeszkodą jest tu przede wszystkimograniczona ilość wyprowadzeń nawet “naj−większego” procesora. Na szczęście, projek−tanci systemów mikroprocesorowych wymy−ślili kilka standardów przekazywania infor−macji pomiędzy elementami systemu, a takżedo i ze świata zewnętrznego. Jednym z naj−popularniejszych sposobów transmisji da−nych jest dwuprzewodowa magistrala I2C.Specyfikacją magistrali I2C zajmiemy sięw najbliższym czasie, a na razie zadowolimysię tylko informacją, że w dwuprzewodowejmagistrali dane mogą być przekazywanew obydwóch kierunkach: od układu nadrzęd−nego (master) do układów podporządkowa−nych (slave), a także w odwrotnym kierunku.Magistrala I2C została tak zaprojektowana,że w zasadzie nic nie ogranicza ilości dołą−czonych do niej urządzeń. Warunek jest je−den, a jego niespełnienie może prowadzić donieprawidłowej transmisji danych: każdeurządzenie dołączone do magistrali musi po−siadać swój własny, niepowtarzalny adres.Magistrala I2C jest szeroko stosowana w pro−fesjonalnych systemach mikroprocesoro−wych, m. in. w sterowanym cyfrowo sprzęcievideo i audio.Jednym z najważniejszych elementówumożliwiających wydawanie rozkazówi przekazywanie informacji do procesoraprzez człowieka, jest klawiatura. Nie musibyć to bynajmniej klawiatura typu “kompute−rowego”. Niekiedy za klawiaturę uważamyzespół kilku klawiszy, a nawet jeden klawisz.Tak czy inaczej klawisze te muszą być jakośdołączone do procesora i w każdym wypad−ku zajmują pewną ilość cennych wyprowa−dzeń układu.Narysunku 1pokazane zostały trzynajpopularniejsze sposoby łączenia klawi−szy z procesorem. Najprostszą metodą do−łączenia klawiatury do procesora jest bez−pośrednie połączenie klawiszy z wejściamiukładu, pokazane na części rysunku ozna−czonej “A”. Jest to także najprostsze roz−wiązanie z punktu widzenia programisty,ale posiada jedną, przy większej ilości kla−wiszy dyskwalifikująca je wadę: na każdyklawisz przypada jedno wyprowadzenieprocesora.Rys. 126Elektronika dla WszystkichBASCOMCzęsto stosowanym rozwiązaniem jestklawiatura matrycowa, której schemat zostałpokazany w części rysunku “B”. Zależnośćpomiędzy ilością klawiszy, a ilością użytychwyprowadzeń procesora jest tu nieco lepszaniż w poprzednim przykładzie. Do obsługiklawiatury 12 przyciskowej potrzebne jesttylko 3+4 czyli 7 wyprowadzeń, klawiatura16 przyciskowa wymagać będzie zaabsorbo−wania 8 nóżek procesora. To już trochę le−piej, ale w przypadku procesorów 89CX051o 15 aktywnych wyprowadzeniach, też bar−dzo dużo. Ponadto, programowa obsługa kla−wiatury matrycowej (nie będziemy jej w tymmiejscu opisywać) jest znacznie bardziejskomplikowana niż pojedynczych przyci−sków i wymaga stałego zaangażowania zestrony skanującego ją procesora.Moim zdaniem, najlepszym sposobemskonstruowania klawiatury o większej ilościprzycisków jest zastosowanie dekoderówumożliwiających przesyłanie ośmiobitowegosłowa wejściowego do procesora za pomocądwuprzewodowej magistrali I2C (“C”). Naj−lepszym przykładem takiej klawiatury jestkonsola komputera PC, z której dane przeka−zywane są także za pomocą dwóch przewo−dów (nie jest to jednak magistrala I2C, aleidea pozostaje taka sama).Układ, z którego budową zapoznamy sięza chwilę zaprojektowany został jako uzupeł−nienie naszej płytki do testowania prototypo−wych układówprocesorowychi nauki progra−mowania w sy−stemieBA−SCOM. Nic jed−nak nie stoi naprzeszkodzie,aby zastosowaćgo w układziepraktycznym, ja−ko moduł uła−twiający budowęsystemu. Już te−raz mogę odsło−nić Wam rąbektajemnicy ota−czającej czekają−cą nas przy−szłość. Na opu−blikowanie jejopisu czeka ko−lejna uniwersal−na płytka do bu−dowy systemówmikroprocesoro−wych. Tym ra−zem nie będzieto jednak tablicao sporych wy−miarach, wygod−na jedynie pod−czas nauki i te−stowania nowych pomysłów. Nowa płytkama wymiary typowego wyświetlacza LCD(dokładnie), ale udało mi się zmieścić na niejwiększość elementów potrzebnych do budo−wy typowych układów procesorowych. Po−służmy się prostym przykładem: dołączmydo tej płytki znany już Wam moduł wyświe−tlaczy siedmiosegmentowych LED, klawia−turę i ... mamy gotowy zegar o zależnej tylkood inwencji programisty ilości funkcji.w stronę plusa zasilania. A zatem, aby cokol−wiek z wejść układu PCF8574 odczytać, mu−simy najpierw ustawić na nich stan wysoki.W tym celu należy zainicjować transmisjęw magistrali I2C, przygotować odbiornik doprzyjęcia informacji, a następnie wysłać doniego wartość 255, czyli binarnie 1111 1111.Wygląda to dość skomplikowanie, ale naszczęście dysponujemy naszym BA−SCOM’em. W języku MCS BASIC wszyst−kie wymienione operacje wykonywane są powydaniu tylko jednego polecenia:I2CSEND[adres odbiornika],[wartość, którą chcemy wysłać]W naszym konkretnym przypadku pole−cenie to będzie miało postać:I2CSEND 112, 255(dla układu PCF z wszystkimi wejściamiadresowymi w stanie niskim)lubI2CSEND 112, 255(dla układu PCFz wejściami adresowymi w stanie 001(BIN))Po wydaniu tych poleceń wszystkie wej−ścia układów IC1 i IC2 przyjmują stanRys. 2 Schemat ideowyJak to działa?Schemat elektryczny układu klawiatury zo−stał pokazany narysunku 2.Dwoma podsta−wowymi elementami układu są znane jużWam terminale typu PCF8574A, umożliwia−jące wymianę danych pomiędzy magistraląI2C, a równoległą, ośmiobitową szyną da−nych. W przypadku modułu wyświetlaczysiedmiosegmentowych układy PCF przeka−zywały informację z magistrali do dekode−rów wyświetlaczy siedmiosegmentowych,a teraz stoi przed nimi odwrotne zadania:zbieranie informacji ze styków klawiszyi przekazywanie jej w postaci szeregowej doprocesora. Zasadę działania układu najlepiejbędzie poznać na podstawie analizy metodprogramistycznych stosowanych do jejobsługi.Każdy z układów PCF8574 posiada osiemwejść − wyjść typu open collector, z wewnę−trznymi rezystorami podciągającymi wejściaElektronika dla Wszystkich27BASCOMwysoki i układy te gotowe są do przyjęcia in−formacji z klawiatury.Programista piszący program ob−sługujący naszą klawiaturę będzie miał terazdwie możliwości: albo procesor będzie nieu−stannie sprawdzał stan wejść układów IC1i IC2, albo wykorzysta sygnał przerwaniawystępujący na wyjściach INT przy jakiej−kolwiek zmianie stanu wejść układów PCF.Sprawa obsługi przerwań zostanie wyczerpu−jąco omówiona w BASCOM College,a w tym momencie wystarczy tylko wspo−mnieć, że po wystąpieniu przerwania proce−sor przestaje wykonywać jakiekolwiek czyn−ności i natychmiast przystępuje do realizo−wania obsługi przerwania, czyli wykonaniainstrukcji zawartych w specjalnym podpro−gramie (w naszym przypadku będzie tosprawdzenie stanu klawiatury).W każdym jednak wypadku odczytu da−nych dokonujemy za pomocą polecenia:I2CRECEIVE [adres nadajnika],[zmienna]Czyli konkretnie:I2CRECEIVE 66, [nazwa zmiennej](dla układu PCF z wejściami adresowymiw stanie 001 (BIN))lubI2CRECEIVE 66, [nazwa zmiennej](dla układu PCF z wejściami adresowymiw stanie 001(BIN))Po odebraniu wartości innej niż 255, czy−li w przypadku naciśnięcia przez użytkowni−ka jakiegoś klawisza procesor przystępuje dojej analizy, a następnie ponownie ustawia nawejściach układów PCF8574 stan wysokiprzygotowując je w ten sposób do oczekiwa−nia na naciśnięcie kolejnego klawisza.Warto zauważyć, że nasza klawiatura zo−stała podzielona na dwie sekcje i wszystkieopisane czynności muszą donosić się kolejnodo każdej z nich.Należy jeszcze wspomnieć o roli jakąpełnią jumpery S18 i S17. Za ich pomocąustawiamy adresy układów PCF tak, abyprocesor mógł je jednoznacznie zidentyfiko−wać. Każdy z stosowanych w systemie ukła−dów PCF musi mieć swój indywidualny ad−res. Jeżeli więc będziemy używać naszej kla−wiatury np. jednocześnie z modułem wy−świetlaczy siedmiosegmentowych,w którymtakże znajdują się trzy układy te−go typu, to należy zwrócić bacz−ną uwagę, aby każdy z ustawio−nych adresów był inny.sy umieszczone na płycie czołowej klawia−tury odnoszą się jedynie do wartości licz−bowej wprowadzanych danych. W wieluzastosowaniach praktycznych trzeba bę−dzie je zastąpić opisem czynności, jakieprocesor ma wykonać po naciśnięciu dane−go klawisza.Wykonany układ powinniśmy jeszczeprzetestować, co możemy uczynić za po−mocą naszej płytki testowej. Nie musimyw tym celu jeszcze programować proceso−ra, ani nawet go posiadać. Piszemy w edy−torze BASCOM’a program, którego listingzostał zamieszczony poniżej, kompilujemygo, a następnie po połączeniu płytki testo−Rys. 3a Schemat montażowyMontażi uruchomienieNarysunku 3została pokazanamozaika ścieżek płytki obwodudrukowanego oraz rozmieszcze−nia na niej elementów. Z uwagina znaczną komplikację połączeńpłytka została wykonana na lami−nacie dwustronnym z metaliza−cją. Montaż układu klawiaturywykonujemy w typowy sposób,rozpoczynając od wlutowaniaw płytkę rezystorów i podstawekpod układy scalone, a kończąc nazamontowaniu przycisków mi−croswitch. Te ostatnie elementymusimy wlutować szczególniestarannie, bacząc aby wszystkieprzyciski zostały ustawione ide−alnie równo względem po−wierzchni płytki.Do dyspozycji mamy jeszczejedną płytkę, którą wprawdzie niesposób nazwać płyt−ką obwodu druko−Rys.5wanego. Może onanatomiast posłużyćdowykonaniaw miarę estetycznejpłyty czołowej kla−wiatury, która po−nadto stabilizuje po−łożenie przyciskówi czyni cała kon−strukcje odporną naurazy mechaniczne.Sposób połączeniaobydwóch płytekjest wyraźnie wi−doczny na fotogra−fiach.Warto jeszczezaznaczyć, że napi−Wykaz elementówKondensatoryC1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100µF/10C2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100nFRezystoryR1 ... R6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10kΩPółprzewodnikiIC1, IC2 . . . . . . . . . . . . . . . . . . . . . . . . .PCF8574APozostałeS1 ... S16 . . . . . . . . . . . .przyciski typu microswitchS17, S18 . . . . . . . . . . . . . .3x2 goldpin + 3 jumperyCON1 . . . . . . . . . . . . . . . . . . . . . . . . . . .5x goldpinKomplet podzespołów z płytką jestdostępny w sieci handlowej AVT jakokit szkolny AVT−250328Elektronika dla WszystkichBASCOMwejzklawiaturą i emulatorem sprzętowym, uru−chamiamy. Jeżeli wszystko jest w porząd−ku, to po naciśnięciu któregokolwiek klawi−sza na wyświetlaczu LCD powinna okazaćsię odpowiadająca mu wartość, wyrażonaw kodzie decymalnym i hexadecymalnym.Te same wartości będą przekazywane takżena ekran monitora emulatora programowe−go i do emulowanego programowo wyświe−tlacza LCD, o ile emulacja programowa zo−stanie także włączona (rys.5).Sposób połączenia wszystkich elementówpotrzebnych do przetestowania klawiaturyzostał pokazany narysunku 4.' ************** KONFIGURACJA SPRZĘTOWA ***************$sim'nie stosować w przypadku testowania programu z zaprogramowanym 'procesoremConfig Sda = P3.5'konfiguracja sprzętowa I2CConfig Scl = P3.4'konfiguracja sprzętowa I2C'Config Lcd = 16 * 1a'stosować w przypadku testowania programu z zaprogramowanym ''procesoremConfig Lcd = 16 * 1'stosować w przypadku testowania programu z emulatorem sprzętowymDim Value As Byte'deklaracja zmiennej (wartości pobieranej z klawiatury)Dim Valuehex As String * 2'deklaracja ciągu znakowego o długości 2 znakówDeclare Sub Sekcja1'deklaracja 1 podprogramu analizującego kod odebrany z klawiaturyDeclare Sub Sekcja2'deklaracja 1 podprogramu analizującego kod odebrany z klawiatury' *************** PĘTLA GŁOWNA PROGRAMU ***************Do'początek pętli programowejI2csend 112, 255'ustawienie stanów wysokich na wyjściach pierwszego układu PCF8574AI2csend 114, 255'ustawienie stanów wysokich na wyjściach drugiego układu PCF8574AI2creceive 64 , Value'odczytanie stanu wejść pierwszego układu PCF8574AIf Value <> 255 Then'jeżeli naciśnięty został klawisz w sekcji 1 to:Call Sekcja1'idź do podprogramu analizującego sekcji 1Valuehex = Hex(value)'konwersja odczytanej wartości na kod HEXCls'czyszczenie ekranu LCDLcd "DEC:" ; Value ; " HEX:" ; Valuehex 'wysłanie na wyświetlacz LCD otrzymanych wartości w formacie 'DEC i HEXPrint "DEC:" ; Value ; " HEX:" ; Valuehex 'wysłanie do portu RS otrzymanych wartościWait 1'zwłoka 1 sekEnd If'zakończenie uwarunkowańI2creceive 66 , Value'odczytanie stanu wejść drugiego układu PCF8574AIf Value <> 255 Then'jeżeli naciśnięty został klawisz w sekcji 2 to:Call Sekcja2'idź do podprogramu analizującego sekcji 2Valuehex = Hex(value)'konwersja odczytanej wartości na kod HEXCls'czyszczenie ekranu LCDLcd "DEC:" ; Value ; " HEX:" ; Valuehex'wysłanie na wyświetlacz LCD otrzymanych wartościPrint "DEC:" ; Value ; " HEX:" ; Valuehex'wysłanie do portu RS otrzymanych wartościWait 1'zwłoka 1 sekEnd If'zakończenie uwarunkowańLoop'zamknięcie pętli programowej'*******PODPROGRAMY KONWERTUJĄCE KODY OTRZYMANE Z KLAWIATURY ************Sub Sekcja1If Value = 254 ThenValue = 0End IfIf Value = 253 ThenValue = 1End IfIf Value = 251 ThenValue = 2End IfIf Value = 247 ThenValue = 3End IfIf Value = 239 ThenValue = 4End IfIf Value = 223 ThenValue = 5End IfIf Value = 191 ThenValue = 6End IfIf Value = 127 ThenElektronika dla Wszystkich29BASCOMValue = 7End IfEnd SubSub Sekcja2:If Value = 254 ThenValue = 8End IfIf Value = 253 ThenValue = 9End IfIf Value = 251 ThenValue = 10End IfIf Value = 247 ThenValue = 11End IfIf Value = 239 ThenValue = 12End IfIf Value = 223 ThenValue = 13End IfIf Value = 191 ThenValue = 14End IfIf Value = 127 ThenValue = 15End IfEnd SubRys.5REKLAMA · REKLAMA · REKLAMA · REKLAMA · REKLAMA · REKLAMA · REKLAMA30Elektronika dla Wszystkich
[ Pobierz całość w formacie PDF ]