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.
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
@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
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.
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.