Blog (83)
Komentarze (2k)
Recenzje (1)
@cyrylloLN Digital — klon modułu PiFace dla Banana PRO

LN Digital — klon modułu PiFace dla Banana PRO

Chciał bym dziś zaprezentować i pokazać sterowanie modułem LN Digital dedykowanym dla Banana PRO, którego przedstawiałem krótko we wpisie o dedykowanych modułach dla Banana PRO. Do sterowanie pinami GPIO użyjemy biblioteki WiringBP dla Banana , która została przeportowana z biblioteki WiringPi dla Raspberry Pi.

562726

Moduł posiada układ MCP23S17 na SPI oraz UNL2803A. Na płytce znajduje się 8 wejść oraz 8 wyjść ( z użyciem UNL2803A). Pierwsze dwa wyjścia podłączone maja dwa przekaźniki za pomocą których możemy sterować zasilaniem 230V/10A. Każdy pin wyjściowy posiada podłączona diodę aby zobaczyć status pinu. Dodatkowo obok złącz przekaźników wyprowadzone jest zasilanie 5V.

Przekaźniki
Przekaźniki

Natomiast w pinach wejściowych cztery pierwsze piny maja podłączone przyciski , które podciągnięte są  pod GND przez rezystor. Wykrywanie przyciśniętego przycisku polega na podciągnięciu pinu na stan wysoki za pomocą funkcji pull_up. Gdy przycisk zostanie naciśnięty przy odczycie wartości pinu otrzymamy 0.

złącza wyjściowe oraz diody
złącza wejściowe oraz przyciski

Jak już wcześniej wspomniałem moduł komunikuje się z bananem za pomocą SPI dlatego musimy załadować moduł spi-sun7i najlepiej dodając go do pliku /etc/modules. Pełny opis jak włączyć SPI i nadać uprawnienia dla użytkownika znajdziecie na githubie Lemakera. Reszta pinów GPIO z Banana nie jest używana dlatego możemy je swobodnie używać.

Program testowy test.c

#include <stdio.h>
#include <wiringPi.h>
#include <mcp23s17.h>

#define BASE    100

int main (void)
{
  int i, wart;

  wiringPiSetup () ;
  mcp23s17Setup (BASE, 0, 0) ;

  printf ("LN Digital - Test\n") ;

  for (i = 0 ; i < 8 ; ++i){
    pinMode (BASE + i, OUTPUT) ;
    
}

 for (i = 0 ; i < 8 ; ++i){
    digitalWrite (BASE + i, 1) ;
    delay (300);
}
    delay (500);
 for (i = 7 ; i >= 0 ; --i){
    digitalWrite (BASE + i, 0) ;
    delay (400);
}
for (i = 8 ; i > 16 ; ++i){
  pinMode         (BASE + i, INPUT) ;
  pullUpDnControl (BASE + i, PUD_UP) ;
}
for (i = 8 ; i < 16 ; ++i){
      wart = digitalRead (BASE + i);
      printf ("Pin input nr %d wartosc: %d\n", i - 8 , wart) ;
      delay (100) ;
 }
  return 0 ;
}

Kompilacja

gcc -Wall -o test test.c -lwiringPi

Program ustawia kolejno piny wyjściowe na stan wysoki (zapalają się diody), a następnie na stan niski. Potem ustawia piny wejściowe i odczytuje ich wartość wypisując ich status.

W funkcji mcp23s17Setup (x:x:x) pierwsza wartość to startowa numeracja pinów, druga wartość oznacza numer SPI (moduł podłączony jest do SPI0) zaś kolejna służy do rozróżniania kolejnych modułów spi (adresowanie pinów A1‑A3). Więcej informacji na stronie projektu WiringPi.

Oprócz pisania własnej aplikacji z wykorzystaniem biblioteki można skorzystać również z narzędzia gpio biblioteki Wiring BP, za pomocą której z poziomu terminala możemy sterować pinami GPIO

gpio -x mcp23s17:100:0:0 mode 100 out
gpio -x mcp23s17:100:0:0 mode 101 in
gpio -x mcp23s17:100:0:0 mode 101 up
gpio -x mcp23x17:100:0:0 read 101
gpio -x mcp23x17:100:0:0 write 100 1

Do prostych czynności narzędzie gpio całkowicie powinno wystarczy. Pisanie własnego programu opłacalne jest jeśli chcemy reagować w jak najkrótszym czasie na zdarzenia bo jak wiadomo aplikacje pisane w bash-u nie są demonami prędkości.

Przygotuje jeszcze wpis o tym module prezentując prosty interfejs www do sterowania modułem.
Wybrane dla Ciebie
Komentarze (0)