Timer

Gast #5121
Lesenswert?

Hi,
kann mir wohl jemand erklären wie das mit dem Timer funktioniert ?

Ich programmiere in C und möchte das z.B. jede Sekunde durch den Timer 
eine Funktion ausgeführt wird. So das in der anderen Zeit permanent ein 
Programm ausgeführt wird.

Ich bekomme das nicht hin.

Für Antworten binich sehr dankbar.
Gast #5122
Lesenswert?

Hi,

Meine Idee wäre: 8bit-Timer initialisieren auf CK/1024, seinen Wert auf 
null setzten, Owerflow Interupt enablen. Wenn interupt ausgelöst wird, 
eine globale Variable um eins erhöhen. Wenn die variable den wert 30 
erreicht hat, ist ungefär 1 Sekunde vergangen( ca. 2 ms weniger) dann 
einfach deine routine ausführen, Variable löschen, das ganze von vorne.

Ich hofe es hilft dir was. Wenn irgendwer meint es geht einfacher oder 
meine Idee nicht so gut findet, dann bitte posten!!
Gast #5123
Lesenswert?

Einfacher und präziser geht's mit nem 16bit-Timer (8535 oder 8515 bei 
8MHz):

SIGNAL(SIG_OUTPUT_COMPARE1A)  // wird jede Sekunde aufgerufen
{
  // was halt alle Sekunde passieren soll

  outp(0, TCNT1); // Counter zurücksetzen nicht vergessen
}

int main(void)
{
  outp(4, TCCR1B); // clock/256
  outp(0x7a, OCR1AH); // Zähle bis...
  outp(0x12, OCR1AL); // 31250 (8000000/256)
  sbi(TIMSK, OCIE1A); // Output Compare Interrupt A einschalten
  outp(0, TCNT1); // Counter zurücksetzen

}


Ich hoffe ich habe nichts vergessen, ich hab das jetzt nur schnell mal 
zusammengeklopft.
Gast #5125
Lesenswert?

Hallo!

Für Timer1 könntest du es so machen:

// Hier solltest du dein Intervall reinschreiben. Diese Daten gelten für 
3111us bei 4Mhz wenn der Prescale Faktor auf 2 eingestellt ist
outp(0xF9, TCNT1H);
outp(0xED, TCNT1L);
outp(2, TCCR1B); // Timer (1) starten

SIGNAL(SIG_OVERFLOW1)
{
  deine_zu_startende_funktion();
}

Den Timer kannst du wieder abstellen mit:

outp(0 , TCCR1B);



Ich glaube aber das der Timer1 eher für kürzere (Präzesionszeiten) 
gedacht ist, sicher bin ich mir da aber nicht.

Niki

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