Hallo Zusammen,
ich bin relativ neu in der Mikrocontroller-Welt und wollte deswegen ein
kleines Programm zum Verständnis der Timer und Interrupts schreiben.
Nach intensivem Studium des Datasheets komme ich aber hier leider nicht
weiter. Das Problem:
Am gesammten Port C meines Atmega32 hängen 8 LEDs (LOW Aktiv PC0-PC7):
Der Sinn des folgenden Programms sollte einfach sein die LED an PC0
mithilfe des 8-Bit Counters im CTC-Mode zum Blinken zu
bringen.(Geschwindigkeit war mir erstmal egal).
Wenn ich das Programm jedoch starte leuchten alle LEDs an Port C auf und
blinken auch nicht. Was mache ich falsch? Ich vermute, dass das Programm
erst gar nicht in die ISR springt. Ist die Timer Initialisierung falsch?
Gruß
Benni
Code:#include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> //Interrupt Service Routine ISR(TIMER0_COMP_vect) { static uint8_t c=0; c=~c; if (c==0){PORTC |= (1<<PC0);} if (c==1){PORTC &= ~(1<<PC0);} } //Hauptprogramm int main(int argc, char **argv) { //Pin Konfiguration DDRC = 0xFF; //PORT C als Ausgang //Timer 0 initialisieren TCNT0 = 0x00; //Timer 0 mit Null initialisieren OCR0 = 0xFE; //Vergleichsregister initialisieren TIMSK = (1<<OCIE0); //Output Compare interrupt enable sei(); //Enable Global Interrupt //Timer Start TCCR0 = ((1<<WGM01) | (1<<COM00) | (1<<CS02) | (1<<CS00)); // CTC Mode | Toggle OC0 | Prescaler clk/1024 while(1){}; }
[/code]







Zitieren

Lesezeichen