PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Signalumwandlung beim Senden per Infrarot



RCO
18.07.2004, 00:01
Hallo Gemeinde, ich habe wieder eine Frage:
Ich ahbe vor eine infrarotübertragung zu bauen, die bytes senden kann, als Bsp. 10011001.
Ich habe mir nun Gedanken darüber gemcht, wie ich das Byte übertragen könnte. Meine Erste Idee ist folgende:
Eine 1 wird duch kurzes einschalten des Senders, eine 0 duch längeres Einschalten des Senders definiert, zwischen den zahlen befindet sich eine kurze Pause, um die CPU die länge des Signals zu errechnen und abzuspeichern, und um dien Länge überhaupt zu definieren.

Siehe dazu BILD 2!! (nicht 1)

Meine Zweite Idee ist folgende, um die Zeitliche länge des Signals zu verkürzen, lasse ich die Pausen zwischen den Zahlen weg.

Eine 1 ist ein langes, eine 0 ein kurzes Signal. Eine 1 kann sowohl durch langes einschalten, als auch langes ausschalten des Signals definiert werden.

Siehe dazu BILD 1!!

Natürlich habe ich auch einfach daran gedacht, das Byte einfach so zu übnertragen, also 1 = Siganl ein; 0 = Signal aus, aber was wäre z.B.: wenn ich ein Byte 00010000 habe, die CPU wüsste nciht, wo das Signal beginnt, bzw. wo es endet.
Mit einer Initialisierung z.B. 101 am Anfang un Ende zusätzlich, wäre dieses Problem gelöst, allerdings müsste ich sicherstellen, das die CPu den Eingang immer genau dann abfragt, wenn gerade gewechselt wurd, und da ich das nicht sicherstellen kann, gefällt mir die Idee nicht.

Wie geht es denn nun "normalerweise"?

Sorry, dass mein Titel vielleicht nicht so passend gewählt ist.

Danke für alle Antworten

RCO

Flite
18.07.2004, 10:53
Hallo!

Schau dir mal das Protokoll RC5 (Infrarotfernbedienungen von Philipps) an. Da findest du bestimmt ein paar interessate Ideen, wie du dein Protokoll gestalten / verbessern kannst.

Wichtig wäre, dass du die LED nicht dauernd anlässt, sondern sie z.B. mit 36kHz modulierst (also immer an und ausschaltest). Dann kannst du als Empfänger den TSOP1736 nehmen, der dir das Signal decodiert und schöne TTL Pegel liefert (du sparst dir also die ganze analoge Elektroknik um das Signal zu verstärken und hast gleich dazu noch die unempfinglichkeit gegenüber Tageslicht) ...

Viele Grüße
Flite

Trabukh
18.07.2004, 10:59
Du könntest auch das RC5-Protokoll missbrauchen. Ein bestimmtes Signal steht dann halt für eine 1, und ein anderes für eine 0. Schaltungen dafür findest du hier überall. Der Nachteil wäre dann halt die Geschwindkeit, aber ich weiß nicht genau, wie schnell das abläuft.

Gruß, Trabukh

Flite
18.07.2004, 11:14
Wenn es natürlich um Geschwindigkeit geht, dann kannst du auch mal das IRDA Protokoll durchschauen.

Das ist nichts anderes als ein UART (was ja fast jeder uC eingebaut hat) und ein externer Modulator (im einfachsten Fall ein NE555 mit Peripherie), der das Signal moduliert ...

Das ist dann von der Geschwindigkeit heua auch um einiges besser. Außerdem lässt sich die Fehlererkennung des UART auch gleich mit ausnutzen ...

Grüße
Flite

avatar
18.07.2004, 15:01
Eine ganz andere Möglichkeit wäre es, einen Modemchip für niedrige Baudrate (1200) zu nehmen. Dort sind Oszillatoren und Filter bereits drin, die das serielle Signal in Tonfrequenzen umsetzen und die Tonfrequenzen wieder in Logikpegel. Diese Tronfrequenzen müssten sich nicht nur mit dem Telefon sonderen auch mit Infrarot gut übertragen lassen. Vorteil: Wenn du einen Controller mit serieller Schnittstelle hast, kannst du den Modemchip einfach dort anschließen. Da die Übertragung im Sprachband stattfindet, kannst du sie sogar mit dem PC-Lautsprecher hörbar machen. Außerdem hast du stets eine Kontrolle ob die Verbindung zum Sender noch da ist, weil der Modemchip unterschiedliche Frequenzen für 0 und 1 verwendet. Du hast also auch in den Übertragungspausen stets ein Carrier-Signal (DCD) vom Modemchip. Der TSOP arbeitet dagegen nur mit einer Frequenz. Der Carrier selbst wird einfach ein- und ausgeschaltet.

Datenblätter von Modem-IC's http://www.cmlmicro.com
1200er Modem-ICs findest du in alten ausgedienten 1200-er Modem, Akustikkoppler , Faxgeräte, BTX-Geräte etc..

RCO
18.07.2004, 15:52
@ Flite:

Ja das mit dem Modulieren ist klar, ich hab einen empfänger, weis nicht genau welchen, aber hab einfach ein bisschen rumprobiert, bis ich ne passende Frequenz für den Sender hatte. Wenn die Diode sendet, gibt der Empfänger halt auch die ganze Zeit ne 1 aus.
Den TSOP wollte ich auch mal ausprobiern, aber versuch es erstmal mit meinem, der schafft problemlos nen par Meter.

Wieviel Strom sollte der Sender ungefähr ziehen? Meiner zeiht bei 5V ungefähr 50mA.

@ Trabukh:

Wo finde ich den diese Protokoll, und wie sieht es aus?

