mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zeitmessung zwischen 2 zuständen


Autor: mk2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mk2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
if ( (x==0) && (x_old != 0)  )
{
  TCCR1x = (1<<CS00); //Timer Start
}
if ( (x==1) && (x_old != 1)  )
{
  TCCR1x = 0;       // Timer Stopp
  benZeit = TCNT;   // Zeit holen
}
x_old = x;

Autor: mk2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
Da ich mich mit dem Thema Timer nicht gut auskenne, kannst du mir noch 
sagen wie ich overflows abfangen kann?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.