Przechodząc do setna, chciałem przedstawić kilka sposobów na rozwiązanie problemu z ustaleniem adresu.
Raspberry Pi
Najwygodniejszym i najszybszym sposobem na ustalenie adresu modułu I2C jest skorzystanie z Raspberry Pi, o ile je posiadamy. Dla samego zastosowania jako skaner magistrali I2C, to zdecydowanie za droga zabawka. Na szczęście ma dużo większe możliwości i przyda się do innych zastosowań.
Na Raspberry Pi można uruchomić pełnoprawny system operacyjny, w moim przypadku Raspian. Jest to wersja linuxa (debiana), co może stwarzać istotne problemy dla osób dotąd korzystających z Windows. W sieci można jednak znaleźć pod hasłem "raspberry pi i2c configuration" kilka poradników, w tym ten ze strony adafruit z którego ja korzystałem. Wprawdzie na początku trzeba trochę namęczyć się z konfiguracją, ale potem jest już z górki. Wystarczy podpiąć badany moduł pod piny SDA, SCL (najlepiej z użyciem "Rozszerzenia GPIO" do płytki stykowej) i wykonać polecenie z konsoli i2cdetect z odpowiednim parametrem. Poniżej dołączam zrzut ekranu z wyników działania tego programu dla modułu LM1602. Wyznaczony adres to 27 w zapisie szesnastkowym.
Wynik działania skanera I2C - Raspberry Pi |
Arduino Uno
Równie dobrym sposobem (i znacznie tańszym niż ten z Raspberry Pi), jest skorzystanie z Arduino Uno i skryptu i2c_scanner. Kod skryptu wklejamy do IDE Arduino i wgrywamy. Teraz wystarczy uruchomić okno "Szeregowego monitora". Uruchomiony skaner wyświetli adres naszego modułu. Na załączonym zrzucie przy sprawdzaniu modułu LM1602 skaner ustalił jego adres równy 0x27.
Wynik działania skanera I2C - Arduino Uno |
ATmega 8
Leciwy mikrokontroler, ale akurat taki miałem pod ręką. Posłużył mi do realizacji prostego modułu do sterowania zasilaczem. W zamierzeniu ma on wykorzystać I2C m.in. do sterowania wyświetlaczem LCD. Nawiasem mówiąc, stąd w ogóle przyszedł mi pomysł na ten post. Mimo dobrych chęci nie udało mi się nic znaleźć w tym temacie w sieci (tj. skanera). Tak więc sam napisałem własny, prosty kod w C w oparciu o bibliotekę I2C Petera Fleury'ego. Kod można pobrać pod tym linkiem. Zakłada on częstotliwość taktowania ATmegi 16MHz, a magistrali I2C 100kHz. W razie konieczności można zmienić te parametry modyfikując odpowiednio stałe F_CPU i SCL_CLOCK w pliku twimaster.c. Z kolei prędkość transmisji danych do terminala wynosi 9600bps co widać (i inne ustawienia) na dołączonym poniżej obrazku prezentującym efekt działania skanera.
Wynik działania skanera I2C - ATmega, skrypt w C |
Woltomierz
Inną możliwością, wspomnianą na wstępie, jest wyszukanie w dokumentacji układu scalonego (użytego w badanym module) informacji o pinach odpowiedzialnych za konfigurację adresu oraz ich wpływu na ostateczną postać adresu. Pomiar napięcia na tych pinach pozwoli poznać adres modułu.
Brak komentarzy:
Prześlij komentarz