Forum: Mikrocontroller und Digitale Elektronik Arduino - Warum wird die Methode mehrmals ausgeführt?


von Thomas B. (kiu1988)


Angehängte Dateien:

Lesenswert?

Hallo,

vielen Dank schon mal an alle, die sich mit der Frage auseinandersetzen. 
Folgendes Verhalten dieses kleinen Teilprogramms verstehe ich nicht.

Ich möchte den Timer2 innerhalb einer Klasse initialisieren und rufe die 
hierfür vorgesehene Methode aus der Setup-Funktion des Arduino Sketches 
auf, sodass die Initialisierung nach meinem Verständnis nur ein mal 
ausgehührt werden sollte.

Die zugehörige Ausgabe des Programms (Files im Anhang) ist:

Beginning initialization!
TCNT2: 101
OCR2A: 11001000
TCCR2A: 10
TCCR2B: 111
TIMSK2: 10
10
TIFR2: 101
SREG: 10
Initialization done!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!          Beginning initialization!
TCNT2: 101
OCR2A: 11001000
TCCR2A: 10
TCCR2B: 111
TIMSK2: 10
10
TIFR2: 101
SREG: 10
Initialization done!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping!
Looping

etc...

Der Code innerhalb der Initialisierungsmethode wird also mehrmals 
aufgerufen. Dies verstehe ich nicht. Außerdem verhält sich das Programm 
wie erwartet (Einmale Ausführung der Initialisierungsfunktion), wenn ich 
die Anweisung
1
TIMSK2 |= (1<<OCIE2A);
 entferne. Deshalb vermute ich, dass dieses Verhalten durch einen 
Interrupt verursacht wird, weshalb ich die sei() und cli() Anweisungen 
hinzugefügt habe.

Jedenfalls verstehe ich die mehrfache Ausführung der Anweisungen in der 
Initialisierungsmethode absolut nicht, und hoffe, dass mir hier jemand 
helfen kann dieses Verhalten nachzucollziehen.

Das Arduino Board ist der Arduino Uno, und der µC der Atmega328P.

Gruß

von Dieter F. (Gast)


Lesenswert?

Interrupt (Compare Match A interrupt is enabled) ohne definierte ISR -> 
Reset und Neustart ... in einer Endlos-Schleife

von Thomas B. (kiu1988)


Lesenswert?

Danke!!!!!

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.