Skocz do zawartości

Fałszywy stan pinów INPUT z użyciem ekspandera MCP23017 oraz ESP8266


Pomocna odpowiedź

Dobra, jakie masz rezystory podciągające na liniach SDA i SCL? Bo jeśli dalej 100k to takie coś nie ma prawa działać. Ja dla 3.3V i układów które nie mają wewnętrznych rezystorów (np. PCF8574, nawiasem mówiąc do Twoich celów chyba lepszy niż ten cały MCP) stosuję 4.7k i działa od strzału.

 

 

Link to post
Share on other sites
4 godziny temu, ethanak napisał:

Dobra, jakie masz rezystory podciągające na liniach SDA i SCL?

Dałem takie jakich próbowałeś Ty - 4,7K. Niestety efekt ten sam 😕 Po uruchomieniu pokazuje stany poprawnie, robię flash oprogramowania - wszędzie wyskakują 1, 1, 1 (powinno być 0, 0, 1 - 2 kabelki mam podłączone i sprawdzam reakcję). Spróbuję jeszcze dorzucić kondensator, jednak nie mam wartości takich jakich o jakich napisał @_LM_ (Przy konwerterze na nóżkach zasilania kondensator 10u i 100nf to sprawi że układ będzie odporniejszy na szpilki w zasilaniu).
Mam natomiast kondensatory elektrolityczne o pojemnościach: 16V 10uF, 16v 270uF, 25V 1000uF, 16v 1500uF, zatem czy mogę zastosować je w zamian?

Link to post
Share on other sites

Układ obecnie wygląda tak jak na schemacie poniżej (problem wciąż występuje). Chcę spróbować także dodać kondensatory, wtedy napiszę czy coś to pomogło.

X_schem.jpg

Link to post
Share on other sites
5 godzin temu, _LM_ napisał:

A zrobiłeś chociaż minimum tego co pisałem? choćby filtrowanie zasilania? 

Zrobiłem i testowałem jak zalecałeś. Rezystory podciągające także wstawiłem. Natomiast przy filtrowaniu potrzebuję drobnej porady odnośnie kondensatorów. Zerknij w powyższy post w wolnej chwili jeśli możesz 🙂 

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

5 godzin temu, ethanak napisał:

Dobra, jakie masz rezystory podciągające na liniach SDA i SCL? Bo jeśli dalej 100k to takie coś nie ma prawa działać. Ja dla 3.3V i układów które nie mają wewnętrznych rezystorów (np. PCF8574, nawiasem mówiąc do Twoich celów chyba lepszy niż ten cały MCP) stosuję 4.7k i działa od strzału.

Tak, o PCF8574 też myślałem na początku... Jednak ktoś polecił mi MCP23017. Praktycznie nie ma między nimi różnic jeśli mowa o zastosowaniach do mojego projektu, jednak do MCP23017 przekonała mnie większa ilość portów i możliwe większe wyprowadzenie natężenia z układu na piny OUTPUT. Niemniej, różnic dużych nie ma, powinny śmigać oba układy, na internecie sporo przykładów, gdzie to ludziom MCP23017 działa, a u mnie jakieś wymagane kombinacje 😕 

Link to post
Share on other sites

Tak dołóż tam choćby tego 1000µF jak dalej nie zadziała to będzie trzeba szukać w programie. 

Link to post
Share on other sites

No to jeszcze drobiazg: jeśli robisz flash oprogramowania to jest duża szansa, że wstrzelisz się w środek transmisji i2c i wtedy układ po prostu głupieje. Zasada numer jeden: po zmianie softu musisz zresetować wszystkie układy zewnętrzne (czyli najprościej odłączyć i załączyć zasilanie).

Możesz spróbować OTA zamiast kabla, wtedy przy dobrze napisanym programie ten problem nie wystąpi.

Z tego co widzę to w ogóle nie sprawdzasz, czy układ się prawidłowo zainicjalizował... jest coś takiego jak reset i2c (teraz linku nie podam, mam gdzieś w domu) ale to też nie zawsze działa.

Link to post
Share on other sites
(edytowany)
9 godzin temu, _LM_ napisał:

Tak dołóż tam choćby tego 1000µF jak dalej nie zadziała to będzie trzeba szukać w programie. 

Ok, dołożyłem, niestety nie podziałało i od razu po uruchomieniu miałem już 1, 1, 1. Grzał się też regulator napięcia 3.3V.

1 godzinę temu, ethanak napisał:

No to jeszcze drobiazg: jeśli robisz flash oprogramowania to jest duża szansa, że wstrzelisz się w środek transmisji i2c i wtedy układ po prostu głupieje. Zasada numer jeden: po zmianie softu musisz zresetować wszystkie układy zewnętrzne (czyli najprościej odłączyć i załączyć zasilanie).

Możesz spróbować OTA zamiast kabla, wtedy przy dobrze napisanym programie ten problem nie wystąpi.

Z tego co widzę to w ogóle nie sprawdzasz, czy układ się prawidłowo zainicjalizował... jest coś takiego jak reset i2c (teraz linku nie podam, mam gdzieś w domu) ale to też nie zawsze działa.

