Forum: Mikrocontroller und Digitale Elektronik Messung eines rechteckigen Signals


von John Konj (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich hoffe jemand kann mir bei der Lösung meines Problems helfen. Also 
worum es geht:
Ich muss mit einem Interrupt ein rechteckiges Signal messen. D.h. ich 
muss die Zeit von Rising bis Reising messen was ich auch geschaft habe, 
aber wie kann ich mit dem selben Innterrupt die Zeit von Rising bis 
Falling messen, dazu muss ich sagen das rechteckige Signal ändert 
anderauernd die Periodendauer, das Signal wird nicht negativ es wird nur 
1 und 0 und da wo es 1 wird, die Zeit muss ich auch mit dem selben 
Interrupt messen das heißt von Rising bis Falling, die Zeit soll man 
einfach bei der Flanke Falling ablessen und als Past in einem Hyper 
Terminal schreiben werden.

Ich hoffe ich habe mich deutlich ausgedruckt und jemand kann mir helfen, 
und es ist dringend.
Schöne größe an jeden.

von John Konj (Gast)


Angehängte Dateien:

Lesenswert?

Sorry Leute hab nicht aufgepast und das falsche Program mitangehägt hier 
ist das richtige was ich gemacht habe.

von Xpost (Gast)


Lesenswert?


von Harald H. (hhoopi)


Lesenswert?

Hallo,
Ich denke, Du machst das Ganze mit einem ATMega32?
Wenn ja, sollte es kein Problem sein, da der INT0, sowie der INT1 auf 
Interrupt bei logischem Wechsel des Pins gesetzt werden können. Damit 
kann man sehr hervorragend genaue Ereignisse messen, indem man z.B. bei 
High-Flanke einen Zähler startet (Timer2 wird immer gerne genommen) und 
diesen bei der Low-Flanke ausliest. Sollte der Timer überlaufen, kann 
man dessen Interrupt nutzen, um eine Variable im Speicher hochzuzählen. 
Kommt irgendwann die Low-Flanke doch noch, nimmt man die Variable mal 
Timer-Wert plus Rest des Timers und hat die genaue Zeit. Für die Zeit 
zwischen Low- und High-Flanke gilt dasselbe. Der Interrupt löst bei 
jeder Flanke aus (wenn so eingestellt). Wichtig bei genauen 
Zeitmessungen ist die Addition der Ausführungszeiten des Prozessors 
(Laden des Timers, Berechnung der Gesamtzeit usw.). Diese, auch wenn 
kleinen Zeiten sollte man nicht vernachlässigen.

Da Du das Ganze mit Basic machst, sollte Dein Eingang nicht auf 
Rising-Interrupt, sondern auf "Config Int1 = Falling/ Rising" setzen. 
Habe ich zumindest gelesen. Ich kenne mich mit Bascom nicht aus. Wenn es 
nicht klappt, sollte man diese Einstellung in Assemler einfügen.

Gruß
hhoopi

von John Konj (Gast)


Lesenswert?

Kannst du mir vielleicht eine vorgabe geben wie ich das bewergstelligen 
kann?
Also besser gesagt wie ich das in Bascom schreiben soll

von Harald H. (hhoopi)


Lesenswert?

Hallo,
Genau das ist mein Problem. Ih kenne mich in Bascom leider nicht aus, 
programmiere fast ausschließlich in C. Es gibt aber jede Menge Foren, 
die sich mit Bascom beschäftigen. Hier z.B. http://www.bascom-forum.de/ 
oder auf http://www.roboternetz.de solltest Du Dich mal umsehen.
Gruß
hhoopi

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.