Artykuły z procesorami PIC16F84A w roli głównej.

Oprogramowanie napisane w asemblerze.

Prace wykonane dosyć dawno temu.

Dostosowanie terminala AVT200 wymagającego klawiatury XT do współpracy z klawiaturą AT.

Konwerter protokołu AT na XT został zbudowany na bazie mikrokontrolera PIC16F84A. Podstawą był interfejs klawiatury AT opisany przez Petera Luethi. Wykorzystałem całą obsługę interfejsu AT oraz procedury wysyłające rozkazy do klawiatury. Z mojej strony wymyśliłem, jak wygenerować przebiegi zgodne z protokołem klawiatury XT. Problemem był brak dobrego opisu tego protokołu. O opis klawiatury AT nie było trudno. Znalazłem tylko krótkie informacje na temat różnic pomiędzy klawiaturą AT i XT, które na dodatek okazały się nieścisłe, a wręcz błędne. Dopiero obserwacja przebiegów linii zegarowej oraz  danych na oscyloskopie doprowadziła mnie do następujących wniosków:

  • kod klawisza wysyłany jest w ramce 9-bitowej

  • pierwszy jest bit startu (logiczna jedynka)

  • następnie osiem bitów danych od najmłodszego do najstarszego

  • ostatni bit jest dla naciśnięcia klawisza zawsze zerem logicznym a dla puszczenia klawisza jedynką logiczną

  • brak jest bitu stopu.

Dla porównania protokół klawiatury AT wygląda następująco:

  • kod klawisza wysyłany jest w ramce 11-bitowej

  • bit startu (dla odmiany logiczne zero)

  • następnie osiem bitów danych od najmłodszego do najstarszego

  • bit parzystości

  • bit stopu

  • kod naciśnięcia klawisza i puszczenia jest taki sam

  • kod puszczenia klawisza poprzedzony jest kodem 0xF0 (składa się z sekwencji dwóch kodów: 0xF0 oraz właściwego kodu klawisza)

Dla przypomnienia kody klawiszy dla klawiatury AT i XT są różne (w klawiaturze AT stosowany jest scan code 2, a w XT scan code 1).

Układ elektroniczny składa się z niewielu elementów: mikrokontrolera PIC16F84A, rezonatora 4 MHz oraz dwóch kondensatorów 18pF. Jeśli układ instrukcja montażu w terminalu wewnątrz obudowy terminala, to nic więcej do szczęścia nie potrzeba. Jeśli nie chcemy bawić się w rozcinanie ścieżek do gniazda klawiatury, to można dołożyć z jednej strony wtyk DIN (do terminala) a z drugiej strony gniazdo do klawiatury AT (aktualnie najczęściej będzie to gniazdo PS/2). Listing kodu źródłowego programu zawiera niezbędne komentarze ułatwiające analizę. Pomysł konwersji polega na tym, że klawiatura po włączeniu zasilania jest przełączana programowo na scan code 1 (XT) dzięki czemu nie ma potrzeby konwersji kodów generowanych przez poszczególne klawisze. Trzeba tylko oprawić je (kody) w inną ramkę (patrz wyżej). Sekwencje bitów wysyłane są na bieżąco ( z opóźnieniem połowy cyklu zegarowego). Oprócz tego procesor zajęty jest wysyłaniem odpowiednich kodów do klawiatury w przypadku wciśnięcia klawiszy CapsLock, NUMLock oraz ScrollLock (w celu zapalenia odpowiednich lampek). Do generowania kodu akceptowalnego przez programator używałem zintegrowanego środowiska programowego (IDE) producenta mikrokontrolera firmy Microchip. Do programowania układu używałem oprogramowania ProgPic2Schemat układu nie jest zbyt skomplikowany.

 Tester jest realizacją kiepsko udokumentowanego projektu. Stosując się do wskazówek autora trudno byłoby wykonać taki tester. Dokonałem dissasemblacji kodu i użyłem typowego środowiska programistycznego. W wyniku tego powstał listing zgodny z mnemoniką Microchipa oraz plik w formacie Intela akceptowany przez programator.