mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer als Stopuhr geeignet Atmega?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sina A. (sinapse)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Hallo,

ist der Timer1 auf dem Atmega328P überhaupt als Stopuhr geeignet.

wollte den timer mit setzen der CSC bits starten (Auswahl der clock 
source). und dann beim Interrupt im CTC mode (compare match OCR1A 
Register) wieder stoppen (CSC bits alle wieder auf null).

aber irgendwie sind die Timings versaut... sprich beim ersten Interrupt 
nach dem start braucht der timer irgendwie mehr zeit zum hochfahren?

wenn ich den timer laufen lasse (ohne stop wird der Interrupt immer 
wieder getriggert) kommen die Interrupts alle sauber im richtigen 
Timing. Nur direkt nach dem start braucht der irgendwie länger???


stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten? 
womit baue ich dann eine saubere stopuhr?

lg

Autor: Wolfgang (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Sina A. schrieb:
> stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten?
> womit baue ich dann eine saubere stopuhr?

Das kommt drauf an, wie lange Zeiten du messen möchtest, welche 
Auflösung du brauchst und wie genau die Zeitmessung sein soll.

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> nach dem start braucht der timer irgendwie mehr zeit zum hochfahren?

Irgendwie? Also gefühlt oder wie hast du das gemessen?

Sina A. schrieb:
> stimmt das? steht dazu irgendwo mehr im datenblatt wegen hochfahrzeiten?
> womit baue ich dann eine saubere stopuhr?

Nein, nein, so nicht.

Lass den Timer laufen und zähle im CTC-Int die Millisekunden. Was willst 
du denn überhaupt messen?

Autor: Sina A. (sinapse)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

muss ein pin auf high/low setzen und dann nach 5-500us wieder den pin 
togglen bzw. ein bit einlesen.

wollte das so machen:
-pin setzen
-timer counter TCNT=0 und OCRA=n setzen (n entspricht einem wert 
zwischen 5-500us)
-starten des timers per CSC bits setzen
-im compare match interrupt den timer stoppen und den pin togglen bzw. 
ein bit einlesen

gemessen hab ich das pin togglen mit dem oszi... die gemessenen zeiten 
haben immer einen unererwarteten wert. etwa 9 bis 16us zu lange.

wenn ich den timer nicht stoppe, sondern den interrupt immer wieder 
kommen lasse, ist die erste zeitperiode nach dem timerstart länger als 
die folgenden pin toggles.

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> wollte das so machen:

Nein!

Dein Freund heißt ICP. Das ist ein Eingangspin, der genau dafür da ist.

- Timer1 läuft dauerhaft im Normal Mode
- ICP auf steigende Flanke
- Im ersten Interrupt ICR Register merken und auf fallende Flanke 
umschalten
- Im zweiten Interrupt liefert dir ICR - Merkwert die exakte Anzahl der 
Takte, die du dann nur noch umrechnen musst.

- Zurück nach steigende Flanke für die nächste Messung.

Wenn es noch ein wenig schneller gehen soll, kannst du das Interrupt 
Flag auch in der Main pollen. Dann sparst du die Zeit für die 
IRQ-Aufrufe. Darfst natürlich währenddessen nichts anderes machen, also 
keine Interrupts.
Oder als Mittelding in der (ersten) IRQ auf das zweite Flag warten.

5µs ist zwar recht sportlich aber auch nicht unmöglich. Und zwar exakt 
und reproduzierbar.

Daß der Controller mit min. 16MHz, besser noch mit 20MHz läuft, sollte 
klar sein.

: Bearbeitet durch User
Autor: Sina A. (sinapse)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
hallo,

es handelt sich um ein 1wire bus... ich muss also nicht zeiten messen 
zwischen flanken, sondern im richtigen takt flanken generieren. oder im 
richtigen moment den 1wire lesen.

dazu ist der icp doch nicht geeignet?

nichts desto trotz war es mir neu, dass der timer beim start anscheinend 
ein bissl braucht um loszurennen. wär davon ausgegangen, dass die 
taktung mit setzen der CSC bits sofort loslegt und somit der timer 
keinen verzug haben duerfte

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sina A. schrieb:
> nichts desto trotz war es mir neu, dass der timer beim start anscheinend
> ein bissl braucht um loszurennen.
Warum möchtest du im Irrtum verharren?
Ich, an deiner Stelle, würde mir dabei reichlich ***** vorkommen.

Tipp:
> Wer in die falsche Richtung läuft,
> muss sich nicht beeilen.

Autor: m.n. (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sina A. schrieb:
> dass der timer beim start anscheinend
> ein bissl braucht um loszurennen.

Das ist jetzt aber keine Entdeckung von Dir, sondern eine reine 
Erfindung.

Sina A. schrieb:
> ich muss also nicht zeiten messen
> zwischen flanken, sondern im richtigen takt flanken generieren.

Das macht man dann mit der Output-Compare Funktion.
Sofern das bei Dir nicht klappt, liegt es sicherlich an Zeile 42.

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sina A. schrieb:
> dazu ist der icp doch nicht geeignet?

Sicherlich nicht. Aber bis eben wolltest du noch eine Stoppuhr bauen.

Sina A. schrieb:
> nichts desto trotz war es mir neu

Das ist mir auch neu. Und jedem anderen auch. Wie du das hinkriegst, 
erschließt sich mir allerdings nicht. Aber da bin ich wohl auch nicht 
der einzige.

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.