Problem z i2c

Awatar użytkownika
YoMan
Posty: 2250
Rejestracja: czw kwie 30, 2020 5:18 pm
Lokalizacja: Częstochowa

Może ktoś mi podpowie kierunek działania:

upraszczając układ urządzeń - mam wemos z softem termostatu oraz wemos (soft GG) z 2x MCP (+ przekaźniki, dimmery, etc.) wykorzystując po 4 żyły ze skrętki jednym przewodem mam poprowadzone połączenie z ds18b20 z termostatu oraz moduł BME280 z drugiego wemosa. Kilka(naście) razy w ciągu dnia termostat otrzymywał błędny sygnał z ds'ki, stopniowo zmniejszałem pull'up ale od pewnego poziomu dalsze zmniejszanie rezystancji już nie powoduje poprawy, a przynajmniej tak mi się wydaje, ponieważ czasami 1-2 dni brak błędu a potem jednego dnia 8 razy. Obecny pull-up ok.2,80k (od 3,60k brak wyraźnie zauważalnej poprawy). Ponieważ skrętka jest ekranowana postanowiłem podłączyć ekran do uziemienia w rozdzielni (wiem, że tak powinienem od razu zrobić ale kiedyś było mocno problematyczne połączenie z ds'ką - wymieniłem przewód na ekranowany i była spora poprawa więc nie dotykałem). Co prawda od 12h nie mam żadnego błędu na ds'ce to i2c po jakimś czasie (kilka minut) wariuje. Światła się włączają i wyłączają. Problemem jest prawdopodobnie bme, który puszcza jakieś fałszywe komunikaty do MCP. Po jego odłączeniu nie zauważyłem tych zachowań. Początkowo pull-up'y na i2c były po 1,5k, zmieniłem na 1k i wydaje się, że nastąpiła poprawa, tzn. światła zaczeły wariować po kilku godzinach a nie minutach (niestety był to środek nocy - rodzina zachwycona jak dostała 300W w ledach po oczach o 4 rano :evil: )
Nie mając oscyloskopu nie bardzo mogę sprawdzić sygnał (nawet nie umiałbym się pewnie posłużyć nim), przewód ma około 6-8 m. Jest w ścianie i prawdopodobnie przechodzi w pobliżu 230v (i to może kilkukrotnie).

I teraz pytania:
  • Jak bardzo mogę zmniejszyć rezystancję na pull-upach, żeby nie uszkodzić jakiś elementów?
  • Czy zmniejszanie pullupów ma w ogóle sens?
  • Jakiś inny pomysł?
Ostatecznie odepnę uziemienie i się pogodzę się z tymi błędami z ds'ki na termostacie ale wolałbym to skonfigurować tak jak powinno działać.
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
Awatar użytkownika
Duch__
Posty: 1779
Rejestracja: śr sie 24, 2016 7:26 pm
Lokalizacja: Opole

I2C nadaje się do transmisji do kilkunastu centymetrów, a nie metrów.

Zastosuj uśrednianie wyników z ostatnich 10 pomiarów, poprawi to stabilność.
Obrazek
krycha88
Posty: 5186
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Z tymi ds18b20 to jest jakiś problem, było już kilka zgłoszeń, że na tasmota czy easyesp działa a tutaj nie. Spróbuję kiedyś podmienić bibliotekę na inną.
https://gui-generic-builder.supla.io/
Awatar użytkownika
YoMan
Posty: 2250
Rejestracja: czw kwie 30, 2020 5:18 pm
Lokalizacja: Częstochowa

Duch__ pisze: czw lut 02, 2023 3:15 pm I2C nadaje się do transmisji do kilkunastu centymetrów, a nie metrów.
Podobno .... ale działało. Coś dodatkowo zamieszało uziemienie ekranu. Poza tym nie wiem jak odseparować termicznie wemosa od czujnika temperatury w puszce pod włącznikiem. Esp tak się grzeje, że wszystkie pomiary są do d....
Duch__ pisze: czw lut 02, 2023 3:15 pm Zastosuj uśrednianie wyników z ostatnich 10 pomiarów, poprawi to stabilność.
hmmm... nie bardzo wiem o czym piszesz. Moduł BME sieje po linii i2c i szaleje MCP. Uśrednienie mogę zrobić dopiero w module ale to nie zmieni zakłóceń na linii.
Na start nie wiem jak obliczyć dopuszczalną minimalną rezystancję na pullupach żeby nie spalić wejścia na wemosie. Kiedyś gdzieś widziałem wyliczenie dla ds18b20. O ile się nie mylę ten mój moduł bme ma chyba na pokładzie już pullup 10k, więc jeżeli dołożyłem równolegle 1k to mamy 900 ohm. Ile można jeszcze?
Ostatnio zmieniony czw lut 02, 2023 3:49 pm przez YoMan, łącznie zmieniany 1 raz.
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
Awatar użytkownika
YoMan
Posty: 2250
Rejestracja: czw kwie 30, 2020 5:18 pm
Lokalizacja: Częstochowa

krycha88 pisze: czw lut 02, 2023 3:43 pm Z tymi ds18b20 to jest jakiś problem, było już kilka zgłoszeń, że na tasmota czy easyesp działa a tutaj nie. Spróbuję kiedyś podmienić bibliotekę na inną.
Tutaj nie ma twojej winy. Akurat ds'ka jest na sofcie elmaya. Problemem jest BME.
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
edm
Posty: 439
Rejestracja: pn sty 15, 2018 6:18 pm

YoMan pisze: czw lut 02, 2023 3:46 pm
Duch__ pisze: czw lut 02, 2023 3:15 pm I2C nadaje się do transmisji do kilkunastu centymetrów, a nie metrów.
Podobno .... ale działało. Coś dodatkowo zamieszało uziemienie ekranu.
A może warto spróbować tego? viewtopic.php?p=141052#p141052
Wziąłem udział w Supla Offline Party 2023 :D
Awatar użytkownika
YoMan
Posty: 2250
Rejestracja: czw kwie 30, 2020 5:18 pm
Lokalizacja: Częstochowa

edm pisze: czw lut 02, 2023 3:49 pm
YoMan pisze: czw lut 02, 2023 3:46 pm
Duch__ pisze: czw lut 02, 2023 3:15 pm I2C nadaje się do transmisji do kilkunastu centymetrów, a nie metrów.
Podobno .... ale działało. Coś dodatkowo zamieszało uziemienie ekranu.
A może warto spróbować tego? viewtopic.php?p=141052#p141052
w sensie zmiany taktowania? No gdzieś w sieci już dzisiaj napotkałem na taką wskazówkę.
@krycha88 czy wystarczy zmienić Wire.setClock na 100000 tutaj, w MCP_23017.cpp czy jeszcze gdzieś?

Kod: Zaznacz cały

#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
void MCP23017::init(uint8_t sda, uint8_t scl, bool fast) {
  Wire.begin(sda, scl);
  if (fast)
    Wire.setClock(400000);
}
#else
void MCP23017::init(bool fast) {
  Wire.begin();
  if (fast)
    Wire.setClock(400000);
}
#endif
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
krycha88
Posty: 5186
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

https://gui-generic-builder.supla.io/
tomkg
Posty: 10
Rejestracja: czw lis 28, 2019 6:25 pm

U mnie pojawiła się podobna sytuacja w układzie czujnik SHT31 ,płytka WEMOS ,OLED.
Czujnik po I2C co jakiś czas nie wysyłał danych do WEMOS .
Wykres był poszatkowany.
Przechwytywanie.PNG
Przechwytywanie.PNG (69.49 KiB) Przejrzano 367 razy
Winne temu były połączenia śrubowe nie dokręcone przez co pojawiały się dodatkowe rezystancje,pojemności itd. które zakłócały transmisję.
Przechwytywanie1.PNG
Przechwytywanie1.PNG (214.08 KiB) Przejrzano 367 razy
Sprawdź połączenia na płytce WEMOS i czujniku (I2C --> zasilanie, linia danych, zegarowa) - jeśli lutowane - prze lutować może pojawiły się zimne luty, odlutowały się . Jeśli śrubowe odkręcić i zakręcić by usunąć brud (zaśniedziałe styki) .
Awatar użytkownika
YoMan
Posty: 2250
Rejestracja: czw kwie 30, 2020 5:18 pm
Lokalizacja: Częstochowa

tomkg pisze: czw lut 02, 2023 11:40 pm U mnie pojawiła się podobna sytuacja w układzie czujnik SHT31 ,płytka WEMOS ,OLED.
Czujnik po I2C co jakiś czas nie wysyłał danych do WEMOS .
Wykres był poszatkowany.Przechwytywanie.PNG

Winne temu były połączenia śrubowe nie dokręcone przez co pojawiały się dodatkowe rezystancje,pojemności itd. które zakłócały transmisję.
Przechwytywanie1.PNG

Sprawdź połączenia na płytce WEMOS i czujniku (I2C --> zasilanie, linia danych, zegarowa) - jeśli lutowane - prze lutować może pojawiły się zimne luty, odlutowały się . Jeśli śrubowe odkręcić i zakręcić by usunąć brud (zaśniedziałe styki) .
Sprawdzę ale tutaj raczej nie to. Czujnik działa perfekt, wskazania z ostatnich 30 dni mają tylko jedną "dziurę" - jeden pomiar. Problemem jest zbieranie zakłóceń z linii i2c, przez którą ten czujnik jest podłączony, przez MCP i dyskoteka w domu.
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
ODPOWIEDZ

Wróć do „Pomoc”