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