Prawdopodobnie odkryłeś właśnie przyczynę problemu. Jest to też bardzo wytłumaczalne logicznie. Zrobiłem kilka testów i coś jest na rzeczy. Szczerze powiedziawszy od samego początku się nad tym zastanawiałem, gdyż zauważyłem, że układ zewnętrzny się nie resetuje z ESP8266. Pomyślałem, że pin RESET będzie sprawiał takie resetowanie wraz z ESP8266, jednak kompletnie nie wiedziałem jak go użyć, dlatego też z początku o niego pytałem (swoją drogą wciąż nie widzę zalet tego pinu, co można dzięki niemu uzyskać).

Co do logicznego uzasadnienia to po pierwsze - układ bez problemu potrafi odczytywać stany nawet 2h od razu po uruchomieniu.
Po drugie - układ po flashowaniu oprogramowania z opóźnieniami 0 zawiesza się szybko (częstotliwość wysyłania zapytań o stany INPUT jest bardzo duża), po 1 - 2 flaszowaniach układ już głupieje.
Po trzecie - układ po flashowaniu oprogramowania z opóźnieniami 200 zawiesza się o wiele wolniej (mniejsza częstotliwość zapytań o stany INPUT - mniejsze prawdopodobieństwo wstrzelenia się w transmisję I2C), więc mogłem flashować nawet 20 - 30 razy bez problemu.

Zauważyłem jeszcze jedną rzecz - jak układ już zgłupieje i wyświetla stany 1, 1, 1 (nie pomaga odłączenie 3.3V, GND od MCP23017) to działa odłączenie i ponowne podłączenie pinu SDA do ESP8266. Wtedy układ zaczyna znów poprawnie odczytywać stany.

I taka mnie rozkmina naszła, bo przeglądnąłem już na szybko metody softwarowego resetowania MCP23017 z poziomu ESP8266, ale chyba nie ma takiego rozwiązania (szukane na szybko) to pomyślałem czy by optoizolatorem PC817 nie resetować tego pinu SDA przy procedurze setup() (procedura uruchomieniowa ESP8266). W sensie przy uruchomieniu ESP8266 pin SDA jest odłączany na np. 100ms i podłączany ponownie. Co myślicie o takim rozwiązaniu?

PS. O reset I2C zaraz jeszcze poszukam, ale software'owo nie wiem czy to się tak da. Przy zakupie myślałem też logicznie, że pin RESET odpowiada za resetowania układu MCP23017 "na życzenie", ale chyba się przeliczyłem.

Edytowano przez MisiekD
Link to post
Share on other sites
(edytowany)
7 minut temu, deshipu napisał:

podłączam reset układu do resetu płytki, wtedy się resetują razem.

Mógłbyś to bardziej rozwinąć? Ja mam RESET MCP23017 podłączony pod 3.3V (tak też radzą na internecie w schematach, ale sensu tego nie rozumiem).

Edytowano przez MisiekD
Link to post
Share on other sites
(edytowany)

Reset układu podłączasz do jakiegoś tam pinu esp i w setup nasz sekwencję: pin na zero, poczekaj 100msec, pin na jedynkę, poczekaj 100msec.

Pamiętaj, że soft reset mikrokontrolera nie zmienia stanu pinu RESET.

Edytowano przez ethanak
Link to post
Share on other sites
3 minuty temu, ethanak napisał:

Pamiętaj, że soft reset mikrokontrolera nie zmienia stanu pinu RESET.

Na szczęście przy wgrywaniu programu, esptool musi pomachać fizycznym resetem.

Link to post
Share on other sites

Na pewno? bo espota na przykład nie musi, a reset esp można wywołać programowo (ważne jest podłączenie gpio0). A hgw czym kolega wątkotwórca wgrywa nowy soft.

W każdym razie z doświadczenia powiem, że nie zawsze to działa tak jak byśmy chcieli (przynajmniej w 8266). Teoria teorią, ale w praktyce chińskie wynalazki mogą się zachowywać lekko sprzecznie z zachodnią ideologią 😉

Link to post
Share on other sites
19 minut temu, ethanak napisał:

Na pewno? bo espota na przykład nie musi, a reset esp można wywołać programowo (ważne jest podłączenie gpio0).

O, ciekawe. A wiesz może jak to robi niezależnie od tego co jest wgrane? Bo trudno mi to sobie wyobrazić.

Link to post
Share on other sites

Dlaczego niezależnie? Fakt, espota musi współpracować z softem na esp. A w tym przypadku pin reset siedzi sobie na vcc i nawet się nie ruszy.

Nie wiem jakiego softu używa kolega, wiem tyle, że 8266 sprawia czasami problemy niespotykane w innych kontrolerach (spróbuj się pobawić i2s, który działa w 80% przypadków)

Teoretyzuję: ile czasu trzeba na inicjalizację resetu 8266? Czy MCP zdąży się zresetować? Nie wiem...

 

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.