Hallo
Ich habe leider noch ein Problem mit dem Timer0 meines AtMega8. Ich bekomme den Timer zum laufen. In die ISR geht er auch. Dort möchte ich eine Variable hochzählen... Also soetwas wie einen verschachtelten Timer. Das benötige ich um ein großes Zeitfenster zu bekommen. Mir schwebt da soetwas vor wie while(t<50)... in der Zeit wird im Hauptprogramm etwas ausgeführt. Und "Zwischendurch" wird in der ISR immer wieder die Variable t hochgezählt. Das scheint aber nicht zu funktionieren....
Dass ich die Variable auch irgendwann wieder zurücksetzten muss weiß ich auch... mir geht`s im Moment ersteinmal überhaupt einen Durchlauf hin zu bekommen... Hier mal mein Code:
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
#define F_CPU = 12000000L
int t=0; //Variable t für Timer anlegen
int main(void)
{
DDRD &= ~(1<<DDD2); //Pin D2 (INT0) als Eingang deklarieren
PORTD |= (1<<PD2); //Pull Up für D2 einschalten
DDRB = (1<<DDB0); //Port B0 als Ausgang definieren (LED)
PORTB |= (1<<PB0); //LED aussschalten
TCCR0 |= (1<<CS00)|(1<<CS02); //Timer initialisieren und einschalten
TIMSK |= (1<<TOIE0); //TimerOverflow Interrupt freigeben??
sei(); //Interrupts freigeben
while(t<10)
{
PORTB &= ~(1<<PB0); //Einschalten der LED
}
while(1);
}
Und hier die ISR:
Code:
ISR(TIMER0_OVF_vect)
{
t++;
}
Vielleicht könnt ihr mir ja auch sagen dass das so gar nicht möglich ist und ich das anders versuchen muss...
Vielen Dank schonmal...
Grüße!!
Bean
Lesezeichen