Hallo,
ich habe versucht, auf meinem STK500 ein Lauflicht zu implementieren, bei dem die Verzögerungen mittels Timer0 erzeugt werden, mein Programmcode sieht wie folgt aus:
Bekomme beim erstellen zwar keinen Error, aber ich sehe auch kein Lauflicht, kann mir jemand sagen, woran es liegen kann?[/code]Code:#include <avr/io.h> #include <avr/interrupt.h> #define SIG_CNT_LIMIT 10 unsigned short i=0; /* count interrupt events */ volatile int zaehler=1; int up=1; void init_timer0(void); ISR(TIMER0_COMP_vect) { i++; /* Did the counter exceed the limit? */ if (i>=SIG_CNT_LIMIT ) { i=0; //PORTB = ~zaehler; if(up == 1) zaehler = zaehler * 2; //Zaehlerwert auf naechste LED erhoehen else zaehler = zaehler / 2; //Zaehlerwert auf naechste LED erniedrigen if(zaehler == 128) //um von der letzten LED rückwaerts zu laufen, up = 0 up = 0; else if (zaehler == 1) //um von der ersten LED wieder nach oben zu laufen up = 1; } } void init_timer0() { /* clear timer if timer value matches compare value. */ /* CTC Mode in Register TCCR0*/ TCCR0=(1<<WGM01)|(0<<WGM00); /* set clock divider to "1024" at position CS00..02 */ TCCR0=(1<<CS02)|(1<<CS01)|(1<<CS00); /* set timer compare value to 0xFF (=255, 3.68MHz/1024/255)*/ OCR0=0xFF; /* highbyte of compare register */ /* enable compare1a interrupt in the interrupt mask register */ TIMSK=(1<<OCIE0); /* reset current timer value */ TCNT0=0; /*Timer counter 0*/ } /* This is the main function. */ int main(void) { init_timer0(); DDRB = 0xFF; // all pins are output DDRA = 0x00; PORTB=0xFF; sei(); for(;;) { PORTB = ~zaehler; //Ausgabe des aktuellen Zaehlerwertes } }







Zitieren

Lesezeichen