Timer und mehrere Aufgaben

Gast #1595966
Hallo,

ich habe ein kleines Timer Problem.
Ich verwende einen Attiny44 mit 8-bit und 16-bit Timer, beide PWM.
Der 16-bit Timer ist bereits voll belegt, sowohl OVF als auch Compare 
Match.
Daher bleibt mir nur ein 8-bit für folgende Aufgaben:

- Entprellung alle 10ms, sowie pollen eines Eingangs (auch hier reichen 
10ms und kann daher in einem erledigt werden)
- Beim Auftreten eines externen Interrupts, soll genau 1ms später der 
Eingang von INT0 erneut geprüft werden

Wie löse ich das ganze am besten? Das Problem ist, dass eben genau ab 
Zeitpunkt des externen Interrupts 1ms vergehen muss (+/- ein paar µs 
wäre nicht schlimm), jedoch die Entprellung auch im 10ms Rythmus 
unabhängig davon erfolgen soll. D.h. das Timer Zählregister TCNT0 darf 
durch das Interrupt nicht verändert werden, da sonst die Zeit zum Pollen 
nicht mehr stimmt.

Ich habe mir daher überlegt es wie folgt zu machen:
Prozessor 8Mhz, Prescaler 1024, Vorladewert 178. Da erhalte ich alle 
10ms ein OVF Int (mit einem Fehler von -16µs, das ist ok).
Zusätzlich berechne ich mir im INT0 ein Compare Match auf 1ms und 
aktiviere dort das Compare Match, wie folgt:
1
if (TCNT0 > 247){  //würde der Timer überlaufen?
2
OCR0A = 178+8;     //CM=Vorladewert+8 (entspricht 1ms)
3
}
4
else{              //Timer läuft nicht über
5
OCR0A = TCNT0+8    /CM=Zählerstand+8
6
}
7
TIMSK0 = (1 << OCIE0A);

In der ISR des COMPA_vect schalte ich das Compare Int wieder ab und 
prüfe den Eingang an INT0.

Kann man das so machen? Gibt es geschicktere Möglichkeiten? Gut, statt 
vorzuladen, könnte ich auch ein Compare Match B benutzen...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.