Infrarot senden

OP #341500
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
Angehängte Dateien:
Gast
//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 |
  }

}
Gast
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????
OP
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.
Gast
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
OP
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.