Hallo, Ich verwende einen ATMega2561. Programmierung mit C. Ich habe eine Variable die nach bestimmten Zeitabständen zwischen 0 und 1 pendelt. Ich möchte nun mit einem Timer die Zeit ermittelt bei dem die Variable den Zustand 1 hat. Die Zeit soll dann bei jedem stop des Timers, ausgegeben werden. Würde mich sehr über Lösungsansätze oder gar ganze Codes freuen.
Verbinde eine Portleitung mit dem ICP.Immer, wenn die Variable 1 wird, setze die Portleitung, ist sie 0, kannst du das Register auslesen, verarbeiten und löschen. Bedeutet aber, dass jedesmal, wo sich die Variable ändern kann, auch die Prüfung stattfinden muss. MW
danke für deine Antwort, aber ich möchte das irgendwie so realisieren: x Pendelt zwischen 0 und 1 in verschiedenen Zeitabständen Pseudo: if(x==0) { Timmer soll starten } else { Timer soll stoppen und wert ausgeben } Meine Frage ist, wie kann ich machen das z.b. jede sekunde ein Interrupt ausgelöst wird, und dann die aufgetretenen Interrupts gezählt werden und in eine Zeit umgewandelt werden? also die Zeit bei der x= 0 ist. mein cpu takt ist 14,xxx Megaherz mfg mk2
Naja, hier schreibst du jetzt Code rein, damit der 16bit Timer läuft. TCCRx = (1<<CS00) (so etwa) läuft mit Quartztakt. Stoppen kannst du ihn mit: TCCRx = 0; Danach kannst du TCNT auswerten. Beachte: Beim Start sollte TCNT=0 gesetzt werden. Evtl Überläufe sind per Overflow abzufangen.
1 | if ( (x==0) && (x_old != 0) ) |
2 | {
|
3 | TCCR1x = (1<<CS00); //Timer Start |
4 | }
|
5 | if ( (x==1) && (x_old != 1) ) |
6 | {
|
7 | TCCR1x = 0; // Timer Stopp |
8 | benZeit = TCNT; // Zeit holen |
9 | }
|
10 | x_old = x; |
Vielen Dank! Da ich mich mit dem Thema Timer nicht gut auskenne, kannst du mir noch sagen wie ich overflows abfangen kann?
>Thema Timer nicht gut auskenne
Lies es dir in Ruhe und ausführlich durch. Danach erkläre ich dir das
bei konkreten Fragen.
Zum Thema Überlauf: Timer1 Overflow (Interupt)
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.