Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 ATmega über IR verbinden
Jackeder
08.04.2015, 17:23
Hallo ich hoffe ich bin hier im richtig gelandet. Wie schon oben genannt möchte ich mit einem Atmega einen anderen Befehle geben, bzw Funktionen ein/aus schalten ...
Da ich noch wenig erfahrung in der µc-Programierung habe will ich es so einfach wie möglich versuchen, sprich ohne Timer
Aufbau ist wie folgt...
ATmega8 (PinXY) ==> IR-LED ==> IR-Transistor(SMD) ==> ATmega8( INT0 )
das Signal was ich senden möchte ist:
IR-LED ...ein...aus...ein...aus...ein...aus.............e in...aus...ein...aus...ein...aus.....usw. ähnlich wie Morsezeichen, 3mal ein, Pause, 3mal ein...
(Signalkette 3) (Pause) (Signalkette 3)
Der 2.atmega würde über INT0 die highpegel zählen und so seiner Funktion zuordnen, in dem Fall i=3 ==> Funktion 3: rote LED an z.B.
Soweit würde ich das selber programmieren können.
Meine Frage lautet hierzu, ob es möglich ist dem Controler zu sagen, wenn am INT0-Eingang ein LOW-Pegel für eine bestimmte Zeit besteht, sprich die Pause zwischen zwei Signalketten, dann i wieder auf 0 gesetzt wird ?
normal schreibt man ja if (i=3) {I=0};
Ich würde mich freuen wenn jemand ne Idee hat
Hendrik
Hallo Hendrik,
über welche Entfernung sollen deine "Daten" übertragen werden?
Ich glaube mit deiner einfachen Methode wird das nichts werden. Bei Fernbedienungen wird das Signal mit einer festen Frequenz gesendet, z.B. 38 kHz. Es gibt dann spezielle Empfänger, die auf diese Frequenz getrimmt sind und Signale mit anderer Frequenz (z.B. Sonnenlicht mit IR-Anteil) filtern. Dein Datenstrom muss dann mit einer deutlich langsameren Frequenz auf die Sende-Frequenz aufmoduliert werden. Bit = 1 heißt dann z.B. Signal mit 38 kHz ein, Bit = 0 Signal aus. Als Protokoll verwendest du am besten etwas abgeleitetes von der seriellen Schnittstelle.
Eine sehr gute Lektüre um alles zu verstehen ist sich das RC-5 Protokoll anzusehen. Dafür gibt es auch fertigen Code für Senden und Empfang.
Zu deiner letzten Frage: Zeiten misst man im ATmega mit einem Timer. Du konfigurierst einen und setzt diesen bei deinem Signal (INT0) auf den Wert 0. Wenn dann dein zweites Signal kommt, kannst du den Wert des Timer auslesen und damit die verstrichene Zeit berechnen. Dafür empfehle ich als Lektüre das Datenblatt des ATmegas zum Thema Timer.
Viele Grüße
Andreas
Jackeder
08.04.2015, 17:56
Hi Andreas
Entfernung ist max 5 - 10 cm.
Einsatz soll das ganze auf der Modelleisenbahn finden, daher auch der SMD-IR-Transistor.
Mein gedanke war halt das wenn ich eine Frequenz von 38 khz erzeugen will kann ich doch nur dei 3 PWM ausgänge nutzen am ATmega8 oder geht das auch auf einen beliebigen Pin ?
Viele Grüße Hendrik
Hallo Hendrik,
das 38kHz Signal kannst du mit dem AVR problemos auf jedem beliebiegen Pin erzeugen. Dafür verwendest du auch einen Timer in Compare A oder Compare B-Modus und kannst dann im entsprechenden Interrupt den Pin bei entsprechenden Quarz sogar in MHz-Geschwindigkeit ansteuern. Soweit ich mich erinnern kann gibt es aber auch sender, die bereits in der passenden Frequenz senden.
Du musst auch einen entsprechenden Empfänger mit passenden Frequenz-Filter nutzen Ansonsten wirst du bei sich ändernden Lichtverhältnissen Probleme mot dem Empfang bekommen. Solange das also nicht in einem Raum ohne Fenster und mit stabilen künstlichen Licht statt finden soll wird der Abgleich ohne Filter sehr sehr schwer.
Viele Grüße
Andreas
Jackeder
08.04.2015, 18:14
oki danke für die Tips, da werd ich mal in diese richtung schauen und mich schlau machen
oberallgeier
08.04.2015, 18:37
oki danke für die Tips, da werd ich mal in diese richtung schauen und mich schlau machenVielleicht hier ?? (http://www.sbprojects.com/knowledge/ir/index.php) Ich nutze den RC5-Code von einer "normalen", alten Fernseher-Fernsteuerung, aber man kann natürlich auch die 38 kHz (oder 36 - was man eben will) so pulsen, dass man den gewünschten Code erhält. Für mehr Gehirnfutter such mal nach RC5, RC-5 oder lies einfach alles am genannten Link durch *ggg*
Eventuell wäre ja auch ein IRDA Transceiver das Richtige. Guck mal nach dem TFDU4101.
Hab aber selber damit noch nicht gebastelt.
Hi,
warum nimmst Du zur Kommunikation nicht einfach die UARTs (IR-LED an TXD, IR-Transistor an RXD), dann brauchst Du kein
neues Protokoll "erfinden".
Ansonsten wirst Du wohl um den Timer nicht herumkommen, also HL Timer Start, LH Timer Stopp, Timer auslesen ...
mfg
Achim
Hallo Achim,
ich denke nicht, dass es so ohne die Modulation einer Trägerfrequenz funktionieren wird. Der Grund ist, dass die Sonne und das künstliche Licht im Raum auch IR-Signale produziert und somit nur ein gefiltertes Signal auf der passenden Trägerfrequenz überhaupt zu einem einigermassen Störungsfreien Empfang führt.
Man könnte natürlich bei einer entsprechend langsamen Baudrate versuchen das Ganze mit Trägerfrequenz zu übertragen. Es gibt bestimmt fertige Sender und Empfänger dafür.
Viele Grüße
Andreas
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.