Jako że ostatnimi czasy autor projektu postanowił wymienić klawiaturę na nową, zastanawiał się, co zrobić z tą starą, zużytą. Ponieważ swego czasu natknął się na projekt programatora AVR wykorzystującego hub USB, postanowił stworzyć podobne urządzenie wykorzystujące właśnie klawiaturę.
Jak ma to działać? Większość klawiatur wyposażona jest w 3 diody sygnalizujące stan klawiszy Num-, Caps- i Scroll-Lock, które mogą być kontrolowane z komputera-hosta za pomocą zapytania HID Set_Report i dzięki temu można je łatwo przekształcić w dowolnego zastosowania porty wyjściowe. Używanie klawiatury jako portu wejściowego wymaga nieco więcej sprytu, ponieważ zwykle urządzenie ogranicza się do skanowania poszczególnych kolumn i wierszy, w jakich ułożone są klawisze. Ponadto większość klawiatury wykorzystuje odkłócanie drgań klawiszy (debouncing), dlatego wymagane jest dokładne symulowanie naciśnięcia wybranego klawisza. Kiedy ten zostanie wciśnięty, klawiatura generuje przerwanie i wysyła 8 bitów danych, zawierających informacje o wszystkich klawiszy. Pierwszy bit danych określa stan klawiszy modyfikatorów (shift, ctrl, alt itd.), co znajdzie zastosowanie w budowanym programatorze. Dodatkowo, stan klawiszy może być sprawdzany zapytaniem Get_Report, lecz i tak wymaga to uprzedniego obsłużenia ewentualnych przerwań.
W projekcie autor wykorzystał elektronikę klawiatury Microsoft Digital Media Keyboard 3000, płytka znajdująca się w jej wnętrzu wygląda następująco:
Czwarta dioda nie może być kontrolowana przez komputer, wskazuje jedynie stan dodatkowych funkcji klawiatury (aczkolwiek sama specyfikacja HID pozwala na sterowanie aż pięcioma diodami).
Do emulowania naciśnięcia klawisza wykorzystany został transoptor, który symuluje zwarcie odpowiedniego rzędu i kolumny klawiszy. Jako że transoptory znaleźć można w większości zasilaczy, autor „odratował” wykorzystany element (KB817-B) ze starej ładowarki do telefonu.
I to wszystko, czego potrzeba do budowy programatora! Poniżej gotowe połączenia z procesorem:
Całe urządzenie składa się więc z płytki z klawiatury, transoptora i programowanego procesora – Atmel ATTiny2313. Dodatkowo przyłączona została dioda LED, aby przetestować wgrany do procesora program. Procesor podłączany jest bezpośrednio do płytki klawiatury, w miejsce diod LED (wyjścia 5V, każde z rezystorem 330Ω ograniczającym prąd): w sposób następujący:
Num-lock -> SCL
Caps-lock -> MOSI
Scroll-lock -> RESET
Rząd/kolumna odpowiadająca prawemu przyciskowi Shift -> MISO
Dodatkowo, do transoptora przyłączony został rezystor ograniczający prąd – 470Ω.
Celem przetestowania działania autor napisał własne oprogramowanie. Okazało się, że zwykła, umieszczona w pętli, zmiana stanu diod LED pozwala na osiągnięcie częstotliwości od 0,5 do 1,2 kHz, co jest wartością większą, niż można by było przypuszczać. Niestety, sprawdzanie stanu wejść odbywa się o wiele wolniej, w przypadku omawianej klawiatury częstotliwość skanowania wynosi 250 Hz.
Dodatkowo, klawiatura odkłóca drgania klawiszy – w najgorszym przypadku od naciśnięcia klawisza do odebrania przez komputer danych może minąć nawet 40 ms. Niestety, jest to duże ograniczenie, w porównaniu z nie taką złą częstotliwością zmiany stanu wyjść.
Po przeprowadzeniu wstępnych testów, autor stworzył sterownik dla avrdude (testowany tylko na Linuxie, ale powinien działać również z Windowsem i OS X).
Kod: Text
Jak widać powyżej, sterownik działa i umożliwia zaprogramowanie procesora, ale zajmuje to nieco czasu, z powodu powolnej obsługi wejść, lecz jest całkiem akceptowalne. Pozwoli to na wykorzystanie starych i niepotrzebnych klawiatur w roli przydatnego programatora lub na stworzenie własnego urządzenia.
Autor odkrył także (przyglądając się działaniu avrdude), że dane z pinu MISO są odczytywane za każdym razem, nawet jeśli później nie są wykorzystywane. Po zmodyfikowaniu działania avrdude tak, by dane z pinu MISO były odczytywane tylko wtedy, jeśli następnie znajdują użycie, udało się znacząco skrócić czas programowania (86 bitów w 11,75 sek. zamiast 123,79 sek.).
Kod: Text
Dodatkowe szczegóły i pliki do pobrania można znaleźć na stronie projektu.