www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ein oder zwei Timer nehmen?


Autor: Michael R. (miras)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese mit einem ATmega 6 Drehgeber (Gray-Code) aus. Das Auslesen 
dieser 12 Bits muss absolut zuverlässig funktionieren, es darf kein 
count ausgelassen werden. Soll ich das besser mit einem oder mit zwei 
Timer realiseren?

Ein Timer wäre natürlich einfacher zu realisieren, aber dieser Interrupt 
steuert ja noch das übrige "Housekeeping" wie RS-232 und 
Display-Ausgabe. Deshalb könnte es passieren, dass ein Interrupt 
verloren geht, wenn der Handler noch mit der Abarbeitung beschäftigt 
ist, oder irre ich mich da?

Wenn ich zwei Timer nehme, und einen Timer nur mit Auslesen und Zählen 
beaufschlage, habe ich dann die Garantie, dass dieser immer ausgelöst 
wird, auch wenn der andere Timer-Handler noch beschäftigt ist?

Ich tendiere zu zwei Timern, aber ich habe hier jetzt schon oft gelesen, 
dass man nur einen Timer verwenden soll. Deshalb frage ich, wie würdet 
Ihr das realisieren?

Gruß,
Michael

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer dreht an diesem Dreh-Geber?

Autor: Michael R. (miras)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Mensch. Die Drehgeber haben 24 Klicks pro Umdrehung, pro Klick 
werden vier Counts gezählt. Ich habe vor, die Ports mit 1 kHz 
einzulesen.

Michael

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm zwei Timer.
Ein Timer bearbeitet in seiner Interruptroutine die encoder und der 
andere arbeitet ohne Interrupts und du frögst das Overflow bzw 
comparematch flag in deiner main ab. Dann sind die Prioritäten klar 
verteilt und kein "Klick" kann dir verloren gehen.

Autor: JensG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht das nicht einfacher mit einem Port-Interupt. Also einer, der bei 
jeder Pegeländerung an den involvierten Portpins feuert?

Autor: Michael R. (miras)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich, das ist ne gute Idee, den zweiten Timer garnicht über den 
Interrupt-Handler laufen zu lassen. <andiestirnklatsch> Mensch, da hätt 
ich auch selbst draufkommen können. ;) Danke für den nötigen 
Denkanstoss.

Jens, das Problem ist dabei aber doch, dass der ATmega32 nur zwei 
Interrupt-Leitungen hat, ich aber 12 benötigen würde. Oder hab ich da 
was falsch verstanden? (Ist mein erste AVR Projekt...)

Micha

Autor: w124Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mann könnte die signale zusammenfasse,
zb könnte man alle signale über jeweils einen c an ein r legen und über 
dem r messen, gib es dort eine positive flanke, so muss man jetzt nur 
noch schauen welcher pin sich geändert hat. vieleicht geht das auch mit 
einem ic, mir fällter aber spontan keins ein


Dennis

Autor: JensG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Michael R. (miras)

>Jens, das Problem ist dabei aber doch, dass der ATmega32 nur zwei
>Interrupt-Leitungen hat, ich aber 12 benötigen würde. Oder hab ich da
>was falsch verstanden? (Ist mein erste AVR Projekt...)

Da hast Du leider recht ;-)

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.