Hallo Leute,
ich brauch mal wieder eure Hilfe bei der Programmierung eines Atmega32.
Vorab:Ich fange gerade erst an, mit der Programmierung in C.
Ich benutze AStudio 6.1 und versuche mit Jtag ICE3 zu debuggen.
Es geht um Tastenabfrage. Ich benutze zum Üben das Pollin Board.
Die Software die ich benutze ist aus dem Netz und ist unter
"Tastenabfrage in C" auf
www.rn-wissen.de zu finden.
Der Timer0 soll jede msec einen Interrupt erzeugen und alle 10msec die Tasten
abfragen.
Hier tritt jedoch folgendes Problem auf:
Die Zählvariable "ovl0" im Interrupt wird nicht hochgezählt.
Sie bleibt letztendlich auf 255 bei Eintritt in den Interrupt, wird incrementiert und landet dann wieder auf 0.
Das bedeutet, daß die Tasten nie abgefragt werden.
Wenn ich die Sache richtig verstanden habe, sollte die Variable, da sie "volatile und auch static"ist, ihren Wert bei Eintritt in den Interrupt beibehalten haben.
Die Compiler Optimierung habe ich vorerst auf keine Optimierung eingestellt.
Ich versuche mal, den betreffenden Abschnitt zu posten.
Vielleicht hat jemand noch eine Idee dazu.
[code]
/* ISR für Timer 0
(16000000/64/256 Hz = 976,5Hz = 1,02ms)
Bei 16MHz Grundtakt läuft Timer0 alle 1,02ms über.
* Um auf rund 10ms zu kommen, rufen wir get_taster nur
* jedes 10. mal auf. */
ISR (TIMER0_OVF_vect)
{
volatile static unsigned char count_ovl0;
volatile unsigned char ovl0 = count_ovl0 +1;
if (ovl0 >= 10)
{
get_taster (0,PIND & (1<<PD2));
get_taster (1,PIND & (1<<PD3));
get_taster (2,PIND & (1<<PD4));
ovl0 = 0;
}
}
[code]