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
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)
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.