www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Inpute Capture reale Funktionsweise


Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich arbeite zZ. mit ATmega168 und will den ICP benutzen. Dabei bin ich 
auf eine Diskrepanz zum Datenblatt gestoßen und falle so langsam vom 
Glauben ab.

Laut Datenblatt:

"The Input Capture is updated with the counter (TCNT1) value each time 
an event occurs on the ICP1 pin..."

Das heist, wenn am ICP1 Pin laut eingestellter Edge ein Event auftritt 
dann kopiert die Hardware den TNCT1 Wert in das ICR1 Register.

Nun das ist falsch.

Mein Timer1 läuft permanet durch. Ich habe den ICP IQR aktiviert und in 
dieser ISR setze ich ICR1 auf 0. Beim nächsten Event steht dann im ICR1 
nur die Differenz in Takten und nicht der Timer1 TCNT1 Wert drinnen !

Das bedeutet, das ICR1 register wird synchron zum TCNT1 getaktet bis ein 
ICP Event auftritt. So würde ich diese Arbeitsweise interpretieren.

Testweise natürlich mal schnell in der ISR den ICR1 statt auf 0x0000 mal 
auf 0xF000 gesetzt, und siehe da beim nächsten Event steht im ICR1 
0xF000 + X als Wert drinnen. Also eine Relativmessung und nicht den 
TCNT1 Wert übernommen, so wie im Datenblatt beschrieben.

Irgendjemand hier der eine Aussage treffen kann ?

Gruß Hagen

Autor: Herbert von Caravan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte hier manche "Ratgeber" in Erklärungsnot bringen. Nach der 
Methode:"Guck gefälligst in's Datenblatt, bevor Du hier eine Frage 
stellst!"

(Herbert von Caravan erigiert die Regensburger Kondomfratzen)

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

Bewertung
0 lesenswert
nicht lesenswert
Zeig mal das Program.

> Das dürfte hier manche "Ratgeber" in Erklärungsnot bringen.

So schlimm ist das nun auch wieder nicht.
Im Regelfall lässt man ja das ICR in Ruhe
und vergreift sich nicht daran.

Interessant ist das aber trotzdem allemal. Aber warum
soll Atmel im Datenblatt verschweigen, dass ICR in
Wirklichkeit selbst ein Counter ist?

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist der Teiler vom Timer1 denn eingestellt?
Wennn der auf x1 ist werden logischerweise die Taktzyklen übernommen 
(aber vom TCNT1).
Wie oft läuft dein Timer1 zwischen zwei IC-Events über?

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergesst es, ist ein total blöder Fehler meinerseits.

Ich wechsle in der ISR die Flanke auf den der ICP triggern soll. Man muß 
danach im TIFR1 Register das ICF1 Bit explizit löschen.

Jetzt geht es wie es soll, auch wenn ich ICR1 auf 0 setze wird beim 
nächsten Event der TCNT1 Wert dort hinein kopiert. Zähle also wieder zu 
den Datenblatt-Gläubigen ;)

Gruß Hagen

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.