Skocz do zawartości

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


Pomocna odpowiedź

@_LM_ @ethanak Ok, sprawa ze stanami 1, 1, 1 rozwiązana 🙂 Wystarczyło podpiąć pin RESET pod jakikolwiek pin OUTPUT i z ESP wysterować stan niski, po chwili wysoki. A to czy linia I2C się zacięła należy sprawdzić pinami SDA i CLK w ESP8266:

- stan wysoki CLK i stan wysoki SDA - linia I2C działa poprawnie,

- stan wysoki CLK i stan niski SDA - linia I2C zgłupiała (trzeba zresetować).

Natomiast zauważam teraz różne losowe stany odczytując z MCP23017. Przepiąłem to chwilowo na płytkę stykową, żeby zrobić różne testy i się zastanawiam czy niektóre przewody nie powodują zakłóceń. Rozmyślam czy ekranowane przewody na linie I2C by coś dały. Rezystory 4,7K na linie I2C są podane, z podpięciem kondensatora także próbowałem, ale bez sukcesu.

 

(edytowany)
15 godzin temu, MisiekD napisał:

Rozmyślam czy ekranowane przewody na linie I2C by coś dały

Moim zdaniem sprzętowe problemy z i2c zostały rozwiązane i ekranowanie samej magistrali nic nie zmieni. Dalej pozostają kwestie wejść ekspandera, uważam że minimum jakie powinieneś zrobić to dołożyć rezystory podciągające na wejściach,(być może nawet jakieś proste filtry rc) szczególnie tych które są podłączone do długich przewodów. O transoptorach już pisałem. 

Edytowano przez _LM_
6 godzin temu, _LM_ napisał:

Moim zdaniem sprzętowe problemy z i2c zostały rozwiązane i ekranowanie samej magistrali nic nie zmieni. Dalej pozostają kwestie wejść ekspandera, uważam że minimum jakie powinieneś zrobić to dołożyć rezystory podciągające na wejściach,(być może nawet jakieś proste filtry rc) szczególnie tych które są podłączone do długich przewodów. O transoptorach już pisałem. 

Sprawa rozwiązana 🙂 I2C działało w porządku (po zaimplementowaniu kodu resetujacego). Zacząłem się tak wczoraj wieczorem bawić rezystorami i problem powodowały rezystory podciągające wewnątrz ekspandera (100K). Do przycisków Arduino/ESP stosuje się najczęściej 10K i taki też był potrzebny. Działa to teraz tak jak powinno (nawet bez dodatkowych transoptorów przy INPUT-ach (napięcie 3.3V leci przez dłuższe kable, a przy ekspanderze zwiera do pinu INPUT i rezystora 10K) - to też ma dodatkową zaletę taką, że stan HIGH to stan, gdzie "przycisk był naciśnięty", a stan LOW to "przycisk nienaciśnięty" (wcześniej z wewnętrznymi rezystorami w ekspanderze było na odwrót, co lekko komplikowało kod 😉).

Reasumując, bardzo dziękuję kolegom za poświęcony czas i chęci, sporo się dzięki temu nauczyłem, i teraz lepiej wiem jak działa linia I2C oraz jak ją "wspomagać" 😉

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...