Ok, ich hab gestern nochmal bisschen rumexperimentiert. Irgendwie bring ich das einfach nicht zum Laufen. Hier sit nochmal der vollständige und compilierbare Code:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char count;
ISR(TIMER0_COMPA_vect)
{
PIND = (1 << PD5);
count++;
}
void init_port()
{
PORTD = 0x00;
DDRD = (1 << PD5) | (1 << PD6);
}
void init_timer()
{
// Timer 0
TCCR0B = 0x00;
TCCR0A = 0x02;
OCR0A = 0x32;
TCNT0 = 0;
// Interupt-Maske
TIMSK = 0x01;
}
void start_timer()
{
TCCR0B |= 0x03; // Timer mit 1:64-Prescaler starten
}
int main( int argc, char **argv)
{
count = 0;
init_timer();
init_port();
sei();
start_timer();
while( 1)
{
if( count != 0)
PORTD |= (1 << PD6);
}
return 0;
}
Soweit ich das sehe, sollte die LED an PD5 abwechselnd 2,5ms leuchten und dunkel sein, während die LED an PD6 nach 5ms an geht und auch an bleibt. Die LED an PD5 reagiert wie erwartet, nur die an PD6 bleibt dunkel. Scheinbar wird die Variable count, obwohl als "volatile" deklariert, in der ISR nicht verändert.
Lesezeichen