Dnia 8 listopada 2007 roku stworzyyłem mój pierwszy tak skomplikowany projekt. Zawsze wiedziałem (tak, tak, to się wie!), że jestem w stanie nie tylko coś zaprogramować, ale też coś skonstruować.
I oto jest!
Pierwszy wolny (od wolności) interfejs adb2usb pozwalający podłączyć stare klawiatury makowe adb do niemal dowolnego komputera wyposażonego w złącze usb*. Projekt zainspirowany przez projekt kbdbabel.
Jest zupełnie używalna ( jako że cały ten tekst napisałem właśnie na Apple Extended Keyboard II. Używam jej od tego czasu z powodzeniem do dziś.
Układ składa się z dwóch części:
jedna (attiny13) odpowiada za dekodowanie protokołu adb i przesyłanie danych przez złącze szeregowe bez żadnej interpretacji (typowy konwerter adb na serial);
druga (atmega8) czyta dane przesyłane szeregowo, przetwarza kody klawiszy ze standardu adb na standard usb, po czym przesyła dane przez usb do komputera.
Nie ma możliwości przepełnienia łącza szeregowego – zaimplementowane jest sterowanie przepływem typu „można przesyłać!” – jeśli strona usb (atmega8) jest gotowa do pobierania i przetwarzania danych.
Buforowanie klawiszy odbywa się wewnętrznie w klawiaturze. Nie ma potrzeby powtórnej implementacji buforowania.
Co działa:
Wszystkie zwykłe klawisze, klawiatura jest przełączana do trybu „3” co oznacza odróżnianie lewych i prawych klawiszy funkcyjnych w klawiaturach obsługujących ten tryb (w pozostałych powinno działać rozpoznawanie lewych klawiszy funkcyjnych); tryb „3” jest włączany po chwilowej nieaktywności (np. po powtórnym podłączeniu klawiatury).
Klawisze funkcyjne: f13 – mute, f14 – volume down, f15 – volume up
Nie działają:
Klawisz Power, caps lock – bo w klawiaturze nie działa standardowo, oraz NIE CIERPIĘ caps lock (w pracy mam wydłubany, w mini macu zablokowany w systemie), budzenie klawiaturą – jest wyłączone (ale zaimplementowane), bo system myśli że zmieniono klawiaturę i przestawia ją tak, że ~ (tylda) nie działa.
Do zrobienia:
- programowe przełączanie pomiędzy makowym układem klawiszy a pecetowym (dotyczy f13-f15 oraz keypad)
- być może uda się opanować budzenie przez klawiaturę
- zamiana klawiszy alt i jabłko; tu jest szkopuł, bo klawiatura jest w stanie odróżnić lewy alt od prawego, ale lewe jabłko od prawego już nie … dotyczy układu w Windowsach, bo te odróżniają systemowo klawisze funkcyjne prawe od lewych, zwłaszcza alty.
- zapalanie diodek odpowiednio do trybu pracy klawiatury (num lock, caps lock, scroll lock)
Oto:
- schemat v0.2
- układ elementów v0.2
- płytka drukowana (jednostronna) v0.2 (uproszczone prowadzenie ścieżek, nic poza tym)
- wsad dla procesora atmega8 v0.1
- wsad dla procesora attiny13 v0.1
Obrazki do druku są w rozdzielczości 300dpi.
Fuse bity dla attiny13: lfuse=0x7a, hfuse=0xff (domyślny)
Fuse bity dla atmega8: lfuse=0xdf, hfuse=0x99 (domyślny)
Schemat i płytkę zaprojektowałem tak, aby była kompatybilna z przyszłymi wersjami oprogramowania.
Jedyne co wydaje się niewykonalne na pierwszy rzut oka, to sterowanie diodami świecącymi w klawiaturze ze względu na brak połączenia zwrotnego do procesora attiny13. Jednak wydaje się, że jeśli to będzie konieczne, to jeden dodatkowy przewód do starej płytki załatwi sprawę, podczas, gdy w nowej będzie to uwzględnione.
Nie odpowiadam za jakiekolwiek uszkodzenia sprzętu wynikłe w wyniku montowania powyższego interfejsu! Ja swój zmontowałem i właśnie na nim piszę ten tekst – znaczy działa!
Na razie nie podaję kodów źródłowych; ukażą się wkrótce, po uporządkowaniu prototypowego kodu (który powstał na kolanie, „aby tylko działał”).
Czas tworzenia powyższego projektu od zera do momentu działania bez zarzutu – ok. 3 tygodni (etap pośredni – półdziałający prototyp zmontowany na jednym procesorze atmega8 gubiący bity ze względu na długą obsługę przerwań USB)
W projekcie użyłem doskonałej biblioteki avrusb do wyłącznie programowej obsługi usb. Ze względu na licencję jestem zobowiązany więc do umieszczenia kodu źródłowego.
Koszt części – ok. 15 zł – 5 piw!
- attiny13 – 3-4 zł
- atmega8 – 4-5 zł
- rezystory, diody i rezonator- ok. 2 zł
- płytka – tutaj różnie, można zmontować na uniwersalnej – ok 1 zł.
- gniazdka – usb ok. 2 zł, ew. sam kabelek ok. 1 zł (do obcięcia), svideo ok 1 zł.
*) – nie działa z FreeBSD 5.4 i prawdopodobnie z innymi wersjami. Testowany na Debianie, MacOS X, Windows XP, działa bez zarzutu.
|
|
|
||||||
|
|