www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer und mehrere Aufgaben


Autor: René S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
if (TCNT0 > 247){  //würde der Timer überlaufen?
OCR0A = 178+8;     //CM=Vorladewert+8 (entspricht 1ms)
}
else{              //Timer läuft nicht über
OCR0A = TCNT0+8    /CM=Zählerstand+8
}
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.