Инфракрасная связь на 9600. Serial IR. IRDA

tmr
Offline
Зарегистрирован: 19.05.2014

Коллеги, пытаюсь наладить последовательный интерфейс 9600 8n1 по инфракрасной линии 38КГц.

Удается нормально отправлять и принимать данные на скорости до 2400 включительно. На 4800 и 9600 приемник неправильно декодирует сигнал.

Приемник - нонэйм IC CHQ 1838 (пробовал другие). Передатчик - ноэйм светик без обозначений (пробовал другие).

Сигнал на передатчик формируется на 2х пинах, на 1м - данные 9600 8n1, на 2м - несущая 38КГц pwm, все программно, светик подключен катодом на данных и анодом на несущей. Сигнал на приемнике декодируется самим приемником.

Код передатчика:

#include <SoftwareSerial.h>
 
#define RXD 11
#define TXD 9
#define PWM 10
 
SoftwareSerial irSerial(RXD, TXD);
 
void setup(){
  irSerial.begin(9600);
 
  TCCR2A = _BV(COM2A0) | _BV(WGM21);
  TCCR2B = _BV(CS20);
  OCR2A = 209;
 
  pinMode(PWM, OUTPUT);

  Serial.begin(9600);
  Serial.println("\nready\n");
}
 
void loop(){
  byte raw[] = {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x77, 0x81};
  irSerial.write(raw, sizeof(raw));
  
  delay(5000);
}

Снимаю данные логическим анализатором со светика (TX) и приемника (RX).

На 2400 сигнал проходит прекрасно, кодируется-декодируется корректно:

На 9600 последовательность бит сливается в сплошной фронт:

Какие есть идеи - как поднять скорость? в чем может быть проблема?

Волшебник
Offline
Зарегистрирован: 22.12.2016

Качайте даташит на TSOP4838 , там;  Continuous data transmission possible 800 bit/s

И у TSOP1738;  Continuous data transmission possible (1200 bit/s)

Т.е. никак, делайте на радио.

tmr
Offline
Зарегистрирован: 19.05.2014

Мда, нашел даташит на китайском на эту ИС: bandwidth min 2 | typ 3.3 | max 5 khz. Видимо это о максимальной скорости.

На радио никак - ИК уже интегрирован в устройство, нужно наладить с ним связь.

Буду пробовать на быстрых ИС от IRDA.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

tmr, разница по частоте всего 4 раза, т.е. на полупериод приходится около 2 импульсов несущей. Не пробовали сингхронизировать по фазе несущую с частотой передачи?

 

tmr
Offline
Зарегистрирован: 19.05.2014

синхронизировать не пробовал. Проверял варинт с синхронизацией просто на большом кол-ве попыток - смещение фазы на декодер не влияет.

Попробовал со скоростным трансивером, все импульсы ловятся корректно, но с ним другая проблема - на ИС отсутствует декодер, т.ч. убирать несущую придется вручную.

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Какое отношение имеет 38 кГц к IRDA? Если это совсем другой стандарт.

tmr
Offline
Зарегистрирован: 19.05.2014

Отлично подсказал! Попробую кодировать в формате IRDA на 3/16. На первый взгляд должно быть довольно просто.

Волшебник
Offline
Зарегистрирован: 22.12.2016

Без разницы как кодировать, несущая частота на 38 кГц у вашей микросхемы. Для 9.6 кб/с надо кГц 100 и выше.  

tmr
Offline
Зарегистрирован: 19.05.2014

Без несущей. Кодировать на 3/16 ширины импульса - физический уровень IRDA очень похож на асинх.посл.порт

Волшебник
Offline
Зарегистрирован: 22.12.2016

Тогда свой приёмник ИК, та микросхема что у вас ожидает 38 кГц на входе, и просто импульсы она фильтрует как помехи связи.

tmr
Offline
Зарегистрирован: 19.05.2014

Приемник теперь tfdu4100

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Делал я IRDA приёмник на 115200.

Есть готовые ИС ( трансимпедансный преобразователь).

Но на рассыпухе получилось лучше....

-----------------------

На базе указки народ делал всякое. так не вспомню...КОМ-порт вроде напрямую пускают.