Инфракрасная связь на 9600. Serial IR. IRDA
- Войдите на сайт для отправки комментариев
Коллеги, пытаюсь наладить последовательный интерфейс 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 последовательность бит сливается в сплошной фронт:
Какие есть идеи - как поднять скорость? в чем может быть проблема?
Качайте даташит на TSOP4838 , там; Continuous data transmission possible 800 bit/s
И у TSOP1738; Continuous data transmission possible (1200 bit/s)
Т.е. никак, делайте на радио.
Мда, нашел даташит на китайском на эту ИС: bandwidth min 2 | typ 3.3 | max 5 khz. Видимо это о максимальной скорости.
На радио никак - ИК уже интегрирован в устройство, нужно наладить с ним связь.
Буду пробовать на быстрых ИС от IRDA.
tmr, разница по частоте всего 4 раза, т.е. на полупериод приходится около 2 импульсов несущей. Не пробовали сингхронизировать по фазе несущую с частотой передачи?
синхронизировать не пробовал. Проверял варинт с синхронизацией просто на большом кол-ве попыток - смещение фазы на декодер не влияет.
Попробовал со скоростным трансивером, все импульсы ловятся корректно, но с ним другая проблема - на ИС отсутствует декодер, т.ч. убирать несущую придется вручную.
Какое отношение имеет 38 кГц к IRDA? Если это совсем другой стандарт.
Отлично подсказал! Попробую кодировать в формате IRDA на 3/16. На первый взгляд должно быть довольно просто.
Без разницы как кодировать, несущая частота на 38 кГц у вашей микросхемы. Для 9.6 кб/с надо кГц 100 и выше.
Без несущей. Кодировать на 3/16 ширины импульса - физический уровень IRDA очень похож на асинх.посл.порт
Тогда свой приёмник ИК, та микросхема что у вас ожидает 38 кГц на входе, и просто импульсы она фильтрует как помехи связи.
Приемник теперь tfdu4100
Делал я IRDA приёмник на 115200.
Есть готовые ИС ( трансимпедансный преобразователь).
Но на рассыпухе получилось лучше....
-----------------------
На базе указки народ делал всякое. так не вспомню...КОМ-порт вроде напрямую пускают.