Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

MCP23017 z przerwaniami

Autor Wiadomość
rezolut 



Posty: 230
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 17-02-2017, 19:53   MCP23017 z przerwaniami

Prosiłbym o pomoc w ujarzmieniu MCP23017.
MCP na porcie A ma diody, na porcie B chciałbym ustalać stan czujników - jeszcze nie sprecyzowanych, powiedzmy że dających 1 (VCC), która mnie interesuje w momencie zdarzenia, w spoczynku 0 (0V).
MCP podpięty poprawnie, I2C działa, przerwanie teoretycznie też, Arduino reaguje na przerwanie, ale..... no właśnie.
Wg noty układ porównuje stan na wejściu portu z rejestrem DEFVAL. Jeśli w DEFVAL są 0 a wejście podany stan VCC to teoretycznie powinno wystąpić przerwanie (zmiana stanu na pinie Arduino), wychwycone w trybie: albo RISING, albo FALLING. I do tego dążę. Nie bardzo mi jednak to działa. Arduino nie wychwytuje przerwania.
Gdy INTCON=0, czyli gdy MCP ma generować przerwanie przy zmianie stanu wejścia w stosunku do stanu poprzedniego - program działa. Działa, ale... podanie stanu np. na portB.4 (wartość 16) jest rozpoznawane i po chwili po zdjęciu sygnału z portu wartość ta jest zmniejszana nie zerowana. Ustawienie VCC na portB.0 daje 1, potem na portB.1 daje 3 - czyli układ pamięta stan portB.0. Potem kolejno zmniejsza wartość portu na 1 i dopiero na 0.
Ktoś konfigurował MCP23017 do pracy z przerwaniem?
Moje ustawienia - wyżej opisane i raczej jedyne działające to:
IODIR=0xFF - wejście
IPOL=0x00 - bez zmiany logiki
GPINTEN=0xFF - zezwolenie na przerwanie - odpalone jako ostatnie w konfiguracji
DEFVAL=0x00 - wartość do porównania ze stanem na wejściu
INTCON=0x00 - przerwanie gdy zmiana stanu na wejściu - powinno być raczej 0xFF, czyli przerwanie gdy wartość wejścia różna od 0 (od DEFVAL)
IOCON=0x00 - przerwanie Active_Low, czyli chyba w momencie zdarzenia na porcie wystawiany stan niski - z resztą Arduino tak wychwytuje przerwanie ustawione na FALLING
GPPU=0X00 - wejścia nie podciągnięte - zależy mi na 1 przy stanie VCC

Co ja tu mogłem przegapić, że przerwanie nie generuje się raz, tylko po podaniu stanu wysokiego na któryś pin portu B?

[ Dodano: 17-02-2017, 21:33 ]
OK, powiedzmy, że ogarnąłem temat i to co osiągnąłem musi mi wystarczyć - tj. reakcja układu na impuls wysoki z czujnika i reakcja na niski.
Problem w tym, że podając impulsy szybko na kolejne piny, i od razu je zdejmując MCP (albo Arduino?) nie reaguje natychmiast a z pewnym opóźnieniem. I mam coś takiego.
Kod programu: Zaznacz cały

PIN 1  PORT 1  1
PIN 2  PORT 3  3
PIN 4  PORT 7  7
PIN 8  PORT 15  15
PIN 16  PORT 31  31

/... przerwa czasowa... kilkaset ms....//

PIN 1  PORT 30  30
PIN 2  PORT 28  28
PIN 4  PORT 24  24
PIN 8  PORT 16  16
PIN 16  PORT 0  0

Czy te opóźnienia to kwestia konfiguracji? Od czego one zależą?

Ostatnio popularny » Raspberry Pi. Niesamowite projekty. Szalony Geniusz


Postaw piwo autorowi tego posta
 
 
rezolut 



Posty: 230
Pomógł: 3 razy
Otrzymał 18 piw(a)
Skąd: Łódź
Wysłany: 18-02-2017, 21:48   

Odpowiem sam sobie, że opóźnienia w zerowaniu portu po odjęciu sygnału wysokiego wynikają z braku rezystorów pull-down. Z rezystorami są znacząco niższe. Nie potrafię dobrać wartości rezystora, ale to kwestia czasu, prób i błędów.

Nadal zagadką zostaje dlaczego bez pull-down port sam zmienia stan po określonym czasie, akurat takim a nie innym?

Postaw piwo autorowi tego posta
 
 
aw 



Posty: 68
Skąd: Kraków
Wysłany: 06-04-2017, 10:05   

Przymierzam się do zastosowania tego układu w czujniku własnej konstrukcji.
Znalazłem taka bibliotekę:
https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
Jeżeli nie chcesz jej stosować, to na pewno pomoże analiza kodu źródłowego.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Arduino i programowa... Arduino ATmega 328-k... Atmega - problem z b... Przysyłanie/Odbieran...
lub przeszukaj forum po wybranych tagach: mcp23017, przerwaniami


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki