Pierwsze kroki z Raspberry Pi: obsługa magistrali I2C na przykładzie LED RGB
I2C jest szeroko stosowanym w elektronice interfejsem, który przy wykorzystaniu dwóch linii danych (nie licząc zasilania) pozwala w łatwy sposób sterować wieloma urządzeniami jednocześnie.
Urządzenia należy połączyć w sposób widoczny na rysunku 1, nie będę wchodził w szczegóły protokołu, do wykonania przykładowego ćwiczenia w zupełności wystarczy nam podstawowa wiedza:
- każde urządzenie ma swój adres, można go zwykle znaleźć w dokumentacji urządzenia. Niektóre urządzenia mają konfigurowalne adresy (tak jak użyty w ćwiczeniu moduł KAmodRGB – zworkami A0..A2 ustawiamy trzy najmłodsze bity adresu)
- urządzenia mają rejestry, czyli komórki pamięci, które możemy odczytać lub/i zapisać, w ten sposób komunikujemy się z urządzeniem
Rys. 1. Magistrala I2C
W przykładzie użyjemy modułu KAmodRGB z interfejsem I2C, moduł wyposażony jest w diodę RGB i sterownik PCA9633, który umożliwia ustawienie natężenia świecenia każdej ze składowej z 8-bitową rozdzielczością. Interesujące nas rejestry to MODE1 (0x00), MODE2 (0x01), PWM0..PWM3 (0x02..0x05) i LEDOUT (0x08). Rejestry PWMx sterują jasnością składowych, reszta to rejestry konfiguracyjne (szczegóły w dokumentacji). Moduł dostępny jest tu.
Moduł dołączamy do Raspberry tak jak na rysunku 2.
Uwaga! Opis dotyczy Raspberry Pi w wersji 2.0, która na złączu P1 ma wyprowadzenia interfejsu I2C1, wcześniejsze wersje mają wyprowadzony interfejs I2C0.
Rys. 2. Sposób połączenia modułu z Raspberry Pi
Konfiguracja Raspberry do pracy z I2C
W pliku /etc/modprobe.d/raspi-blacklist.conf musimy wykomentować linie:
# blacklist spi-bcm2708 # blacklist i2c-bcm2708
W pliku /etc/modules dodajemy linię:
i2c-dev
Od teraz interfejsy I2C powinny być dla nas dostępne. Bardzo przydatny może się okazać pakiet i2ctools, aby go zainstalować wpisujemy:
sudo apt-get install i2ctools
Mamy teraz dostęp do kilku przydatnych narzędzi, np. i2cdetect, który wykrywa urządzenia dołączone do magistrali, po wywołaniu polecenia orzymujemy listę adresów tych urządzeń.
pi@raspberrypi /usr/lib $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- 07 -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Dzięki parametrowi -y nie musimy potwierdzać operacji, drugi parametr to numer interfejsu I2C z którego chcemy korzystać. Jak widać zgodnie z oczekiwaniami program wykrył moduł KAmodRGB.