Forum: Mikrocontroller und Digitale Elektronik Mega8 Timer Torzeitmessung


von baeri3 (Gast)


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

von Matthias (Gast)


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

von Andreas (Gast)


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.

von baeri3 (Gast)


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!

von baeri3 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.