zeitmessung zwischen 2 zuständen

Gast #795428
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.
Gast #795480
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
Gast #795560
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
Gast #795587
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;
Gast #795610
>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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.