Problem z i2c

User avatar
YoMan
Posts: 2283
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

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 ;)
User avatar
Duch__
Posts: 1785
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole

Post

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ść.
Image
krycha88
Posts: 5208
Joined: Fri Nov 16, 2018 7:25 am

Post

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/
User avatar
YoMan
Posts: 2283
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

Duch__ wrote: Thu Feb 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__ wrote: Thu Feb 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?
Last edited by YoMan on Thu Feb 02, 2023 3:49 pm, edited 1 time in total.
YoMan
________________________________________
Wziąłem udział w Supla Offline Party 2023 ;)
User avatar
YoMan
Posts: 2283
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

krycha88 wrote: Thu Feb 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
Posts: 440
Joined: Mon Jan 15, 2018 6:18 pm

Post

YoMan wrote: Thu Feb 02, 2023 3:46 pm
Duch__ wrote: Thu Feb 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
User avatar
YoMan
Posts: 2283
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

edm wrote: Thu Feb 02, 2023 3:49 pm
YoMan wrote: Thu Feb 02, 2023 3:46 pm
Duch__ wrote: Thu Feb 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ś?

Code: Select all

#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
Posts: 5208
Joined: Fri Nov 16, 2018 7:25 am

Post

https://gui-generic-builder.supla.io/
tomkg
Posts: 10
Joined: Thu Nov 28, 2019 6:25 pm

Post

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) .
You do not have the required permissions to view the files attached to this post.
User avatar
YoMan
Posts: 2283
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

tomkg wrote: Thu Feb 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 ;)

Return to “Pomoc”