Forum: Mikrocontroller und Digitale Elektronik Infrarot senden


von Christelle T. (tchris)


Angehängte Dateien:

Lesenswert?

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

von Gary (Gast)


Lesenswert?

Welchen µC nimmst du... was meinst du mit getoggelten Signal bei High?

von Gary (Gast)


Lesenswert?

//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 |
  }

}

von Gary (Gast)


Lesenswert?

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????

von Christelle T. (tchris)


Lesenswert?

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.

von Christelle T. (tchris)


Lesenswert?

wie mache ich das am besten?

von Gary (Gast)


Lesenswert?

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

von Gary (Gast)


Lesenswert?

Übrigens... was verwendest du als "Logicanalyzer" ? Sowas edles konnte
ich mir noch nicht leisten ;)

von Gary (Gast)


Lesenswert?


von Christelle T. (tchris)


Lesenswert?

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.

von Gary (Gast)


Lesenswert?

Super! poste doch mal dein Projekt/Code, damit hier andere es
nachvollziehen können.

von Christelle T. (tchris)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.