Forum: Mikrocontroller und Digitale Elektronik Interruptproblem Atmega1284P Arduino / Platformio


von Martin D. (martin_1328)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde,

als Anfänger habe ich ein leichtes Interrupt Problem. Auch nach lange 
Googlesuche bin ich auf keine Lösung gekommen.

Beschreibung:

Drehe ich am Encoder, steigen, bzw. fallen die Werte im Display. Drücke 
ich aber die Taste, geht nichts mehr. Erst nach einem Reset kann man die 
Werte durch drehen wieder ändern.

Für Ratschläge und Hilfe wäre ich sehr dankbar.

Grüße

Martin

von Peter D. (peda)


Lesenswert?

Martin D. schrieb:
> Drücke
> ich aber die Taste, geht nichts mehr.

LCD-Ausgaben sind nicht reentrant, d.h. dürfen nicht durch eine weitere 
Instanz von sich selbst unterbrochen werden.
LCD-Ausgaben im Interrupt sind daher verboten.

von beo bachta (Gast)


Lesenswert?

Martin D. schrieb:
> Für Ratschläge und Hilfe wäre ich sehr dankbar.

In deiner Interrupt-Routine  <void setzen()> druckst du
auf das LCD. Das könnte zuviel Zeit verbraten. Versuche
das zu vermeiden indem du dort nur ein globales Flag setzt
und die Ausgabe deines Ereignisses in der Hauptschleife
machst (Flag, volatile, zurücksetzen nicht vergessen).

von EAF (Gast)


Lesenswert?

Martin D. schrieb:
> Erst nach einem Reset kann man die
> Werte durch drehen wieder ändern.

Wire benötigt selber Interrupts.
Diese werden in deiner ISR abgeschaltet.
Stehen dann nicht zur Verfügung.
Folge: Der I2C Bus bleibt stehen.

von beo bachta (Gast)


Lesenswert?

Sobald man nur ein paar Sekunden seine Gedanken sortiert kommt
ein PeDa daher und weiss es schneller ....

von Martin D. (martin_1328)


Lesenswert?

Hallo PeterD,

vielen Dank, Problem gelöst.

Grüße Martin

von Axel R. (axlr)


Lesenswert?

Ruft man da nicht in der Timer_isr encoder->service() auf und holt sich 
in der main mit encoder->getButton() den Zustand des kNopfes? (gedrückt, 
losgelassen, doppelklick usw.)?
Also im mitgelieferten Beispiel machen die das so.
https://github.com/grappendorf/arduino-framework/blob/master/ClickEncoder/examples/ClickEncoderTest/ClickEncoderTest.ino

edit: kopf = Knopf

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.