systemypomiarowe.pl

Projektowanie urządzeń KiCad Oprogramowanie CAD Wykonawstwo Systemy pomiarowe Aplikacje Programowanie Warszawa Płytki PCB Schematy ideowe
Strona główna Oferta

Raspberry Pi

Płytka panelu sterującego dla Raspberry Pi.

schemat block

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
Tab. Adresy I2C zastosowanych układów.

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
Tab. Podłączenie wyświetlacza LCD

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.

wiev

Rys. Wygląd zaprojektowanego frontpanela dla Raspberry Pi.

schema

Rys. Schemat ideowy frontpanelu.

photo

Rys. Wygląd zmontowanego i uruchomionego frontpanelu.

photo

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.

pcb kicad

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 read

Rys. 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:

i2c detect

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



Copyright ©2020 systemypomiarowe.pl.