Hi an alle. Ich möchte in einer If Verzweigung einen Sekunden-Zähler aktivieren und im Else Zweig den Sekunden-Zähler beenden. Es soll die vergangene Zeit zwischen Start und Stop gemessen werden. Aber wie implementiere ich das mit meinem atmega168? Ich schreibe in ANSI C. Vielleicht kann mir da jemand weiterhelfen? Es sollte in etwa so aussehen(Pseudocode): while(1) { if (Bedingung = Ja) { initialisiere_timer(); start_timer(); // do something } else { stop_timer(); } // Ausgabe timer_wert } Vielen Dank.
Versuchs mal so:
1 | uint8_t count=0, counter_started=0; |
2 | |
3 | int main(void) |
4 | {
|
5 | initialisiere_timer(); |
6 | while(42) { |
7 | if (count==1 && counter_started == 0) |
8 | {
|
9 | start_timer(); |
10 | counter_started = 1; |
11 | }
|
12 | else if (count==0 && counter_started == 1) |
13 | {
|
14 | stop_timer(); |
15 | counter_started = 0; |
16 | // Ausgabe timer_wert
|
17 | }
|
18 | |
19 | // Mach was Anderes, was z.B. count manipuliert
|
20 | // wenn count=1 dann wird gezählt
|
21 | // wenn count=0 dann wird aufgehört und das Zählergebnis ausgegeben
|
22 | }
|
23 | }
|
Danke für deine Rückmeldung. Die Funktionen start_timer stop_timer und initialisiere_timer sind bei nur noch leer und ohne Funktion. Wie muss ich diese befüllen damit sie das tun was sie tun sollen? Und in welchem Wert oder Register versteckt sich dann der Zaehlwert? Müssen irgendwo im Quellcode noch weitere Codezeilen hinzugefügt werden damit der Timer funktioniert? Aktivierung des entsprechendes Register.
El Nino schrieb: > Wie muss ich diese befüllen damit sie das tun was sie tun sollen? Mit initialisiere_timer sorgst du dafür, dass z.B. ein Timer als Zeitbasis läuft, mit start_timer liest du die Startzeit ab und merkst sie dir in einer Variable, mit stop_timer liest du die Stopzeit ab und berechnest die Differenz.
Wolfgang schrieb: > Mit initialisiere_timer sorgst du dafür, dass z.B. ein Timer als > Zeitbasis läuft, mit start_timer liest du die Startzeit ab und merkst > sie dir in einer Variable, mit stop_timer liest du die Stopzeit ab und > berechnest die Differenz. Was die Funktionen machen sollen ist mir schon klar. Ich weiss aber nicht wie ich diese Funktionen befüllen soll. Oder sind das vorgefertigte AVR Funktionen? Der obrige Code wird wohl kaum funktionieren, wenn die Funktionen start_timer, stop_timer weder definiert und noch befüllt sind. Oder bin ich da auf dem Holzweg?
El Nino schrieb: > Oder sind das vorgefertigte AVR Funktionen? Nein, da mußt du für die Initialisierung nach Datenblatt die Vorteiler und Timerregister z.B. vom Timer1 passend zu deiner geforderten Zeitauflösung setzen, dafür sorgen, dass z.B. bei einem Timerüberlauf per Interrupt in einem Register die Überläufe gezählt werden und den Interrupt freigeben. In start_timer bzw. stop_timer liest du dann den Timerwert und die Variable mit dem Überlaufzähler aus. Für die Initialisierung findest du hier im Forum genug Beispiele, z.B. bei diversen Uhrenprojekten. Eine genaue 1s-Zeitbasis hat z.B. Peter D. realisiert Beitrag "Die genaue Sekunde / RTC"
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.