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
  • interfejs SPI
  • interfejs I2C
  • interfejs 1-Wire
  • interfejs WS2812 RGB LED
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