Ich weiß nicht mehr weiter... ATMega128 und Timer0

Gast #272624
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren