Gast
#272624
Hi!
Ich möchte mit dem Timer0 vom ATMega128 einen 10ms-Interrupt erzeugen
(=100Hz). (Quarzfrequenz 11059200Hz)
Hab den Vorteiler auf 1024 und den Reload-wert auf 148.
Jedoch bekomme ich am Test-Ausgang (Pin PC6) anstatt der erwarteten
Frequenz von 50Hz das 8fache, nämlich 400Hz! :-O
F_CPU wird im Makefile definiert. Auch wenn ich T0_RELOAD fest mit 148
definiere, macht es keinen Unterschied...
Hier der Code:
===================
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#include <string.h>
#define T0_RELOAD (256-((F_CPU/1024)/100))
/* Test-Variablen definieren */
volatile unsigned char test=0;
/* Funktionen deklarieren */
void INIT(void);
/* Hauptfunktion */
int main(void)
{
INIT(); // Initialisierungsroutine aufrufen
DDRC=0x40; // Testausgang PC6
while(1) { }
return 0;
}
/* Interrupt-Routine Timer0-Überlauf => 10ms */
SIGNAL (SIG_OVERFLOW0)
{
TCNT0 = T0_RELOAD; // Timer0 vorbelegen
if (test) { PORTC &= 0xbf; test=0; } else { PORTC |= 0x40; test=1; }
}
void INIT(void)
{
/* Timer0 als 10ms-Taktgeber per Interrupt definieren */
TCCR0 = (1<<CS00)|(1<<CS02); // Timer0 => F_CPU / 1024
TCNT0 = T0_RELOAD; // Timer0 vorbelegen
TIMSK |= (1<<TOIE0); // Interrupt Overflow0 freigeben
sei(); // Globale Interruptfreigabe
return;
}
===================
Was kann hier noch faul sein?
Fuse-Bits sollten auch alle passen:
-M103C deaktiviert (andernfalls geht garnix)
-JTAG, OCD, WDTON, BOOTRST deaktiviert
-Takt: Ext XTAL, High frequency
-Keine Lockbits (alle Mode 1)
Wäre über Tipps was ich noch vergessen haben könnte echt dankbar!
MfG
Techniker