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:

W pliku /etc/modules dodajemy linię:

Od teraz interfejsy I2C powinny być dla nas dostępne. Bardzo przydatny może się okazać pakiet i2ctools, aby go zainstalować wpisujemy:

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ń.

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.

O autorze