www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 Timer Torzeitmessung


Autor: baeri3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne mit einem Mega8 eine Torzeitmessung vornehmen.
Dabei möchte ich Ferquenz von 1KHz oder ca. 2Khz messen.

Dazu sollte man ja mit einem Timer ein Torzeit generieren,
und dann mit dem zweiten die Impulse "zählen". Ich habe dabei
an eine Torzeit von 10ms gedacht, dann kann ich in einer Sekunde
ca. 100 Auswertungen vornehmen. Bei 1ms fällt bei 1KHz ja nur noch ein
Impuls an, das ist dann schon ein wenig ungenau.. ;-)

Kann mir jemand Tipps dazu geben? Bin mit den AVR's noch nicht so
vertraut. Habe aber inzwischen rausgefunden, dass ich auf alle Fälle
die  sc0,sc1,sc2  register setzen muss, für Externen Interrupt.

Wie definiere ich dann die Torzeit und die Interrupt einsprung
marken?

Das ganze soll wenn es fertig ist zur Datenübertragung mit
Handelsüblichen CB-Funk Geräten mit o.Ä. dienen. Generiere mit einem
Mega8 schon die Töne und setze Sie auf der Empfangsseite am Seaker
Ausgang des Funkgerätes mit einem OpAmp als Schmitt-Trigger wieder
in "saubere" Rechteck Signale um.

Wäre super, wenn mir jemand weiter helfen könnte

baeri3

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
kanst du das nicht einfach so machen?

Timer 0 mit prescaler 1/64 = Timer zählt alle 8µs um eins hoch.

Timer bei steigender flanke starten und bei der nächsten steigenden
flanke anhalten. Impulse auswerten usw..

die minimale freqenz wäre hier ca 500Hz. Ist halt die frage ob dir eine
genauigkeit von 8µs ausreicht..

Gruß Matthias

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Weiss nicht ob ich dein Problem ganz verstanden hab. Aber ich denke,
dass es auf diese Art am besten geht:
Signale mit dem ICP1 interrupt zählen. Bei Auftritt des Interrupts wird
der aktuelle Stand von Timer1 Counter ins ICR kopiert (das macht der
atmega selbständig - somit ist das schrecklich genau weil keine
Verzögerungen durch den Aufruf der INTERRUPT SERVICE ROUTINE
auftreten). der ICR Wird abgelegt und beim nächsten auftritt des ICP1
Interrupts mit dem zuvor abgelegten Wert verglichen. Wird kein Teiler
für Timer1 verwendet, so bekommst Du den Zeitunterschied zwischen den
zwei Signalen ganz genau in den dazwischen erfolgten CPU-cycles.
Genauer gehts nicht. Hoffe das hilft.

Autor: baeri3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm.. nen Code Schnipsel dazu hat niemand zufälliger weise rum
fahren? .. 8µs auflosung würden mir schon reichen, und auch der zweite
vorschlag, mit ca. 500Hz als min. Frequenz. wäre akzeptabel!

Autor: baeri3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

habe nun endlich mal wieder ein wenig Zeit zum Basteln.. ;-)
Leider komme ich mit den ganzen Bit's die ich da setzen sollte
nicht ganz zurecht... Habt ihr evt. doch noch ein Code
Schnipsel rumliegen?

big thx

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.