Mit Timer1 Impulszeit messen

OP #2333741
Lesenswert?

Hallo,
ich habe hier mal wieder ein Problemchen. Also, ich möchte die
High-Zeit eines Rechtecksignales mit Hilfe des Timer1 messen.
Als Eingang benutze ich PORT D2 (Mega88 Int0, natürlich in
Assembler).
Bei ansteigender Flanke möchte ich Timer1 starten, den Interrupt
auf fallende Flanke umschalten, wenn diese dann kommt den Timer
anhalten, auslesen Flanke nochmal auf ansteigende umstellen.
Irgendwo ist da der Wurm drin, das hat mit der Impulszeit wenig zu
tun eher mit Lottozahlengenerator.
Kann da mal einer, der mehr Ahnung hat als ich, nachsehen.


Gruß
Angehängte Dateien:
#2333786
Lesenswert?

J. S. schrieb:
> Hallo Karl Heinz,
> das hat vor dem Rücksichern von sreg gestanden, hat aber keine
> Veränderung gebracht da hab ich es wieder raus geschmissen.

Ach? Wird das Programmieren durch Versuch und Irrtum? Wir verändern das 
Programm wahllos und zufällig ohne zu wissen was wir tun und ohne Plan 
wie es eigentlich funktionieren sollte.

Dann lass dir gesagt sein: Das funktioniert nicht.
OP #2333800
Lesenswert?

Mir ist schon klar, das du da weiter bist als ich. Ich Versuche
da im Selbststudium mit Literatur die mehr schlecht als recht
ist weiter zu kommen, da probiert man halt so manches. Ob das
bei genauerer Betrachtung durch einen wissenden dann noch Sinn
macht, oft nicht. Aber habe etwas Geduld mit einem Hardwaremenschen,
der kann es noch nicht besser. Aber ist gewillt zu lernen.

Gruß
#2333811
Lesenswert?

Na ja überleg doch einfach.

Wenn du die zeitlichen Abstände zwischen Autos messen sollst, dann hast 
du 2 Möglichkeiten
* entweder du lässt deien Uhr durchlaufen und ziehst von jeder 
gemessenen Zeit immer die Zeit der letzten Messung unmittelbar davor ab 
um so auf die Differenz zwischen 2 Autos zu kommen
* oder aber du stellst nach jeder Messung deine Stoppuhr wieder auf 0 
zurück


In dem Fall ist es dir doch auch sonnenklar, dass die Stoppuhr auf 0 
zurückgestellt werden muss oder zumindest eine spezielle Behandlung 
braucht (Differenzbildung). Warum soll das in einem µC anders sein? Dein 
µC macht und kann genau dasselbe wie du auch. Nur eben scheller.

Welche Pulse misst du denn überhaupt? Welches ist dein Erwarungswert, 
was bei der Messung rauskommen müsste?
OP #2333869
Lesenswert?

Du, genau so kommt mich das vor. Ich habe hier eine Routine
geschrieben mit der ich den Impulswert auf einem Display
angezeigt bekomme. Wenn ich den Wert aus TCNT1 auslese und
so abspeichere wie du das da siehst also in IMP_Lang laufen die
Zahlen halt durch, als ob dem Timer das stoppen und zurücksetzen
egal wäre. Zur Kontrolle habe ich in IMP_Lang einfach mal 800
eingeladen, die werden dann auch so angezeigt. Es liegt hier einzig
und alleine an meiner "Super" Routine für den Timer auszulesen
und dann richtig zurückzusetzen.
OP #2335519
Lesenswert?

J. S. schrieb:
> Für den Mega88 natürlich das Register EICRA und nicht MCUCR. Nach der
> Änderung laufen die Zahlen auch nicht mehr durch, da findet nun
> überhaupt keine Auslösung des Interrupt mehr statt.

Nach dem ändern der Register und dem löschen der zugehörigen Flag
läuft das Ding auch, mit einer Genauigkeit die ich so nicht vermutet
hätte. Also, läuft alles so wie es soll.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren