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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
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...