Raspberry Pi – frontpanel czyli moduł rozszerzeń

Płytka panelu sterującego dla Raspberry Pi.


Schemat_frontpanel

Rys Schemat blokowy karty rozszerzeń.

Zainspirowany poprzednimi eksperymentami z Rasperry Pi postanowiłem zaprojektować i wykonać płytkę łączącą w sobie cechy wszystkich poprzednich przykładów. Zaprojektowany interfejs posiada 6 podświetlanych przycisków dołączonych za pomocą układu scalonego MCP23008 do interfejsu I2C. Panel sterujący został  wyposażony w wyświetlacz alfanumeryczny LCD. Do sterowania tego wyświetlacza została wykorzystana opisana w innym artykule biblioteka wiringPi posiadająca wbudowane funkcje do obsługi tego typu wyświetlaczy. Do sterowania podświetlania wyświetlacza wykorzystano układ PCA9633. Wyświetlacz posiada podświetlanie RGB dzięki czemu kolor podświetlania możemy zdefiniować w dowolny sposób. Płytka została wyposażona w zegar RTC typy PCF8563 dołączony do interfejsu I2C. Do tego samego interfejsu został również dołączony układ SHT21 będący cyfrowym termometrem i higrometrem. W panelu został wbudowany układ pamięci 24C02 do zapisywania bieżących danych o ustawieniach. Dużym blokiem funkcjonalnym zabudowanym w panelu jest konwerter UART na BlueTooth typu BTM222. Dzięki temu interfejsowi otrzymujemy do dyspozycji nowy kanał komunikacyjny do płytki Raspberry Pi. Do moduły BTM222 została dołączona antena na pasmo 2.4GHz. Dodatkowo ciekawym elementem zamontowanym na płytce panelu sterującego jest odbiornik podczerwieni TSOP4836 który w połączeniu z biblioteką lirc pozwala na ciekawy sposób sterowania komputerkiem Raspberry Pi. Na płytce został także zamontowany buzzer sterowany z interfejsu GPIO komputerka Raspberry Pi.
Jak poprzednio napisano na płytce panelu sterującego zamontowano kilka układów dołączonych do wspólnego interfejsu sterującego I2C. Aby komunikować się z nimi potrzebujemy informacji o adresach poszczególnych układów. Zostały one przedstawione w tabelce poniżej.

adres układ uwagi
0x0c pca9633
0×51 pcf8563
0×52 at24c02 wg katalogu 0xa2
0×40 SHT21
0×20 MCP23008

Adresy te różnią się od tych podanych w notach katalogowych poszczególnych układów. Bierze się to stąd, że w notach katalogowych ośmiobitowy adres podawany jest wraz bitem read/write zaś w bibliotece wiringPi wykorzystujemy tylko siedem najbardziej znaczących bitów a więc „katalogowy” adres należy podzielić przez 2 np. 0xa2/2=0×52.


Tabelka ilustrująca sposób dołączenia wyświetlacza LCD do interfejsu GPIO.

RS EN D4 D5 D6 D7
GPIO25 GPIO7 GPIO22 GPIO27 GPIO17 GPIO4

Jak wcześniej zostało napisane zastosowany wyświetlacz LCD posiada wbudowane podświetlanie za pomocą diod RGB. Do sterowania podświetlaniem zastosowano układ PCA9633. Za kolor R odpowiedzialny jest rejestr o adresie 0×05, za kolor G rejestr o  adresie 0×04 zaś za kolor B rejestr 0×03. Za podświetlanie klawiatury jest odpowiedzialny rejestr o adresie 0×02. Do odczytu stanu klawiatury zastosowany został układ MCP23008. Wyjście przerwania z tego układu zostało dołączone do lini GPIO24. Po odczytaniu zmiany stanu na tej linii program uruchomiony na Raspberry Pi powinien odczytać z układu MCP który z  przycisków został wciśnięty.
Układ do odbioru sygnałów z pilotów zdalnego sterowania za pomocą podczerwieni został dołączony do lini GPIO18. Bibliotekę lirc należy skonfigurować w taki sposób aby uwzględniała tą informację.
O module BTM222 i sposobie jego dołączenia nie ma nic do opisywania. Moduł ten jest dołączony do lini RXD oraz TXD. Linia RESET modułu BTM222 została dołączona do wyprowadzenia GP7 układu MCP23008.
Buzzer został dołączony do lini GPIO23 płytki Raspberry Pi. Na płytce zostało zamontowane złącze dołączone do interfejsu SPI Raspberry Pi. Jeżeli ktoś potrzebuje jeszcze dołączyć jakieś układy z interfejsem I2C to znajduje się tam również złącze na które zostały doprowadzone sygnały interfejsu I2C.

FrontPanel1

Rys. Wygląd zaprojektowanego frontpanela dla Raspberry Pi.

Schemat ideowy frontpanela.

Rys. Schemat ideowy frontpanela.

Wygląd zmontowanej i uruchomionej karty rozszerzeń

Rys. Wygląd zmontowanego i uruchomionego frontpanela

RaspberryPi_2_m

Rys. Jeszcze jeden widok: RPi i frontpanel.

Płytka drukowana.
Na bazie schematu została zaprojektowana dwustronna płytka drukowana na której
umieszczono wszystkie elementy i złącza.

Wygląd zaprojektowanej płytki drukowanej

Rys. Wygląd zaprojektowanej płytki drukowanej.

Aplikacja – LCD


Uruchamianie frontpanelu rozpocząłem od uruchomienia wyświetlacza LCD. W tym celu należy zainstalować bibliotekę wiringPi zgodnie z instrukcją opisaną w rozdziale  dotyczącym wyprowadzeń GPIO. Żeby wyświetlacz zadziałał napisałem aplikację w języku C. Należy konfigurować wykorzystane linie GPIO. Można tego dokonać  wykorzystując funkcję lcdInit z następującymi parametrami:
fd3 = lcdInit (2,16,4,6,11,3,2,0,7,0,0,0,0);
Parametry to kolejno:
2  – liczba wierszy wyświetlacza
16 – liczba znaków w wierszy
4  – szerokość interfejsu danych
6  – numer wyprowadzenia wiringPi dla RS
11 – wyprowadzenie dla EN
3  – wyprowadzenie dla D0
2  – wyprowadzenie dla D1
0  – wyprowadzenie dla D2
7  – wyprowadzenie dla D3
pozostałe zera to kolejne D4 do D7. fd3 jest to wskaźnik do wyświetlacza wykorzystywany
w następnych funkcjach. W konfiguracji tego wyświetlacza należy zwrócić uwagę na oznaczenia kolejnych linii GPIO. W rozdziale dotyczącym portu GPIO oznaczenia linii były zgodne z dokumentacją RasperryPi. Oznaczenia dla programowania z wykorzystaniem biblioteki wiringPi są jednak inne. Wydając polecenie gpio readall otrzymamy tabelę gdzie w kolejnych kolumnach znajdują się:
– numer wyprowadzenia dla biblioteki wiringPi
– numer wyprowadzenia zgodny z dokumentacją RasperryPi
– funkcja danego portu
– wartość logiczna na wejściu

gpio_readallRys. Stany logiczne na złączach P1 i P5.

Kolejne funkcje to:
lcdPosition (fd3, 0, 0);
Powyższa funkcja ustawia kursor dla wyświetlaczafd3 w wierszu 0 na pozycję 0.
lcdPuts (fd3, „  jakiś tekst   „);
Ta funkcja wyświetla tekst z cudzysłowu na wyświetlaczu fd3. Powyżej przedstawione funkcje są w stanie wyświetlić tekst na wyświetlaczu.

Interfejs I2C
Do obsługi szyny I2C wykorzystano opisaną wcześniej bibliotekę wiringPi. Jej instalacja i konfiguracja została opisana w innym dokumencie – sterowanie modułem sterownika LED – RGB.
Po poprawnym połączeniu frontpanelu i wydaniu polecenia skanującego interfejs I2C
sudo i2cdetect -y 1

Powinniśmy otrzymać coś takiego:


Efekt działania funkcji i2cdetect.
Rys. Efekt działania funkcji i2cdetect.

Interfejs GPIO dla zdalnego sterowania.

Moduł zdalnego sterowania został opisany w innym artykule.

 


Niebawem będzie ciąg dalszy :-)