MCP23017 - přerušení

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41

MCP23017 - přerušení

Příspěvek od petouf » 28 zář 2017, 13:54

Ahoj,
mám tu problém - rozchodil jsem si klávesnici s MCP23017, bohužel jsem nucen využít přerušení.
A to nemohu s Arduinem rozchodit. Louskal jsem zahraniční fora, bohužel má znalost Angličtiny je "pod psa".
Z toho mála co jsem pochopil jsem si napsal pokusný program, který nefunguje:
Na pinu 3 mám vedeno přerušení z MCP; Normálně LED bliká, po stisknutí kl. na adrese 0 má vyslat MCP log.1 na pin 3 a Arduino skočit na podprogram "preruseni". No- a MCP mi nastaví výstup přerušení trvale do jedničky a nehne s tim ani restart.
Nevíte, jak se ten MCP programuje?
Dík za každou radu, přeji pěkný den :)




#include <Wire.h>
#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp;

void setup() {
mcp.begin(); // use default address 0

mcp.pinMode(0, INPUT); // klávesa 0 jako vstup
mcp.pullUp(0, HIGH); // ošetřeno do 1
pinMode(13, OUTPUT); //led jako výstup
mcp.setupInterrupts(1, 0, HIGH); // aktivace přerušení ( přerušení bude log.1 na výstupu klávesnice)
mcp.setupInterruptPin(0, RISING); //Pakliže se zmáčkne tlačítko (pin 0 --> log.1) , generuj na vystupu klavesnice (PIN 19 MCP) přerušení
attachInterrupt(1, preruseni, HIGH); // Arduino bude čekat na pinu 3 na log.1 Přijde-li na pin 3 log.1, skáču na podprogram "preruseni)
}

void loop()
{
digitalWrite(13, !digitalRead(13) ); //blikej
delay (1000);
}

void preruseni()
{
//něco dělej...

celeron
Příspěvky: 17
Registrován: 31 črc 2017, 08:15

Re: MCP23017

Příspěvek od celeron » 23 říj 2017, 01:06

Já tlačítko na pinu 2 přes přerušení dělám takhle:
void setup()
attachInterrupt(0, tlacitko, RISING);
//definujeme přerušení od tlačítka na pinu 2,
//které se vyvolá při přechodu z vyp do zap RISING

...
...

v podprogramu na zpracování přerušení potom mám:

void tlacitko() {
detachInterrupt(0); //vypneme přerušení
...
...
attachInterrupt(0, tlacitko, RISING); //zapneme přerušení na konci void
}


Žádný mpc.setupinterupts tam nemám.
Chodí to. ;)
Jirka

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti