Przeszukaj forum
Pokazywanie wyników dla tagów 'mcp23017'.
Znaleziono 2 wyniki
-
Fałszywy stan pinów INPUT z użyciem ekspandera MCP23017 oraz ESP8266
MisiekD opublikował temat w Arduino i ESP
Hej, piszę do Was w sprawie problemu z ekspanderem MCP23017. Próbuję od kilku dni rozgryźć jakim cudem ekspander MCP23017 odczytuje poprzez piny INPUT różne wartości (inne niż powinien). Zauważyłem, że dzieje się to losowo, zazwyczaj, gdy wgrywam nowe oprogramowanie przez kabel (tak jakby ekspander przed flashowaniem oprogramowania zapamiętał ostatnie wartości INPUT i trzymał je w pamięci wysyłając takie stany do mikrokontrolera). Ekspander podaje mi do mikrokontrolera wartości np. 0 (pin INPUT połączony z GND) w momencie, gdy pin INPUT jest odłączony od pinu GND (brak przewodzenia). Dodam także, iż stosuje zasilanie zewnętrzne 5V do ESP8266, jednakże wartości odczytują się poprawnie, gdy odłączę całkowicie mikrokontroler od zasilania (przez kabel jak i zewnętrznego), a następnie podłączę na nowo (taki jakby "RESET"). Gdy podłączę zasilanie na nowo do mikrokontrolera, stany INPUT zaczynają pojawiać się poprawnie na mikrokontrolerze (sprawdzam stany INPUT przez Serial). Tak nawiasem, zapytam się jeszcze czy dobrze zrobiłem podłączając pin RESET z MCP23017 do 3.3V z NodeMCU? Ciężko mi na ten temat było cokolwiek wyczytać i zrozumieć, co dzięki takiemu połączeniu zyskam. Natomiast próbowałem połączenie układu z pinem RESET jak i bez - niestety błędny odczyta stanów INPUT pojawia się nadal. Kod programu: #include <Arduino.h> #include <Wire.h> #include <Adafruit_MCP23017.h> // MCP23017 Adafruit_MCP23017 mcp; // INPUT int fotokomorkaStanSlupekPrzyBramie = 2; // MCP23017 A2 int fotokomorkaStanNaWyjazdzie = 3; // MCP23017 A3 int przekaznikStanOdbiornikPilota = 4; // MCP23017 A4 // OUTPUT int optoizolatorOtwieranieCalejBramy = 0; // MCP23017 A0 int optoizolatorOtwieranieFurtki = 1; // MCP23017 A1 void setup() { Serial.begin(9600); // MCP23017 mcp.begin(); // INPUT mcp.pinMode(fotokomorkaStanSlupekPrzyBramie, INPUT); mcp.pinMode(fotokomorkaStanNaWyjazdzie, INPUT); mcp.pinMode(przekaznikStanOdbiornikPilota, INPUT); mcp.pullUp(fotokomorkaStanSlupekPrzyBramie, HIGH); mcp.pullUp(fotokomorkaStanNaWyjazdzie, HIGH); mcp.pullUp(przekaznikStanOdbiornikPilota, HIGH); } void loop() { // Serial.println(millis()); // delay(10); if(millis() % 1000 == 0 || millis() % 1000 == 1 || millis() % 1000 == 2) { Serial.println(""); Serial.println("millis(): " + String(millis())); Serial.println("fotokomorkaStanSlupekPrzyBramie: " + String(mcp.digitalRead(fotokomorkaStanSlupekPrzyBramie))); Serial.println("fotokomorkaStanNaWyjazdzie: " + String(mcp.digitalRead(fotokomorkaStanNaWyjazdzie))); Serial.println("przekaznikStanOdbiornikPilota: " + String(mcp.digitalRead(przekaznikStanOdbiornikPilota))); } if (mcp.digitalRead(fotokomorkaStanSlupekPrzyBramie) == !HIGH) { } else { } if (mcp.digitalRead(fotokomorkaStanNaWyjazdzie) == !HIGH) { } else { } if (mcp.digitalRead(przekaznikStanOdbiornikPilota) == !HIGH) { } else { } } Budowa układu (bez wyjść OUTPUT A0 i A1): Przykładowy problem z niepoprawnym odczytem w krokach: 1. Podłączam układ (zasilanie zewnętrzne 5V jak i USB), stany INPUT poprzez MCP23017 odczytują się poprawnie (1 - brak zwarcia między pinem INPUT, a GND; 0 - pin INPUT zwarty z GND): millis(): 5000 fotokomorkaStanSlupekPrzyBramie: 1 fotokomorkaStanNaWyjazdzie: 0 przekaznikStanOdbiornikPilota: 1 2. Zmieniam przykładowe połączenia między GND, a stykami INPUT A2, A3, A4 (odczyt wciąż poprawny): millis(): 7000 fotokomorkaStanSlupekPrzyBramie: 0 fotokomorkaStanNaWyjazdzie: 1 przekaznikStanOdbiornikPilota: 1 3. Minimalnie zmieniam kod (np. dodaję przekaźnik jako OUTPUT do mikrokontrolera) i flashuję kod do mikrokontrolera ESP8266 przez kabel, po czym mikrokontroler na nowo wczytuję procedurę setup() jak i następnie loop(), stany INPUT z MCP8266 odczytywane przez mikrokontroler są jak "zamrożone" (dokładnie takie same jakie wcześniej przed flashowaniem). Odłączając oraz łącząc przewody między INPUT A2, A3, A4 oraz pinem GND nie ma żadnej różnicy, jako dane z MCP8266 zwracane są cały czas takie same jak przez flashowaniem z różnicą millis(): millis(): 2000 fotokomorkaStanSlupekPrzyBramie: 0 fotokomorkaStanNaWyjazdzie: 1 przekaznikStanOdbiornikPilota: 1 4. Odłączam zewnętrzne zasilanie 5V (zasilanie z kabla USB wciąż podłączone), ten sam stan pinów INPUT A2, A3, A4 (niezależnie od stykania pinów INPUT z pinem GND): millis(): 4000 fotokomorkaStanSlupekPrzyBramie: 0 fotokomorkaStanNaWyjazdzie: 1 przekaznikStanOdbiornikPilota: 1 5. Odłączam zasilanie z USB (całkowite odłączenie zasilania od mikrokontrolera (a także MCP23017)), podłączam zasilanie 5V i USB do ESP8266, stany między INPUT A2, A3, A4 oraz GND wczytały się na nowo (teraz są poprawne): millis(): 7000 fotokomorkaStanSlupekPrzyBramie: 1 fotokomorkaStanNaWyjazdzie: 1 przekaznikStanOdbiornikPilota: 1 Tak wygląda działanie mojego układu, co bardzo mi przeszkadza (nie jestem w stanie zmieniać kodu na żywo, po czym flashować i sprawdzać jak funkcjonuje urządzenie sterowane). Dodam także, iż nie miałem tego problemu odczytując stany INPUT bezpośrednio z mikrokontrolera ESP8266, jednak PIN-ów tam jest zdecydowanie za mało i potrzebowałem rozszerzyć o kolejne. Wyczytałem w internecie o ekspanderze MCP23017 i postanowiłem zamówić kilka sztuk. Natomiast po podłączeniu i skonfigurowaniu zaczęły pojawiać się takie problemy. Bardzo bym prosił o pomoc, pomysły mi już upadły co tu jeszcze może być grane, a takie funkcjonowanie na pewno nie jest "normalne". Zaczynam się też zastanawiać czy aby problem nie sprawiają wbudowane rezystory w MCP23017. Być może macie jakieś rady, bardzo prosiłbym o pomoc 🙂 Bardzo zależy mi na zbudowaniu tego układu, a im dłużej się z tym męczę, tym bardziej tracę chęci do kontynuowania dalszego rozwijania się z elektroniką i mikrokontrolerami 😕 -
Witam serdecznie, robię coś "ala inteligentny dom" i brakowało mi gpio na malince. Podłączyłem mcp23017 i działa:) Działa jako wyjście:/ Jak zrobić żeby działało jako wyjście? A takie ważniejsze i chyba trudniejsze pytanie (jak dla mnie) to: Jak połączyć malinkę z arduino przez usb?? tak żeby arduino działało jako we/wy?? Nie liczę na gotowca, ale jakieś wskazówki. Nie jestem też jakimś tam hiper, biper, diker informatykiem. Skoro potrafiłem podłączyć mcp23017 i "ledami mrugać" to myślę że arduino podłączę jako we/wy do malinki;) Pozdrawiam serdecznie;) p.s. Zapomniałem dodać, że to wszystko obsługuję na domoticz.