Hallo, ist der Timer1 auf dem Atmega328P überhaupt als Stopuhr geeignet. wollte den timer mit setzen der CSC bits starten (Auswahl der clock source). und dann beim Interrupt im CTC mode (compare match OCR1A Register) wieder stoppen (CSC bits alle wieder auf null). aber irgendwie sind die Timings versaut... sprich beim ersten Interrupt nach dem start braucht der timer irgendwie mehr zeit zum hochfahren? wenn ich den timer laufen lasse (ohne stop wird der Interrupt immer wieder getriggert) kommen die Interrupts alle sauber im richtigen Timing. Nur direkt nach dem start braucht der irgendwie länger??? stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten? womit baue ich dann eine saubere stopuhr? lg
Sina A. schrieb: > stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten? > womit baue ich dann eine saubere stopuhr? Das kommt drauf an, wie lange Zeiten du messen möchtest, welche Auflösung du brauchst und wie genau die Zeitmessung sein soll.
Sina A. schrieb: > nach dem start braucht der timer irgendwie mehr zeit zum hochfahren? Irgendwie? Also gefühlt oder wie hast du das gemessen? Sina A. schrieb: > stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten? > womit baue ich dann eine saubere stopuhr? Nein, nein, so nicht. Lass den Timer laufen und zähle im CTC-Int die Millisekunden. Was willst du denn überhaupt messen?
Hallo, muss ein pin auf high/low setzen und dann nach 5-500us wieder den pin togglen bzw. ein bit einlesen. wollte das so machen: -pin setzen -timer counter TCNT=0 und OCRA=n setzen (n entspricht einem wert zwischen 5-500us) -starten des timers per CSC bits setzen -im compare match interrupt den timer stoppen und den pin togglen bzw. ein bit einlesen gemessen hab ich das pin togglen mit dem oszi... die gemessenen zeiten haben immer einen unererwarteten wert. etwa 9 bis 16us zu lange. wenn ich den timer nicht stoppe, sondern den interrupt immer wieder kommen lasse, ist die erste zeitperiode nach dem timerstart länger als die folgenden pin toggles.
Sina A. schrieb: > wollte das so machen: Nein! Dein Freund heißt ICP. Das ist ein Eingangspin, der genau dafür da ist. - Timer1 läuft dauerhaft im Normal Mode - ICP auf steigende Flanke - Im ersten Interrupt ICR Register merken und auf fallende Flanke umschalten - Im zweiten Interrupt liefert dir ICR - Merkwert die exakte Anzahl der Takte, die du dann nur noch umrechnen musst. - Zurück nach steigende Flanke für die nächste Messung. Wenn es noch ein wenig schneller gehen soll, kannst du das Interrupt Flag auch in der Main pollen. Dann sparst du die Zeit für die IRQ-Aufrufe. Darfst natürlich währenddessen nichts anderes machen, also keine Interrupts. Oder als Mittelding in der (ersten) IRQ auf das zweite Flag warten. 5µs ist zwar recht sportlich aber auch nicht unmöglich. Und zwar exakt und reproduzierbar. Daß der Controller mit min. 16MHz, besser noch mit 20MHz läuft, sollte klar sein.
:
Bearbeitet durch User
hallo, es handelt sich um ein 1wire bus... ich muss also nicht zeiten messen zwischen flanken, sondern im richtigen takt flanken generieren. oder im richtigen moment den 1wire lesen. dazu ist der icp doch nicht geeignet? nichts desto trotz war es mir neu, dass der timer beim start anscheinend ein bissl braucht um loszurennen. wär davon ausgegangen, dass die taktung mit setzen der CSC bits sofort loslegt und somit der timer keinen verzug haben duerfte
Sina A. schrieb: > nichts desto trotz war es mir neu, dass der timer beim start anscheinend > ein bissl braucht um loszurennen. Warum möchtest du im Irrtum verharren? Ich, an deiner Stelle, würde mir dabei reichlich ***** vorkommen. Tipp: > Wer in die falsche Richtung läuft, > muss sich nicht beeilen.
Sina A. schrieb: > dass der timer beim start anscheinend > ein bissl braucht um loszurennen. Das ist jetzt aber keine Entdeckung von Dir, sondern eine reine Erfindung. Sina A. schrieb: > ich muss also nicht zeiten messen > zwischen flanken, sondern im richtigen takt flanken generieren. Das macht man dann mit der Output-Compare Funktion. Sofern das bei Dir nicht klappt, liegt es sicherlich an Zeile 42.
Sina A. schrieb: > dazu ist der icp doch nicht geeignet? Sicherlich nicht. Aber bis eben wolltest du noch eine Stoppuhr bauen. Sina A. schrieb: > nichts desto trotz war es mir neu Das ist mir auch neu. Und jedem anderen auch. Wie du das hinkriegst, erschließt sich mir allerdings nicht. Aber da bin ich wohl auch nicht der einzige.
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.