hallo Leute, Ich weiss, das Thema wurde schon mehrmals hier behandelt... aber ich komme einfach nicht weiter. Ich habe Ein Programm geschrieben zum Senden eines Infrarot Signals mit Timer 1 und CTC. Das läuft nicht so gut, denn mein Empfänger dekodiert ihn nicht! Mein Logikanlyser zeigt beim High das getoggelte Signal. Ansonsten sind die Pausen und low ok. Was habe ich beim High falsch gemacht??? Ich weiss nicht mehr weiter. Bitte um Hilfe. Danke
//Eine 0 oder 1 senden void Send_Bit(uint8_t code) { if (code==0) { IR_LED_OFF; _delay_us(180); _delay_us(150); // Ein Bit dauert 330 us } else { sei(); <<<<<<<<<<<<<<<<<<<<<<<<<<< nach dem SEI ? IR_LED_OFF; | cli(); <<<<<<<<<<<<<<<<< Das sollte | } }
SIGNAL (SIG_OUTPUT_COMPARE1A) { // PinA1 76000 mal in der sek an und ausschalten IR_LED_PORT ^= (1 << IR_LED_PIN); _delay_us(180); _delay_us(150); // Ein Bit dauert 330 us } und ein DELAY im Interrupt-Handler????
Hi, Ich habe ein Atmega8515 mit FCPU = 3,686Mhz. Wenn ich 0 sende, wird nichts getan. Der IR-LEd geht auf low, das ist korrekt. Ich moduliere das Signal nur wenn ich 1 sende, und dafür toggle ich den Pin-Ausgang. Ich denke der Empfänger sollte erkennen, dass es moduliert wird und eine Folge von 1 am Logikanalyser zeigen. Nur bei mir zeigt es eine Folge von 1 und 0.
Also das ist schon richtig mit der Modulation, aber das glaube ich funktioniert so mit deinem Programm nicht... wenn du einen Delay in deinem Interrupt machst, wie soll er dann toggeln? Hier ein paar Tips/Fragen: a) IR-Codierung ansehen: http://de.wikipedia.org/wiki/Fernbedienung#Beispiel_IR-Modulation b) habe verstanden das du bereits in deiner Empfängerschaltung nachmisst... was passiert an deinem Sende-Port, da müsste es schon klemmen, wenn ich nicht falsch liege. c) Wenns da passt, dann frag ich mich gerade wie du die Empfängerschaltung aufgebaut hast.. Bandpass-wie dimensoniert usw. Das wesentliche ist aber a) und b) - wenn dann Theorie passt, dann weiter. Viel Erfolg
Übrigens... was verwendest du als "Logicanalyzer" ? Sowas edles konnte ich mir noch nicht leisten ;)
Hallo Gary, Vielen herzlichen Dank für deine Antworten. Du hattest völlig recht, ein Delay in der ISR war völlig falsch. Den habe ich jetzt in der Sende funktion bei High geschrieben und das funktionniert. Also mein Beamer geht jetzt an und aus, wenn ich auf meiner Taste drücke. Nur manchmal muss ich halt 2 oder 3 Mal drücken damit er anschaltet. Also die Delay Zeiten sind nicht sehr genau, aber das kriege ich schon hin. Ich verwende den 1630G Logic Analyzer der firma hp. Ziemlich alt, aber sehr effizient. Nochmal Danke.
Super! poste doch mal dein Projekt/Code, damit hier andere es nachvollziehen können.
Hallo, Hier der Code, der läuft super gut jetzt. Mein nächstes Problem: Kann mir jemand vielleicht erklären wie ich die Bitdauer mit einem Timer zB dem Timer 0 erzeugen kann? anstatt mit der Delay Funktion? Danke
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.