FS20 Sendemodul mit Arduino Duemilanove ansteuern

So ich bin es mal wieder! Da ich besonders in der Hardwaretechnik noch ein Neuling bin, wollte ich fragen, wie ich das FS20 Sendemodul am besten am Arduino anschließe!

Für den Dateneingang brauche ich 0 - 3 V! Jedoch liegen an den Ausgängen ja 5 V an. Wäre eine Lösung über einen Spannungsteiler zu empfehlen? Eine Stromsparende Idee wäre in diesem Fall am besten. Am Arduino Board werden Frequenzen von fmax = 5kHZ an den Ausgang übergeben.
Vielen Dank schon mal!

Hallo Dollhouse31
Spannungsteiler. 5V auf 3V
Zu bemessung der Spannungsteiler wählt man: Strom über den Spannungsteilser soll 10 mal größer sein als der Strom der bei der Mittelanzapfung herausfließt.


|
R1
|
----- I out
|
R2
|

Strom durche R2 = 10 * Iout.

Grüße Uwe

Okay, soweit ist das klar! Also berechne ich mir den Lastwiederstand RL mit den gegebenen Daten (Strom und 3V) aus:
http://www.elv-downloads.de/service/manuals/TX868_75/TX868_75_UM_G_080519.pdf

Und damit kann ich dann R2 = 10 * RL bestimmen.
Jedoch muss ich dabei den Tastgrad wählen! muss ich für eine Fs20 anwendung 28mA (Tastgrad 100%) oder 14mA (Tastgrad 50% wählen).
Jenachdem wie ich den Tastgrad wähle, was muss ich dann bei ansteuerung des Dateneingangs beachten?

Du mußt nicht den Strom des Moduls sondern den Strom des RX Eingangs nehmen.
Grüße Uwe

Mhh und wie kann ich den bestimmen?
Muss ich den innenwiederstand messen?

Eingangswiderstand wirst Du nicht messen können.
Nimm mal einen Wert zwischen 100Kohm und 1Mohm an.
Du könntest den Eingangsstrom messen. Einfach modul mit versorgungspannung verbinden und mit µAmeter zwischn Eingang und Masse bzw 3V messen.
Grüße Uwe

Hallo Dollhouse31,
bist du weiter gekommen mit dem Sender FS20.
Als Widerstände habe ich 10k und 15k genommen - geht
Bin neugierig
maximat

Hallo maximat,

ich habe einfach die Lösung durch eine Z-Diode gewählt.
Hatte funktioniert!

Gruß Marco

Hallo Marco, die Idee mit der Zehnerdiode finde ich gut. Ich krieg es einfach nicht hin, den ELV-Empfänger zu lesen, es rauscht so, dass ich keine Daten herausfiltern kann, wie hast du das gemacht?
Gruß Klaus (maximat)

Hey Klaus,

ich musste auch feststellen, dass der Empfang sehr mit Rauschen unterlegt ist! Habe mir das mal mit dem Logic-Port angesehen!

gesendete Daten scheinen das Rauschen zu überlagern! Liegt bestimmt am Pegel der am Empfänger ausgewertet wird! Bin jetzt aber auch nicht so der analogtechniker;)
Also wenn ich dann mit einer fs20 Fernbedienung sende, kann ich das fs20 Protokoll wunderbar raus lesen! Dort ist nichts vertauscht!
Google mal nach dem fs20 Protokoll;-)

Mittels eines flankengesteuerten interrupts (Change) messe ich dann die impulsdauer für high bzw. low und prüfe, ob es sich um ein fs20 informationsbit handelt! Empfange ich den synchronisationsblock (ohne verrauschte Bits dazwischen) handelt es sich um ein fs20 Protokoll und lese Bit für Bit in die entsprechenden Daten ein!
Wenn du dir ein eigenes Protokoll überlegst, würde ich auch über eine Auswertung über die impulsdauer gehen, damit du einiges an Rauschen rausfiltern kannst, wenn du nichts sendest!
Ich hoffe, dass war deine Frage!?

Gruß Marco

Hy Marco, vielen Dank, bei mir läuft die Schleife mit den externen Interrupts pausenlos durch und zeigt einen unregelmäßigen Wechsel von 0 + 1 an.
Ich komme garnicht dazu eine Dauer zu messen. Hast du dein Programm noch?
Es könnte ja sein, dass es doch an den Pegeln liegt - ich werde mir mal ein 3,3 Volt Bord besorgen
Grüße von Klaus

Diesen Pegelwechsel hast du andauernd, liegt am Rauschen! Du musst die Zeitdifferenz zwischen den beiden interrupts messen und schauen ob es sich bei einem high impuls um ein mögliches fs20 Bit handeln könnte! Anschliessend den low Impuls auswerten und schauen, ob er dazu passt!
Wie schon gesagt, guck dir mal das fs20 Protokoll an. Passt die high und die anschliessende low Impulsdauer kann es sich dann um ein fs20 Bit handeln!
http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol

Fs20 0 = 400us high und 400us low
Fs20 1 = 600us high und 600us low
Denk an die Toleranzen, die auf der URL angegeben sind!

Jetzt schreib dir einen Algorithmus der den synchroniserungsblock ermitteln kann! 12 * fs20 0 und 1 * fs20 1
Falls du ein arduino nutzt kannst du mit der Funktion micros() die systemlaufzeit ermitteln! Alte und neue Zeit von zwei interrupts ergibt Zeitdifferenz!

Den Code hätte ich zurnot auch noch!:wink:

Hi Klaus, wollte mal ne Rückmeldung haben!
Hast du es hinbekommen?
Gruß Marco