www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Signal glätten; wie sinnvoll im Programm realisieren?


Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe einen Funkempänger (digitaler Ausgang) mit einem AVR
verbunden. An einem zweitem AVR ist ein entsprechender Sender
angeschlossen. Die Daten möchte ich mittels Manchesterkodierung
übertragen. Mein Problem ist jedoch dass der Empfänger Baustein recht
empfindlich ist und der Ausgang so auch schon mal bei dem Einschalten
einer Schreibtischlampe kurzzeitig auf high wechselt. Das
Ausgangssignal ist also nur im Mittelwert Low oder High.

Meine bisherige Idee: Mittels Timer Interrupt wird das Signal
regelmäßig abgefragt und jedes mal eine Variable A um eins erhöht.
Ist das Signal  high, so wird auch eine Variable B um eins erhöht.
Sobald A gleich fünf, wird nachgesehen ob B größer oder kleiner
zwei ist, also ob das Signal mehrheitlich low oder high war. Das
Resultat wird in eine Variable C geschoben und der Vorgang beginnt
von neuem.
C müsste dann ständig nach einem Startbit u.s.w. durchsucht werden.
Ich befürchte jedoch dass bei dieser Methode recht viel Rechenleistung
benötigt werden würde.

Würde meine Idee funktionieren oder gibt es hier eine besser Methode?
(Das Signal hängt am Analog Comparator Pin und somit könnte ein
Flankenwechsel auch direkt einen Interrupt auslösen).

Schon mal Danke im Voraus.

Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mich auch schon mal mit dem Thema Funkübertragung geschäfftigt.
Hab es dann aber hingeschmissen weil meine Übertragung nur bis auf 2m
ok war. Hab es mit dem selben verfahren gemacht wie du es beschieben
hast, da gibt oder gab es irgendwo eine Doku von einem Studenten der
dieses Verfahren beschrieben hat, und das ganze auch zum laufen
bekommen hat, naja bei mir lief es nicht! Weil die Störungen einfach zu
größ waren (ich glaube hier in der gegend hat irgendjemand so ein
scheiss Funkthermometer, denn auf dem Ozzi waren immer ein
Rechtecksignal zu erkennen). Vielleicht lag es auch einfach an meinem
Programm.
Es gibt aber auch Funkmodule die Signal gleich filtern und saubere
Digitale Signale ausgeben. Die Firma ist hier schon öfter im Forum
aufgetaucht, ist aus England und sind recht günstig! Easy Radio Moduls
heissen die Dinger glaube ich.
mfg

Autor: MSE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@michi:
>>ich glaube hier in der gegend hat irgendjemand so ein
>>scheiss Funkthermometer, denn auf dem Ozzi waren immer ein
>>Rechtecksignal zu erkennen)

Wenn Du ein 433 MHz-Funkthermometer meinst, dann wird es wohl kaum die
Ursache einer Dauerstörung sein. So ein Ding mißt alle paar Sekunden
oder gar Minuten (wenn nicht in noch viel größeren Abständen) mal einen
Wert und funkt ihn kurz zum Empfänger. Die meiste Zeit über herrscht
Funktstille.

Gruß, Michael

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist noch eine weitere Idee gekommen wie man die Daten glätten
könnte:
So eine Art digitale Hysterese. Ist bei dem Timer Interrupt das
Eingangssignal high, so wird eine Variable um eins erhöht, bei low wird
widerum abgezogen. Überschreitet die Variable einen bestimmten Wert
(z.B. 20), so gillt dies als High erkannt. Erst wenn die Variable
wieder z.B. 10 unterschreitet, so wird dies als Low erkannt. Minimum
und Maximum der Variable lägen dann beispielsweise bei 0 und 30.
Die Werte ließen sich dann so anpassen dass nur "echte" High und Low
Impulse erkannt werden.
Ich hoffe diese Methode ist deutlich besser geeignet.

@michi:
Ich habe von den Modulen gehört. Allerdings habe ich hardwaremäßig
schon c.a. 75% meiner Schaltung aufgebaut und ich würde ungerne von
vorne anfangen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich befürchte jedoch dass bei dieser Methode recht viel Rechenleistung

benötigt werden würde."

Da müßtest Du einfach mal die Impulslänge nennen.
Damit das Signal nicht zu sehr verfälscht wird, solltest Du mindestens
mit der 4-fachen Frequenz abtasten.

Das Zählprinzip ist schon richtig. Allerdings reicht ein Zähler aus,
der einfach immer hochzählt, aber rückgesetzt wird, wenn der Eingang
gleich dem internen enprellten Zustand ist. Und wenn der Zähler den
Entprellwert erreicht, kippt der interne Zustand um.

In dem Timerinterrupt kann dann gleich die Manchesterdekodierung
erfolgen.


Peter

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.