Forum: Mikrocontroller und Digitale Elektronik Inpute Capture reale Funktionsweise


von Hagen (Gast)


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

von Herbert von Caravan (Gast)


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)

von Karl H. (kbuchegg)


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?

von Thilo M. (Gast)


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?

von Hagen R. (hagen)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.