@mikson123: potwierdzenia masz zaszyte w standardzie I2C więc nie musisz się tym przejmować.
Możesz sobie dopisać w programie liczenie CRC z ramek żeby być pewnym że się bit nie przestawił.

A niezawodne jest dopóty, dopóki postępujesz zgodnie z zasadami i przeznaczeniem tego interfejsu i respektujesz cechy fizyczne sygnałów, interfejsów i otoczenia. Czyli jeśli dobrze zaprojektujesz a otoczenie nie jest zaszumione syfem.
  • Odpowiedz
@mikson123: jeśli to jest na jednej płytce, to nadal uart jest lepszym rozwiązaniem. Wiele µC ma możliwość przełączenia uartu w tryb jednoliniowy (RxD/TxD są na jednym pinie), albo ma możliwość włączenia otwartego drenu na linii TxD. Więc cały sprzęt do łączenia wielu µC to jeden rezystor.
Dodatkowo uart ma wielokrotne próbkowanie każdego bitu i będzie dużo odporniejszy na zakłócenia niż I2C, gdzie jeden fałszywy impuls na CLK rozwala całą ramkę danych.
  • Odpowiedz
#embedded #openwrt #i2c #c #cpp #programowanie

Miruny mam problem. Chce uruchomić I2C na openWRT i jeżeli mam wersje openWRT z mastera to wszystko działa, a jak te same ustawienia wrzucam na wersje stabilna openWRT v19.04 to już te i2c nie działa tak jak powinno. Nie wykrywa mi układu i w zasadzie po komendzie i2cdetect -y 0 wyrzuca mi jakieś smieci ( mase INNYCH adresów, które niby wykrył - a podłączony jest tylko
@mikson123: 2m to sporo, jesteś na granicy. Jaka częstotliwość i2c? - jeśli jest możliwość obniżenia to mocno polecam. Użyj ekranowanego przewodu.
  • Odpowiedz
@mikson123: Jeśli wykryjesz taką sytuację możesz spróbować przełączyć piny w tryb GPIO i wysłać kilkadziesiąt cykli zegara (po prostu CLK w górę i w dół) i to ma szanse odwiesić linię
  • Odpowiedz
#raspberrypi #arduino #i2c

Jak przesyłać liczby z przecinkiem (float) przez I2C pomiędzy Raspberry Pi (master) i Arduino (slave)?

Robię pewien projekt w C i nie mam do dyspozycji Pythona (tam jest struct dzięki czemu można sobie sprawnie poukładać bajty w liczbę).
Korzystam z tego: https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/
Mogę sobie przesyłać od 0 do 255 za pomocą wiringPiI2CRead, ale przy większych wartościach i funkcji wiringPiI2CReadReg8 dostaję zawsze tę samą liczbę (38792).

Po stronie Arduino przesyłam
Ostatnio zacząłem się uczyć programować #avr #atmega
Chcę stworzyć urządzenie które będzie korzystało z do 30 atmega wszystko połączone za pomocą #i2c / #twi gdzie masterem będzie #raspberrypi

Udało mi się już porozumieć z jednym #atmega8 z poziomu #raspberrypi teraz chcę podobną operację wykonać dla wielu atmega. Jednak nie umiem znaleźć informacji na temat jak atmega ma sobie znaleźć wolny adres. Przy jednym urządzeniu slave to nie problem po prostu wpisałem 0x10
@pytonger: Jak zrealizowałeś to że urządzenie "łapało" nadany adres? Wydawało mi się że slave aby skorzystać z komunikacji po I2C musi sobie nadać adres na starcie. Da się jakoś puścić globalny broadcast "oto adres, kto pierwszy ten lepszy"?
  • Odpowiedz
@Niewpisze: W moim przypadku nie dotyczyło to i2c, ale nie ma przecież żadnych przeciwwskazań żeby wszystkie urządzenia działające na szynie i2c nadały sobie na początku jeden numer a potem go zmieniły na wskazany przez mastera.
  • Odpowiedz
Kontroler lotu FC SPracing F3, firmware betaflight 3.0.1 / cleanflight 1.14.2
Jakby komuś przyszło do głowy dodawać malutki chiński OLED - nie ma sensu do tego FC.
po włączeniu obsługi OLED (oraz jego podłączeniu) ilość błędów i2c rośnie w tysiące, a FC po 5-30s (czasem kilku minutach) zawiesza się na twardo i zaczyna w kółko restartować. Brak możliwości podłączenia się po usb.
Najlepsza i chyba jedna rada - wgrać od nowa firmware
hrumque - Kontroler lotu FC SPracing F3, firmware betaflight 3.0.1 / cleanflight 1.14...

źródło: comment_5kf5u4tbG95pUgWIeu90D53MmcuxLu6C.jpg

Pobierz
@feriar: Za nauczanie mas ludzkich - plusik ( ͡° ͜ʖ ͡°)
@tux3284: Takiego contentu nigdy zbyt wiele. Wolny rynek weryfikuje, a duży wybór daje konsumentowi możliwość selekcji i obcowania, z materiałem najbardziej odpowiadającym osobistym preferencjom XD
  • Odpowiedz
#programowanie #arduino #i2c

Hej Mirasy!

Szukam od kilku dni rozwiązania problemu. Wygląda on następująco:

Mam spięte magistralą i2c UNO r3 jako master i n klonów (dswyrobot - działają)

Dane przesyłane przez i2c:

Master:

- wysyła do slave'a 2 bajty danych (w tym momencie są to stany z przycisków, później będą to wyliczone kąty serw)

kod:

#include

const int buttonPin2 = 2;

const int buttonPin3 = 3;

byte buttonState2 = 0;

byte
@Yerboholik: a na przyszłość pamiętaj zasilacz tylko z białej listy! ;)

PS. I2C działa napewno na 15m po skrętce sieciowej, i to biegnąc koło przewodu z 230v AC :P to jako ciekawostka bo I2C jest raczej magistralą na odlegości PCB ;)
  • Odpowiedz