Hi;
Ich bin Anfänger beim Programmieren in Mikrocontroller.Ich habe ein
Programm geschrieben,das die Sekunden zählt. Also mein Quarz taktet mit
3686400 HZ und als Vorteiler 64.
#include <avr/io.h>
#include <avr/interrupt.h>
#define ZEAHL F_CPU/(64*256) //interruptzähler
volatile uint16_t takt = ZEAHL , sekunde = 0;
void setup (void)
{
TCCR0 |= ( 1<<CS10 )|( 1<<CS00 ); //counter0,Prescaler CK/64
TIMSK |= ( 1<<TOIE0 ); // enable counter0 overflow interrupt
TCNT0 = 0; // Counter0 auf Null setzen
takt = ZEAHL;
sekunde = 0;
}
int main (void)
{
setup();
DDRC |= (1<<PC1);
sei();
for (;;)
{}
}
ISR(TIMER0_OVF_vect)
{
takt--;
if (takt==0) // nach 225 durchlaufen ist eine Sekunde vorgegangen
{
takt = ZEAHL;
sekunde++;
if (sekunde == 20)
{
PORTC |=(1<<PC1);
}
}
}
Der Timer läuft,aber der zählt die Sekunden nicht richtig. Hier Z.B
wollte ich nach 20 Sekunden PINC1 auf 1 setzen aber der macht schon nach
ungefähr 5 Sekunden. Wie kann ich jetz ZEAHL rechnen damit das Programm
die Sekunden genau zählt.
Gehe ich die Rechnung durch:
Frequenz 3686400 HZ
Vorteiler 64
Timer 0, also 8 Bit Timer
Nach 225 Interrupts wird erhöht.
3686400 / 64 Vorteiler 14400
14400 / 256 weil 8 Bit Timer 225, paar zerquetschte
225 / 225 weil 225 Overflows 1
das heisst ZEAHL = 225
Habe ich das richtig verstanden oder falsch???
Danke für eure Hilfe im Voraus.