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.
Na bazie schematu została zaprojektowana dwustronna płytka drukowana na której umieszczono wszystkie elementy i złącza.
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
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.
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:
Moduł zdalnego sterowania został opisany w innym artykule.
Niebawem będzie ciąg dalszy