LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

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.