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).

image image
image image

image
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