Nabend,
ich habe folgendes problem. ich möchte gerne den Timer0 meines atmega8 in gang bringen. und bei einem overflow einen interrupt auslösen.
also habe ich, wie im datenblatt und in etlichen beispielen beschrieben den timer in gang gesetzt:
timer aktivieren F_CPU/1024 (TCCR0)
interrupt durch timer0 erlauben (TIMSK)
interrupts allgemein einschalten
ISR routine für timer0 overflow schreiben ISR(TIMER0_OVF_vect)
soweit von meiner seite ersichtlich, ist an dem code nichts auszusetzen
da ich gehört habe, dass es da durchaus drauf ankommt, wie man seinen code compiliert, habe ich das beigefügt.
Hier das Compileren und Flashen:
Code:
> avr-gcc file.c -c -o file.o -Os -g -mmcu=atmega8
> avr-gcc file.o -o file.elf -mmcu=atmega8
> avr-objcopy -j .text -j .data -O ihex file.elf file.hex
> avrdude -c avrispv2 -p m8 -P USB -U flash:w:file.hex:i
Hier der Code:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#define F_CPU 1000000
ISR(TIMER0_OVF_vect)
{
DDRB = 0xfd; // Alles ausgang ausser PB1 -> Eingang
PORTB = 0x03; // Ausgang für PB0 high , Pull-Up für PB1 an
}
int main(void)
{
TCCR0 = (1<<CS02)|(1<<CS00); // TCCR0 = 0x03;
TIMSK = (1<<TOIE0);
sei();
while(1)
{
}
/* Wird nie erreicht */
return 0;
}
Ich weis, dass die Anweisung in der Interrupt-Funktionen für nen timer keinen sinn hat. es geht hier auch lediglich um den test des timers 
In einer fertigen beispieldatei funktioniert der timer.
suchfunktion des forums ergab für mich keine weiterhelfenden themen.
ich hoffe, dass mir jemand helfen kann.
danke schonmal im vorraus.
gruß
Krampfda
Lesezeichen