PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Infrarotübertragung (protokoll?)



mabuhay
01.01.2006, 22:01
Hallo

Ich möchte eine Infrarotübertragung aufbauen. Die Empfänger der beiden Schaltungen sind Empfängermodule für 33kHz.
Was für ein Protokoll verwende ich am besten, damit ich beim Empfänger sehe ob eine 1 oder eine 0 gesendet wurde?

[edit]
um meine Frage etwas zu Präzisieren:
Ich habe auf der Sprut-Homepage den Code für die RC-5 Fernbedienung gefunden. Der Codeschnipsel für das Senden der Bits:


; Senden einer 0 (on-off)
TxNull
call LichtAn ;2T
call LichtAus ;2T
return ;2T

;************************************************* ***************************
; Senden einer 1 (off-on)
TxEins
call LichtAus
call LichtAn
return


Wie kann ich nun den Unterschied herausfinden?
Bsp:
ich will 11001100 Senden:
-> ab - an, ab - an, an - ab, an - ab, ...
Hier wird es ziehmlich schwierig, den Unterschied herauszufinden

Gibt es also ein Anderes Einfaches Protokoll, oder wie machen die Empfänger der Fernbedienungen die Unterscheidung?

mfg

stegr
02.01.2006, 01:53
Wenn du zu niemandem kompatibel sein musst, kannst du dir dein Protokoll so überlegen, wie es dir am geschicktesten erscheint.

Bei deinem Beispiel wirst du im wesentlichen eine Flankenerkennung machen, d.h. du tastest ab und vergleichst den Wert davor mit dem aktuellen Wert. Das ganze musst du aber im richtigen Takt machen und optimalerweise aufsynchronisieren.
Alternativ könntest du das Signal direkt codieren und mit Start- und Stopsequenzen schaffen, d.h. an ist ne Eins, aus ne Null - wenn du ein Byte übertragen willst, schickst du z.B. über 2 Zeitabschnitte eine Eins-Signal, daram kann der Empfänger feststellen, dass du etwas senden willst, dann schickst du deine Daten, und nach dem Byte nochmal zwei Einsen, damit du erkennst, dass die Daten vorbei sind.
Du kannst auch die Start- und Stopbits weglassen, läufst aber dann Gefahr, dass irgendwas da rein stört und dann so tut als wäre es ein Bit.

Was auch sehr einfach ist: du verwendest zwei unterschiedlich lange An-Zeiten für 0 und 1, d.h. wenn du eine 0 übertragen willst, lässt du das Teil 5ms an und schaltest danach für 5ms aus. Wenn du eine 1 übertragen willst, lässt du dein IR-Modul für 10ms an und schaltest es danach für 5ms aus.
Auch hier helfen dir Start- und Stopsequenzen Übertragunssicherheit zu gewinnen.

Auf die Weise kannst du dir noch beliebige andere Verfahren ausdenken.

Das einzige, was du wirklich beachten musst, ist, wie deine Module angesteuert werden: die IR-Dioden könntest du mit einem PIC direkt schalten und könntest dann auch direkt übertragen - da du aber schreibst, dass deine Module bei 33kHz arbeiten, dürften die schon etwas an Elektronik enthalten, die die wesentliche Übertragung erledigt. Einfach mal ins Datenblatt schaun (oder statt der Module direkt die IR-Diode und nen Fototransistor verwenden).

MfG
Stefan

mabuhay
02.01.2006, 11:19
Also das mit den 33kHz hab ich schon hinbekommen. Das mach ich mit dem Timer0 welchen ich dann Ein- und Ausschalten kann.
Das mit den Unterschiedlichen An-Zeiten werde ich mal versuchen. Wird wohl das einfachste sein.
Ein kleines Problem ist nur noch, dass der Sendende PIC ein Digitales signal bekommt, und wenn er dann für jedes Bit das er bekommt 3 oder mehr Signale senden muss, die Kommunikation gebremst wird. Aber denke das genügt mal für den Anfang, das Optimieren kommt später ;)

Vielen Dank