@ Flite: Was ist UART? den NE555 verwende ich zur zeit, und kann mit Hilfe eines Transistors, der Am Ausgang des MCs liegt den Sender ein/ausschalten.

@ Avatar:

Das ist mir gelube ich ein Wenig zu aufwendig, wollte das ganze möglichst vielfach und einfach bauen.

@ All:

Probleme habe ich immer noch mit dem Empfangprotokoll, wie sollte so ein progemm z.B. in Basic aussehen?

Danke für die Antworten.

Flite
18.07.2004, 16:09
Hallo RCO,

das UART ist die serielle Schnittstelle (wie RS232 - nur mit TTL Pegeln). Damit kannst du dann eine serielle Verbindung per Infrarot aufbauen, wenn du das Signal modulierst. Ist recht einfach und zudem noch kompatibel zu allen anderne IRDA Geräten. Google mal nach IRDA ...

Grüße
Flite

RCO
18.07.2004, 16:12
Danke, kannst du mir noch die 2 Fragen beantworten?

1. Wieviel Strom sollte der Sender ungefähr ziehen? Meiner zeiht bei 5V ungefähr 50mA.

2. Wo finde ich den diese Protokoll (RC5), und wie sieht es aus? Oder Informationen zu RC5?

Trabukh
18.07.2004, 16:14
RC5:
Der Empfänger könnte so gehen: https://www.roboternetz.de/phpBB2/viewtopic.php?t=812
Der Sender ist noch einfacher: Nimm ne IR-LED (z.B. LD274), häng nen Vorwiderstand dran und schließ das an einen Port an. Die nötige Frequenz wird in BASCOM softwareseitig erzeugt, in dem du den Befehl RC5SEND benutzt. Wenn du den Artikel vom Empfänger durchgelesen hat, wirst du schon wissen, wie ich das mit der 1 und der 0 meinte. ;-)

Gruß, Trabukh

RCO
18.07.2004, 16:35
Danke, das bringt mich weiter, aber wie sieht das Signal des Senders aus? (ähnlich wie mine oben?)

RCO
18.07.2004, 19:23
Wie sieht denn ein entsprechendes Senderprogramm aus?
Könntest du mir nen par Zeilen schreiben?

Trabukh
18.07.2004, 19:54
Ist aus der Hilfe von Bascom kopiert:

$regfile = "2313def.dat"
$crystal = 4000000

Dim Togbit As Byte , Command As Byte , Address As Byte

Command = 12 ' power on off
Togbit = 0 ' make it 0 or 32 to set the toggle bit
Address = 0
Do
Waitms 500
Rc5send Togbit , Address , Command
Loop

End
Gruß, Trabukh

God
18.07.2004, 19:55
RC5 Protokoll hier (http://mikrocontroller.cco-ev.de/de/IR-Protokolle.htm#RC5)

Der Code is ganz einfach is nur ein Befehl nähmlich rc5send und dann die Daten hinter die du Senden willst.

mfg God

God
18.07.2004, 19:57
oh, da war einer schneller.
Den Befehl rc5send nach dem Beispiel von Trabukh

18.07.2004, 23:51
Also nur zum verständniss,

$regfile = "2313def.dat" -- was meint das?
$crystal = 4000000 -- ist vermutlich die Takrung

Wenn ich das richtig verstehe, sendet der SEnder nun in einer Endlosschleife das Signal 12, oder?

Aber über welchen Pin?

RCO
18.07.2004, 23:51
Sorry nciht eingelogt

God
19.07.2004, 18:40
Also nur zum verständniss,

$regfile = "2313def.dat" -- was meint das?
$crystal = 4000000 -- ist vermutlich die Takrung

Wenn ich das richtig verstehe, sendet der SEnder nun in einer Endlosschleife das Signal 12, oder?

Aber über welchen Pin?



$regfile = 2313def.dat"
Der Befehl $regfile sagt Bascom welchen Avr Typ du beschreiben willst, da es ja mehrere gibt (AtTiny26, Mega32, Mega16 etc. etc.).
In dem Fall von dem Beispiel wärs der AT902313.




$chrystal = 4000000


Jo stimmt das is die Taktung.


Der Beispielcode würde jetzt immer Endlos den Befehl 12 senden.



mfg God

RCO
19.07.2004, 18:50
Naja, dann hab ichs ja wenigstens verstanden.

Wenn ich richtig gelesen habe, sendet man dann Startbits, einen Togglebit, eine Systemadresse, und anschließend den Befehlscode.

Wie lang dürfen Systemadresse und Befehlscode maximal sein? Jeweils 1 Byte?

RCO
19.07.2004, 18:55
Ah selbst gefunden, Systemadresse 5 bit (32 möglichkeiten), Befehlscode 6 Bit (64 Möglichkeiten).

God
19.07.2004, 18:58
Es können maximal 32 verschiedene Adressen und 64 verschiedene Befehle gesendet werden.

Also:
Command = 0 bis 63 oder 1 bis 64
Address = 0 bis 31 oder 1 bis 32

Bin mir nich ganz sicher, ob das bei 1 oder 0 anfängt :-b , musst dann ma ausprobieren.


mfg God

God
19.07.2004, 19:00
Aso, hast schon gefunden :cheesy: :cheesy:

mfg

19.07.2004, 19:01
Ist glaub ich null, aber spielt ja keine Rolle.
Ich will ganze Bytes übertragen! Aber ich kann ja einfach einen Teil der Systemadresse mitnutzen. Insgesamt habe ich ja 5 + 6 Bits, also 1 Byte + 3 Bits, das sollte reichen.

20.07.2004, 12:48
Gibt es nicht ne Seite oder so zu diesem Thema, meine nur AVR und RC5?

RCO
23.07.2004, 18:18
www.rowalt.de soweit ich weiß.