AVR - TIMER0 - ISR_OVF_vect - ATMEGA16A

OP #5701321
Lesenswert?
• ▲
▼
Guten Tag zusammen,
ich habe so meine Probleme mit Timern und deshalb frage ich mal hier 
nach. Ich habe einen Atmega16A mit 12MHz. Ich möchte, das beim start 
einer Eingabe über einen gewissen PORT (per Tastenfeld), der Timer 
startet. Während der Timer 2s lang läuft, soll die Eingabe über das 
Tastenfeld in ein Array abgespeichert werden. Nach den 2s, soll dann auf 
einem LCD-Display die Eingabe angezeigt werden und der Timer sollte 
stoppen, damit er wieder starten kann, wenn erneut eine Eingabe startet. 
Zwischen stoppen und starten soll 1s vergehen (per Delay). Mein Problem 
ist jetzt nur der Timer selber, der Rest ist kein Problem.
Könnte mir also jemand helfen, wie man das am besten macht? Damit beim 
Timer nach 2s ein Interrupt auslöst, weiß ich wie es geht, mein Problem 
ist, dass der Timer anschließend aufhören soll und erst wieder ab der 
nächsten Eingabe startet. Kann ich also den Timer stoppen und dann erst 
wieder über ein if() starten?

mfg Sebastian Schneider
OP #5701346
Lesenswert?
• ▲
▼
Ok, danke erstmal für die Antwort. Wie schon gesagt, hab ich so meine 
Probleme mit den Timern. Wie könnte ich dann realisieren, dass ich nur 
diese zwei Sekunden zweit habe von der ersten bis zur letzten Eingabe?
Edit: bzw. wäre es zum Beispiel möglich, dass ich erst nach mehrerem 
auslösen der Interrupt die Aktion setzte. Also auf diese Weise auf die 
2s komme?
lg Sebi
Gast #5701356
Lesenswert?
• ▲
▼
Sebastian S. schrieb:
> Edit: bzw. wäre es zum Beispiel möglich, dass ich erst nach mehrerem
> auslösen der Interrupt die Aktion setzte. Also auf diese Weise auf die
> 2s komme?

Ja, das würde ich als den goldenen Weg betrachten.
Und irgendwie stoppen, muss man den auch nicht.
Der kann im Hintergrund weiter ticken.

Hilft auch beim entprellten der Tastatur, oder beim Bau eines delay().
#5701651
Lesenswert?
• ▲
▼
Stelle den Timer0 z.B auf 10ms ein. Mit dem Compare-Modus kann man das 
ausreichend genau hinbekommen.

In der Timer-Interrupt-Routine zählst du dann einfach nur eine Variable 
hoch. Dort kann man dann bei Bedarf auch Tastenabfragen und 
Tastenentprellung mit unterbringen.

In der Main-Routine überprüft man dan ob die Variable schon 200 erreicht 
hat. Dann sind 2s vergangen und man kann irgendwas machen, auch die 
Variable mit neuem Startwert laden.

Antwort schreiben

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.

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.