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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
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.
Gast
#2566967
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?
Gast
#2567012
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"
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.