Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

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.

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.

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.

r   e   k   l   a   m   a

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.

 

linux sprzęt programowanie

Komentarze