Interfejs I2C I Arduino

Spisu treści:

Interfejs I2C I Arduino
Interfejs I2C I Arduino

Wideo: Interfejs I2C I Arduino

Wideo: Interfejs I2C I Arduino
Wideo: Видеоуроки по Arduino. I2C и processing (7-я серия, ч1) 2024, Listopad
Anonim

W tym artykule przyjrzymy się, czym jest interfejs I2C (ay-tu-si, i-two-tse), jakie są jego funkcje i jak z nim pracować.

Interfejs I2c
Interfejs I2c

Czy to jest to konieczne

  • - Arduino;
  • - potencjometr cyfrowy AD5171;
  • - Dioda LED;
  • - rezystor 220 omów;
  • - 2 rezystory na 4,7 kOhm;
  • - przewody łączące.

Instrukcje

Krok 1

Protokół komunikacji szeregowej IIC (zwany także I2C - Inter-Integrated Circuits) wykorzystuje dwie dwukierunkowe linie komunikacyjne do przesyłania danych, zwane magistralą SDA (Serial Data) i SCL (Serial Clock). Istnieją również dwie linie energetyczne. Szyny SDA i SCL są podciągnięte do szyny zasilającej przez rezystory.

W sieci jest co najmniej jeden Master, który inicjuje transmisję danych i generuje sygnały synchronizacji. W sieci znajdują się również urządzenia podrzędne, które przesyłają dane na żądanie urządzenia nadrzędnego. Każde urządzenie podrzędne ma unikalny adres, pod którym adresuje je urządzenie nadrzędne. Adres urządzenia jest wskazany w paszporcie (arkusz danych). Do jednej magistrali I2C można podłączyć do 127 urządzeń, w tym kilku masterów. Urządzenia mogą być podłączone do magistrali podczas pracy, tj. obsługuje podłączanie na gorąco.

Schemat połączeń I2C
Schemat połączeń I2C

Krok 2

Arduino wykorzystuje dwa porty do pracy na interfejsie I2C. Na przykład w Arduino UNO i Arduino Nano port analogowy A4 odpowiada SDA, port analogowy A5 odpowiada SCL.

Dla innych modeli płyt:

Arduino Pro i Pro Mini - A4 (SDA), A5 (SCL)

Arduino Mega - 20 (SDA), 21 (SCL)

Arduino Leonardo - 2 (SDA), 3 (SCL)

Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1

Mapowanie pinów Arduino na magistrale SDA i SCL
Mapowanie pinów Arduino na magistrale SDA i SCL

Krok 3

Aby ułatwić wymianę danych z urządzeniami za pośrednictwem magistrali I2C, dla Arduino napisana została standardowa biblioteka „Wire”. Posiada następujące funkcje:

begin (adres) - inicjalizacja biblioteki i podłączenie do magistrali I2C; jeśli nie określono adresu, podłączone urządzenie jest uważane za urządzenie nadrzędne; stosowane jest adresowanie 7-bitowe;

requestFrom() - używany przez mastera do żądania określonej liczby bajtów od slave;

beginTransmission (adres) - początek przesyłania danych do urządzenia slave pod określonym adresem;

endTransmission() - zakończenie transmisji danych do slave'a;

write() - zapis danych z urządzenia podrzędnego w odpowiedzi na żądanie;

available() - zwraca liczbę bajtów informacji dostępnych do odebrania od slave'a;

read() - odczytuje bajt przesłany z urządzenia podrzędnego do urządzenia nadrzędnego lub od urządzenia nadrzędnego do urządzenia podrzędnego;

onReceive() - wskazuje funkcję, która ma być wywołana, gdy slave odbierze transmisję od mastera;

onRequest () - Wskazuje funkcję, która ma być wywołana, gdy master odbiera transmisję od slave.

Krok 4

Zobaczmy, jak pracować z magistralą I2C za pomocą Arduino.

Najpierw zmontujemy obwód, jak pokazano na rysunku. Kontrolujemy jasność diody LED za pomocą 64-pozycyjnego potencjometru cyfrowego AD5171, który łączy się z magistralą I2C. Adres pod którym będziemy się odwoływać do potencjometru to 0x2c (44 dziesiętnie).

Obwód sterowania LED za pomocą potencjometru cyfrowego i Arduino
Obwód sterowania LED za pomocą potencjometru cyfrowego i Arduino

Krok 5

Otwórzmy teraz szkic z przykładów biblioteki „Drut”:

Plik -> Próbki -> Przewód -> potencjometr_cyfrowy. Załadujmy go do pamięci Arduino. Włączmy to.

Widzisz, jasność diody LED rośnie cyklicznie, a potem nagle gaśnie. W tym przypadku potencjometrem sterujemy za pomocą Arduino poprzez magistralę I2C.

Zalecana: