Dodatkowe porty GPIO w routerze
Ostatnia zmiana: 2014-10-26 12:15
Rodzina procesorów ATtiny firmy ATMEL jest dobrze znana wszystkim pasjonatom elektroniki. Są to proste procesory wyposażone do kilkudziesięciu uniwersalnych linii wejście-wyjście, zestaw zegarów, przetworników A/C, pamięci flash, ram, EEPROM i szereg innych elementów. Są przy tym dość tanie, łatwo programowalne a zastosowanie niektórych ich odmian w
Arduino przyczyniło się eksplozji popularności podobnych rozwiązań.
Jednym z członków tej rodziny jest 8-nóżkowy układ ATtiny85. Wyposażony jest w 8KB pamięci "flash", często używany jest w różnych zastosowaniach, a wykorzystując dodatkowo projekt
V-USB (Virtual USB) możemy wzbogacić go o obsługę interfejsu USB. Tym samym programowo można uzyskać urządzenia typu klawiatury i myszy, szereg typów magistrali i autorskie projekty. Podobne rozwiązanie stosuje
I2C tiny USB, ale w tym konkretnym przykładzie ATtiny zostanie wykorzystany do stworzenia dodatkowych linii GPIO.
Potrzebujmy układu ATtiny85 z wgranym projektem
Little Wire. Jest to uniwersalne oprogramowanie które pozwala na zamianę wymienionego procesora m.in. w:
- programator AVR usbtinyisp
- 4 kanały GPI0 (porty wejścia lub wyjścia)
- przetwornik ADC z rozdzielczością 10 bitową
- 2 równoległe sprzętowe wyjścia PWM
ATtiny można zaprogramować samodzielnie wykorzystując programator lub inne Arduino, można wykorzystać szereg gotowych układów dostępnych na rynku (np. Digispark USB czy Olimexino 85).


Zdjęcia projektów pochodzą z witryn ich producentów: Backbox, Digispark, Nanite, Olimexino, Little Wire.
Taki układ należy podłączyć do USB, potem zostaje tylko zainstalowanie odpowiedniego sterownika:
# opkg update
# opkg install kmod-gpio-lw-usb
W logach powinna pojawić informacja o wykryciu interfejsu:
kern.info kernel: [ 359.460000] gpio-lw-usb 1-1:1.0: version 1.04 found at bus 001 address 007
kern.info kernel: [ 359.470000] gpiochip_add: registered GPIOs 50 to 55 on device: Little Wire
kern.info kernel: [ 359.480000] gpio-lw-usb 1-1:1.0: LittleWire 1.3
kern.info kernel: [ 359.480000] gpio-lw-usb 1-1:1.0: connected gpio-lw-usb device
Układ udostępnia 4 użyteczne GPIO odpowiadające odpowiednim wyprowadzeniom procesora: 0, 1, 2 i 5. Linie 3 i 4 wykorzystywane są do komunikacji USB, więc są bezużyteczne w tym zastosowaniu. Ponieważ jednak routery udostępniają swoje linie GPIO, przerobiłem trochę sterownik i numeracja tych dodatkowych została przenumerowana od 50:
- linia 0 (PB0) - numer gpio 50
- linia 1 (PB1) - numer gpio 51
- linia 2 (PB2) - numer gpio 52
- linia 5 (PB5) - numer gpio 55
Obsługa tych linii jest
identyczna jak tych systemowych; dla przykładu - aby ustawić stan niski na linii 1 (PB1) należy wydać polecenia:
# echo 51 > /sys/class/gpio/export # 51 odpowiada linii 1 czyli PB1
# echo "out" > /sys/class/gpio/PB1/direction # ustawienie linii jako wyjściowej
# echo 0 > /sys/class/gpio/PB1/value # ustawienie poziomu niskiego na linii
Eksportujemy numery 50, 51, 52 i 55, pojawiają się nazwy "normalne": PB0, PB1, PB2 i PB5.
Co dalej? Można je wykorzystać jako linie do sterowania przekaźnikami, zrobić prostą klawiaturę, sterować jakimiś urządzeniami. Zyskujemy w ten sposób 4 uniwersalne linie wejścia/wyjścia bez rozbierania routera w cenie kilku złotych.
Oczywiście nie jest to jedyna metoda wykorzystania Attiny i Litte Wire. W repozytorium projektu znajdziemy kilka przykładowych programów pokazujących sposób sterownia liniami gpio, odczytu 1wire, i2c, spi, przetwornika ADC czy innymi aspektami sprzętowymi obecnymi w tych układach Atmela. Można to wykorzystać do własnych celów - w projekcie znajdziemy przykłady sterowania diodami RGB, odczytu przycisków, odczytu napięcia z przetwornika czy odczytu temperatury z DS1820. Można także bez problemu posłużyć się IDE Arduino i po prostu pisać własne programy na ten procesor.
W
moim repo można znaleźć pakiet
littlewire zawierający skompilowane przykładowe programy dla tego projektu. Zobacz także
http://eko.one.pl/forum/viewtopic.php?pid=120577#p120577