Forum: Analoge Elektronik und Schaltungstechnik Rechteckspannung messen


von Karlheinz Druschel (Gast)


Lesenswert?

Hi Leuts,
ich stehe hier vor folgendem Problem: Ich muß mit einem ATmega16 ein
Einganssignal testen, welches drei Zustände annehemen kann:
0, 1, Rechtecksignal (4Hz).
Wie kann ich testen ob das Rechtecksignal anliegt ? Normalerweise würde
ich sagen, aufgrund der taktfrequenz von 4 MHz die Programmlaufzeit
ermitteln und dann immer in Signalmitte auf 0 und 1 testen, also ob das
Signal schön regelmäßig wechselt...
Aber vielleicht gibts da ja noch irgendwie einen trick um das zu
vereinfachen ?

Greetings
Karlheinz

von Alex1 (Gast)


Lesenswert?

Hallo!
Du kannst das Signal noch an einen externen INT haengen und so auch
sehen, ob gerade das Rechtecksignal anliegt.

Alex

von Benedikt (Gast)


Lesenswert?

Oder wenn das ganze Harwaremäßig erfolgen soll:
Ein Hochpass, dann eine Diode: Liegt eine Spannung dauerhaft an:
Wechselspannung, ist es 0, dann Signal überprüfen ob es 0 oder 1 ist.

von Andy (Gast)


Lesenswert?

Hallo

Ich würde auch die Variante mit dem Interrupt bevorzugen. Du könntest
einfach einen Timer laufen lassen und immer beim Interrupt auslesen,
mit dem vorherigen Ergebnis vergleichen und den Timer zurücksetzen.

Andy

von Michael (Gast)


Lesenswert?

@ Andy
dann müstest du im interrupt nach high oder low abfragen und dann den
interrupt level umdrehen. wenn die schaltungsperipherie das zuläßt,
würde ich zwei ext. ints nehmen, einen auf high-trigger einstellen und
einen auf low. aber, bei einer frequenz von max. 4 hz kann das auch die
software.
Michael

von crazy horse (Gast)


Lesenswert?

oder mit dem Timer1, Signal an ICP, OCRx auf einen Wert oberhalb der
Periodendauer. Ein ICP-Int setzt den Timer zurück, Zustand des Signals:
4Hz liegen an. In der OCR-Routine wird ebenfalls der Timer zurückgesetzt
und PIND.6 abgefragt. Kommt der OCR-Int, heisst das, die 4Hz liegen
nicht an, PIND.6 gibt AUfschluss über den Zustand.

von Tobi (Gast)


Lesenswert?

was denn nu: 4hz oder 4mhz? das wird hier so alles durcheinaner
verwendet

von MNR (Gast)


Lesenswert?

4Hz hat das Signal, 4MHz der AVR. Was vertstehst du daran nicht?

Bei so langsamen Signalen würde ich keinen Int benutzen. Was ist, wenn
eine Störung über die Leitung kommt? Dann funzts mit Int nicht! Besser
ist hier Polling. Man zählt die abgetasteten Werte, und innerhalb eines
Bereichs kann man dann Aussagen über den Zustand des Signals machen. Das
filtert Störungen sehr zuverlässig aus!

So long,
Matthias

von Uwe Nagel (Gast)


Lesenswert?

Sicher hast Du irgendeinen Timerinterrupt sowieso am laufen, oder?
Sagen wir Du hast einen mit 100 Hz, dann würde ich einen Zähler bis auf
Null runterzählen lassen, der bei einer Signalflanke auf einen Startwert
von >=13 gesetzt wird. Liegt ein Rechteck an, wird der Zähler nie Null.

Umgekehrter Schluss: ist der Zähler nicht Null haben wir Rechteck, ist
er Null haben wir den Pegel, der am Pin anliegt.
Ob man die Flankenerkennung im Interrupt macht oder durch Polling,
hängt davon ab, ob das Programm in seiner Hauptschleife oft genug an
der Portabfrage vorbeikommt. Sonst könnte der Zähler einfach deshalb
Null werden, weil das Programm eine Flanke verschlafen hat.

von MNR (Gast)


Lesenswert?

Mit int meinte ich externen int, wie oben vorgeschlagen. Natürlich müßte
man das Polling über einen Timer mit interruptsteuerung realisieren.

Gruß Matthias

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.