Konwerter klawiatura PC –> RS232
Konwerter ten służy do podłączenia klawiatury komputera PC (z wtykiem PS/2 lub DIN5) do dowolnego urządzenia posiadającego port szeregowy standardu RS-232, takiego jak np. terminal dostępowy, modem lub komputer przenośny (palmtop).
Na szybko:
– schemat urządzenia tutaj
– kod źródłowy oprogramowania tutaj (8 KB)
Sercem konwertera jest mikrokontroler jednoukładowy AT89C2051 firmy Atmel, odbierający od klawiatury PC kody naciśniętych i zwolnionych klawiszy oraz realizujący translację tych kodów na znaki ASCII i ich transmisję szeregową do podłączonego urządzenia. Translację poziomów logicznych na napięcia interfejsu RS-232 zapewnia układ MAX232 (lub jego odpowiednik, np. HIN232).
Łączny koszt zastosowanych w konwerterze części (układy elektroniczne, złącza, płytka drukowana, obudowa plastikowa) wynosi nie więcej niż 30 zł (w zależności od sklepu; ceny z roku 2002).
Schemat konwertera w wersji z gniazdem DIN5 pokazano na rysunku poniżej:

Przełącznikiem JP1 wybierane jest napięcie zasilające konwerter – może pochodzić z zestawu 4 akumulatorów 1,2V (pozycja AKU) lub 4 baterii 1,5V (pozycja BATT). W przypadku zastosowania baterii napięcie 6V (4 x 1,5V) jest obniżane przez 2 połączone szeregowo diody prostownicze D1 i D2. Tym samym w obu przypadkach układ zasilany jest napięciem 4,8V, malejącym z czasem do 4V (nie zaleca się rozładowywania akumulatorów poniżej napięcia 1V na ogniwo).
Dioda D3 świeci podczas każdej transmisji znaku łączem szeregowym oraz sygnalizuje fakt załączenia zasilania na początku działania konwertera. Przycisku SW1 (RESET) można nie montować – okazuje się przydatny natomiast podczas rozwoju nowych wersji oprogramowania urządzenia.
Program sterujący konwerterem napisano w asemblerze 8051.
Kod źródłowy programu wraz z postacią wynikową (plik Intel Hex) można pobrać stąd (8 KB).
Transmisja szeregowa odbywa się z prędkością 57600 bps, którą zapisano w stałej UART_SPD, umieszczonej na początku kodu źródłowego. Obniżenie tej prędkości (np. do 9600 bps) wymaga tylko zmiany w kodzie programu i jego ponownej asemblacji, natomiast podwyższenie prędkości do 115200 bps wymaga także wymiany zastosowanego rezonatora kwarcowego na 22,1184 MHz.
Na końcu pliku z kodem źródłowym umieszczono tablice odpowiedzialne za konwersję odbieranych z klawiatury kodów wciśniętych klawiszy na wysyłane portem szeregowym znaki ASCII. Tablice składają się z bajtów o wartości 0 gdy nie należy wysyłać żadnego znaku (np. po naciśnięciu klawisza Alt) lub znaku ASCII do wysłania, np. '0′ po naciśnięciu klawisza z cyfrą 0. Oddzielnie umieszczono tablicę znaków wysyłanych przy braku modyfikatorów: TablicaTransl, wciśniętym klawiszu Shift:
TablicaTransl_SHIFT lub wciśniętym klawiszu Ctrl: TablicaTransl_CTRL. Dalej mieści się tablica translacji kodów klawiszy specjalnych (poprzedzonych prefiksem 0xE0, takich jak np. prawy Alt, klawisze strzałek czy klawisze Windows: TablicaTransl_E0. Następnie jest umieszczona w kodzie programu tablica translacji odnosząca się do podzbioru klawiszy klawiatury numerycznej przy aktywnym stanie NumLock: TablicaFrag_NumLock, obejmująca jedynie klawisze o kodach 0x69-0x7d (od End/1 do PgUp/9).
W czasie działania konwertera naciskanie klawiszy NumLock, ScrollLock i CapsLock powoduje odpowiednią reakcję (zmiana stanu diody świecącej podłączonej klawiatury), natomiast z powyższych przełączników jedynie NumLock i CapsLock wpływają na kody znaków wysyłanych interfejsem RS-232. W aktywnym stanie NumLock wykorzystywana jest wymieniona powyżej tablica TablicaFrag_NumLock, natomiast w stanie CapsLock odwracana jest wielkość znaku we wszystkich wysyłanych literach z zakresu 'A’..’Z’ i 'a’..’z’.
Konwerter z kompletem baterii zasilających:

Prototyp konwertera wykonany na płytce uniwersalnej – zbliżenie:
