hallo allerseits,

ich bastle immer noch an meiner IR-bake 2.0...

im netz habe ich zwei interessante sketche gefunden.
sender:

den code habe ich wegen einer zusätzlichen grünen LED (die nur mitblinkt) ein bischen modifiziert:

Code:
// Damit die Pins schnell geschaltet werden können
#include <digitalWriteFast.h>

// Hier ist der Verstärker mit der IR-LED angeschlossen
#define IRLED 8
#define LEDpin 9

// Globale Variablen für den Timer-Interrupt
volatile uint8_t pinZustand = HIGH;
volatile uint8_t sendenAn = false;



/*************************************************************
 * 
 * void setup()
 *
 * Wird einmal beim Programmstart ausgeführt
 *
 *************************************************************/
void setup() 
{

  pinMode(8, OUTPUT);
  // IRLED ist ein Ausgabe-Pin
  pinModeFast(IRLED, OUTPUT);

  pinMode(9, OUTPUT);

  noInterrupts(); // Jetzt keine Interrupts
  TIMSK1 |= (1<<OCIE1A);  // Timer 1 Output Compare A Match Interrupt Enable

  TCCR1A = 0; // "Normaler" Modus

  // WGM12: CTC-Modus einschalten (Clear Timer on Compare match) 
  //        Stimmen OCR1A und Timer überein, wird der Interrupt
  //        ausgelöst
  // Bit CS12 und CS10 setzen = Vorteiler: 8
  TCCR1B = (1<<WGM12) | (1<<CS11);

  // Frequenz = 16000000 / 8 / 28 = rd. 71,428kHz, da jeweils an- und aus-
  // geschaltet wird, ergeben sich rund 36kHz Blinkfrequenz
  OCR1A = 28; 

  interrupts(); // Interrupts wieder erlauben
}



/*************************************************************
 *
 * Interrupt Service Routine
 *
 * Wird aufgerufen, wenn der entsprechende Interrupt
 * ausgelöst wird
 *
 *************************************************************/
ISR(TIMER1_COMPA_vect) 
{
  noInterrupts();
  if(! sendenAn) 
  {
    // IR-LED ausschalten
    digitalWriteFast(IRLED, LOW);
    // Zustand der IR-LED merken
    pinZustand = LOW;
    interrupts();
    return;
  } 
  else 
  {
    // IR-LED-Pin auf pinZustand schalten
    digitalWriteFast(IRLED, pinZustand);
    // pinZustand invertieren
    pinZustand = (pinZustand == HIGH) ? LOW : HIGH;
  }
  interrupts();
}



/*************************************************************
 *
 * void loop()
 *
 * Wird immer wieder durchlaufen
 *
 *************************************************************/
void loop() 
{

  // Sender für 5ms ausschalten  
  sendenAn = false;
  delay(5);
  //digitalWrite(9, LOW);

  // Das komplette Alphabet in Großbuchstaben senden
  //for(int i='A'; i<='Z'; i++) 
  for(int i=1; i<=9; i++) 
  {
    sendIR(i);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    delay(250); // Kann entfallen, hier nur, damit man auf
    // dem Empfänger Zeit hat, die Buchstaben
    // zu verfolgen
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
  }
  //digitalWrite(9, HIGH);
}



/*************************************************************
 *
 * void sendIR(uint8_t dataByte)
 *
 * Sendet ein Byte seriell mit 1200bps über die IR-LED
 *
 * dataByte = Das Byte, das gesendet wird
 *
 *************************************************************/
void sendIR(uint8_t dataByte) 
{

  // Start-Bit
  sendenAn = false;
  delayMicroseconds(550);
  sendenAn = true;
  delayMicroseconds(230);

  // 8 Datenbits
  for(int i=0; i<8; i++) 
  {
    // Falls LSB gesetzt...
    if(dataByte & B00000001 == 1) 
    {
      // ... 36kHz-Signal aus (Seriell = Invertierte Logik)...
      sendenAn = false;
      delayMicroseconds(550);
    } 
    else 
    { // ... andernfalls 36kHz-Signal an
      sendenAn = true;
      delayMicroseconds(230);
    }
    // Das nächste Bit bitte 
    dataByte >>= 1;
  }

  // Stopp-Bit
  sendenAn = true;
  delayMicroseconds(550);
  sendenAn = false;

  // kurze Pause
  delay(2);
}

der sender funktioniert was die signalübertragung betrifft, das konnte ich mit dem RP6 verifizieren, es wird dort aber nur mit einer blinkenden LED signalisiert signal ja oder nein...

empfänger
:
der OUT-pin des TSOP 34836 ist am pin RX0 eines mega 2560 angeschlossen, die ansteuerung der LCD anzeige habe ich so modifiziert, wie sie in anderen sketches schon mal funktioniert hat. Am LCD erscheint nach dem einschalten "TSOP-Empfang" , sonst passiert aber nichts...

Code:
// Includes für das Display
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> 

// 7-Bit Adresse des Displays
// #define I2C_ADDR    0x27 >> 1 // I2C-Addresse

// Die Pin-Belegung des Displays
#define BACKLIGHT_PIN  7
#define En_pin  6
#define Rw_pin  5
#define Rs_pin  4
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3

#define  LED_OFF  1
#define  LED_ON  0

// Prototypen
//LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);



//#define BACKLIGHT_PIN  7
//#define  LED_OFF  1
//#define  LED_ON  0
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address


/********************************************************************
 *
 * Nötige Initialisierungen
 *
 ********************************************************************/
void setup()
{
  lcd.begin (16,2);  // Display initialisieren

  // Hintergrundbeleuchtung einschalten
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);  

  // Display bereit machen
  lcd.clear();
  lcd.home();  
  lcd.backlight();    // Beleuchtung einschalten
  lcd.setCursor(0,0); // Zeichen 1, Zeile 1
  lcd.print("TSOP-Empfang");   
  lcd.setCursor(0,1); // Zeichen 1, Zeile 2

  Serial.begin(1200);
}



/********************************************************************
 *
 * Hauptschleife, wird immer wieder durchlaufen
 *
 ********************************************************************/
void loop()
{
  int counter = 0;
  char dataEin = 0;


  while(true) 
  {
    if(Serial.available() > 0) 
    {
      dataEin = Serial.read();
      lcd.print(dataEin);

      // Nach 16 Zeichen Cursor wieder nach vorne
      counter++;
      if(counter >= 16) 
      {
      //  lcd.clear();
        counter = 0;
        lcd.setCursor(0,1);
      }
    }
  }
}

der empfang am RP6 ist schon mal ein zeichen dafür, dass der sender funktioniert, ich weiss aber nicht, wo ich im code des empfängers was verändern könnte damit sich auf dem LCD auch was tut

Könnte bitte jemand drüberschauen und mir einen schubs geben - von wegen der suchrichtung?