www.mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik Rechteckspannung messen


Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex1 (Gast)
Datum:

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

Alex

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi (Gast)
Datum:

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

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.