|
Приёмник и передатчик на ИК. Проблемы с передачей и приёмом., Схема и плата и софт, но вместе не работает хорошо... |
|
|
|
Feb 16 2008, 12:16
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Всем привет. Собрал контроллер и передатчик ИК и написал программы. Идея такая, чтоб через самосборный джойстик передавать команды на контроллер. Принцип работы ИК передатчика такой: 1) нажимаем кнопку 2) на контроллер приёмника пускается импульс определённой длительности Вот код который генерирует импульсы по прерыванию: Код // Timer 0 output compare A interrupt service routine interrupt [TIM0_COMPA] void timer0_compa_isr(void) { if(empty) PORTB.0++;//генерация несущей 30кГц else PORTB.0 = 0;
timen1++; timen2++;
//Вычисление длинны импульса if(pulse) { empty = 1; pulse--; } if(!pulse) { empty = 0;} } Пакетный режим пока не выходит организовать, т.к. что то сбоит. Удалось только подавать пакет вида /старт бит/бит данных/стоп бит/. МК передатчика генерирует прерывание с частотой 60кГц. И если нужно передать импульс, то на выход поступает сигнал. Например лог 0 означает, подать импульс длительностью 20 прерываний. Лог 1, импульс длительностью 90 прерываний. Пауза между импульсами 100 прерываний. Если не передавать пакеты, то приёмник довольно хорошо принимает импульсы и загорается нужный светодиод, но таким макаром мне удалось закодировать только 3 команды. Если передавать пакетом всё накрывается У приёмника похожая логика. Ножка сигнальная TSOP1730 подключена к выводу МК и генерирует прерывание. Код // Pin change 0-7 interrupt service routine interrupt [PCINT0] void pin_change_isr0(void) { if(PINB.1 == 0) {empty = 1;} else {empty = 0;} } А прерывание по таймеру происходит с частотой 60кГц и меряет длительность импульса: Код // Timer 2 output compare interrupt service routine interrupt [TIM2_COMPA] void timer2_compa_isr(void) { timen++; timeoff++; timecomand++;
if(empty) timecount++;//отчёт длинны импульсов
if(timecount && !empty) { if(timecount > 7 && timecount < 40) pulse = 1;//лог 0 if(timecount > 50 && timecount < 100) pulse = 2;//лог 1 // if(timecount > 120 && timecount < 230) pulse = 3;//доп. команда // if(timecount > 250 && timecount < 550) pulse = 4;//доп. команда timecount = 0; } } А в цикле функции main уже идёт обработка данных, как у приёмника так и у передатчика. Ниже подшиваю фотки платы, схемы и исходников на СИ в CodeVisionAVR с комментариями. Очень хотелось бы понять, где закралась ошибочка ? ---------------------------------------------- Есть ещё интересный глюк, если передатчик включить и положить рядом с приёмником, то приёмник ловит иногда команды, но если передатчик выключить, то приёмник ничего не ловит.
Сообщение отредактировал Папа Карло - Feb 16 2008, 12:46
Эскизы прикрепленных изображений
Прикрепленные файлы
code_C.rar ( 5.33 килобайт )
Кол-во скачиваний: 45
|
|
|
|
|
 |
Ответов
|
Feb 16 2008, 20:26
|
Группа: Новичок
Сообщений: 3
Регистрация: 17-07-07
Пользователь №: 29 192

|
Без осциллографа туго.... питание 3В я хотел сказать про драйвер диода, скорее всего он коряво работает. и вмесо прямоугольника стгнал в виде пилы ... а приемнику нужен четкий сигнал на 30кГц
диод можно попробовать повесить на контроллер я думаю удасться выдавить 15- 20ма резистор 30-100 ом желательно поставить. Можно запаралелить два вывода для увеличения тока
Я не знаю есть у тини возможность задать режим ШИМ и какие я их редко пользовал... но если совсем просто подойти если там только таймер 0 то это тоскливо. лучше уйти на mega8 я думаю по цене и размерам не большая разница
это для пробы пока 1{ установим бит и сбросим бит с задержкой} а на приемнике посмотреть - должна быть 1 пока работает передатчик....
На сегодня все... Удачи!
|
|
|
|
|
Feb 16 2008, 21:42
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Я уже бьюсь неделю с этой проблемой и много чего успел натестить. Драйвер диода вы имели ввиду npn транзистор КТ3102АМ ? Дело в том, что МК attiny13V маловольтная и ток почти не выдаёт на ноги. Да на ней только таймер 0, но сделать можно много на ней, только надо знать как Вот на atmega48 я спокойно вешал диоды. Режим ШИМ там есть, но как настроить 30кГц я не знаю. Может кто подскажет ? На самом деле приёмник выдаёт 1-ку и при поступлении сигнала скидывает на ноль, если сигнал долго поступает от передатчика, то TSOP опять ставит сам 1 лог. Причём мне удалось уже ловить на приёмники сигналы разной длительности и код который я дал, как раз и работает так. Он довольно чётко распознаёт 3 сигнала, но передать пакет сигналов не выходит. Ктому же у меня есть подозрения, что при передаче питание батарейное проседает и частота у МК начинает гулять. Я подумывал о смене резистора 100 Ом на 500 Ом. Сам диод ИК 30МВт. То есть ток 10мА, что означает нужен резистор на 300 Ом. Если я где ошибся поправьте плиз.
Сообщение отредактировал Папа Карло - Feb 16 2008, 21:43
|
|
|
|
|
Feb 17 2008, 20:38
|

Частый гость
 
Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626

|
Цитата(Папа Карло @ Feb 17 2008, 21:22)  Заменил резистор на ИК диоде на 1 кОм, качество приёма не изменилось совсем... Подскажите пожалуйста как лучше настроить и подавать импульсы 30кГц на attiny13V ? Подключил ИК диод сразу к ноге МК и приём сразу стал лучше раза в 1.5... Наверно мне надо было взять МК с кварцем, тогда можно было бы точно настроить МК. Вы R1 увеличили до 1к? И нечего не изменилось? Подключили светодиод на прямую к 5-й ноге и приём улучшился? Если так, у вас ключ не работает. Я так думаю. И не в частоте дело. Транзистор замените, что ли. Без осцила тяжко. З.Ы. Может, цифровой фотик есть? На ЖК-матрице ИК-светодиод отлично видно. З.З.Ы. Дело к ночи, соображаю туго, но скажите, на вашем ИК диоде прямое падение напряжения сколько? Может, он при питании 3В вообще не открывается? З.З.З.Ы. Если правильно ошибаюсь, ток через диод равен I=(Uпит-Uпр)/R
|
|
|
|
|
Feb 18 2008, 07:34
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Так и делал, вначале сменил резистор со 100 Ом на 1 000 Ом. Потом ИК диод сразу подключил к ноге МК без резистора и транзистора. И что интересно, когда я подключил диод прямо на ногу, то при изменении несущей частоты в два раза приёмник переставал принимать сигнал, а через транзистор с резистором, приёмник принимал сигнал даже если несущую изменить как угодно  Вот данные на ИК диод: Мощность излучения P,мВт: 30 Прямое напряжение,В: 1.2 при токе Iпр.,мА: 20 Длина волны,нм: 940 Ширина спектра излучения,нм: 50 Видимый телесный угол,град: 30 Максимальное время нарастания импульса,нс: - Максимальное время спада импульса,нс: - Максимальное обратное напряжение,В: 5 Максимальный прямой ток,мА: 50 Максимальный импульсный прямой ток,мА: 1200 Способ монтажа: в отверстие Рабочая температура,С: -40...85 Производитель: Kingbright Electronic Co. Ltd.
Сообщение отредактировал Папа Карло - Feb 18 2008, 07:44
|
|
|
|
|
Feb 18 2008, 11:27
|

Частый гость
 
Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626

|
Цитата(Папа Карло @ Feb 18 2008, 09:34)  Так и делал, вначале сменил резистор со 100...Что интересно, когда я подключил диод прямо на ногу, то при изменении несущей частоты в два раза приёмник переставал принимать сигнал, а через транзистор с резистором, приёмник принимал сигнал даже если несущую изменить как угодно  Ключ у вас не работает. Вам Serg_Mitin уже говорил: на светодиоде падает 1,2 вольта, на насыщенном транзисторе - где то 0,5 вольт. Остаётся 1,3 вольта. Для получения искомых 20 мА нужен резистор 1,3/0,02=65 Ом. Резистор R1 должен быть где - то 51 Ом. А порт может выдать миллиампер 30, в даташите посмотрите. Отпалите вы его нахрен. Или порт, или светодиод. З.Ы. Кондюк по питанию поставьте. Поближе к ключу. Микрофарад 40. Если вы меняете несущую, а ваш приёмник продолжает принимать сигнал, эт он не сигнал принимает, а какую то помеху. 2 модератор. Может, тему в раздел для начинающих? Блин, только заметил. Диод Д2 чем занимается? Ещё 0,6 Вольта отжирает?
|
|
|
|
|
Feb 18 2008, 12:01
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(Alex_Pol @ Feb 18 2008, 14:27)  Ещё 0,6 Вольта отжирает? Он для защиты от не правильного подключения, но уже можно и убрать его  Кондёр уже поставил 470мкФ на микруху, а ключ рядом 1 см стоит. Принимает точно сигнал с передатчика, похоже хитрый сигнал не фильтрует TSOP Резистор я поставил такой большой на ИК диод из-за того, что питание при включённом светодиоде сильно падало(на схеме его уже нет). Из чего я пришёл к выводу, что МК может не стабильно работать из-за питания. Но выходит, что МК работал нестабильно из-за того, что частота его была 4.8МГц, а по паспорту он только до 4МГц держит. Думаю мне будет проще убрать диод Д2 и МК опустить до 2.4МГц. Померил мультиметром на ИК диоде падает 1.3 вольта Цитата(bbill @ Feb 18 2008, 14:35)  Используйте таймер в режиме(см.даташит) Clear Timer on Compare Match (CTC) Mode и формула расчета: fOCnx= (fclk_I/O)/2⋅N⋅(1 + OCRnx). The N variable represents the prescale factor (1, 8, 64, 256, or 1024). Вот код которым я так и считал: Код // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 4800,000 kHz // Mode: CTC top=OCR0A // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x02; TCCR0B=0x01; TCNT0=0x00; OCR0A=79;//тут делитель OCR0B=0x00; Вот код который генерирует сигнал на ножке МК: Код // Timer 0 output compare A interrupt service routine interrupt [TIM0_COMPA] void timer0_compa_isr(void) { if(empty) PORTB.0++;// else PORTB.0 = 0; } fOCnx= (4 800 000)/2*1*(1 + 79) = 60кГц. То есть за 2 прерывания выдаётся импульс с частотой 30кГц. Если что напутал поправьте плиз
Сообщение отредактировал Папа Карло - Feb 18 2008, 12:12
|
|
|
|
Сообщений в этой теме
Папа Карло Приёмник и передатчик на ИК. Проблемы с передачей и приёмом. Feb 16 2008, 12:16 Dog Pawlowa Цитата(Папа Карло @ Feb 16 2008, 16:16) Е... Feb 16 2008, 13:33 Папа Карло Цитата(Dog Pawlowa @ Feb 16 2008, 16:33) ... Feb 16 2008, 13:56 Serg_Mitin Приветствую ПАПУ...
Я бы начал искать с передатчик... Feb 16 2008, 19:27 Папа Карло 1) Шунтирующую емкость по питанию уже повесил на T... Feb 16 2008, 19:57       Alex_Pol Цитата(Папа Карло @ Feb 18 2008, 14:01) Р... Feb 18 2008, 12:39        Папа Карло Цитата(Alex_Pol @ Feb 18 2008, 15:39) Мож... Feb 18 2008, 13:33         Dog Pawlowa Цитата(Папа Карло @ Feb 18 2008, 17:33) С... Feb 18 2008, 13:44         Alex_Pol Цитата(Папа Карло @ Feb 18 2008, 15:33) С... Feb 18 2008, 13:58          Папа Карло В ДШ сказано до 4Мгц, а у меня МК на 4.8МГц работа... Feb 18 2008, 15:45           Alex_Pol Цитата(Папа Карло @ Feb 18 2008, 17:45) В... Feb 18 2008, 18:03            Папа Карло Потестил на макетной плате ИК диод с разными подкл... Feb 18 2008, 21:02             Alex_Pol Цитата(Папа Карло @ Feb 18 2008, 23:02) И... Feb 19 2008, 00:33              Папа Карло Проверил диод на плате джойстика, он оказался нера... Feb 19 2008, 06:43               Папа Карло Странно, что на такой простой вопрос не могут отве... Feb 19 2008, 08:02                tyro Цитата(Папа Карло @ Feb 19 2008, 11:02) И... Feb 19 2008, 09:22               Alex_Pol Цитата(Папа Карло @ Feb 19 2008, 08:43) З... Feb 19 2008, 08:48                Папа Карло Цитата(Alex_Pol @ Feb 19 2008, 11:48) Это... Feb 19 2008, 10:52                 tyro Цитата(Папа Карло @ Feb 19 2008, 13:52)
... Feb 19 2008, 11:06                  Папа Карло Цитата(tyro @ Feb 19 2008, 14:06) Так у В... Feb 19 2008, 11:18               =GM= Цитата(Папа Карло @ Feb 19 2008, 06:43) Т... Feb 19 2008, 11:54                Папа Карло Цитата(=GM= @ Feb 19 2008, 14:54) нет так... Feb 19 2008, 12:40                 =GM= Цитата(Папа Карло @ Feb 19 2008, 12:40) Ж... Feb 19 2008, 13:33                 =GM= Цитата(Папа Карло @ Feb 19 2008, 12:40) Ж... Feb 19 2008, 14:14                  Папа Карло Цитата(=GM= @ Feb 19 2008, 17:14) У вас н... Feb 19 2008, 20:24                   =GM= Цитата(Папа Карло @ Feb 19 2008, 20:24) Ф... Feb 19 2008, 22:45                    Папа Карло Цитата(=GM= @ Feb 20 2008, 01:45) у вас б... Feb 20 2008, 06:50                     =GM= Цитата(Папа Карло @ Feb 20 2008, 06:50) Н... Feb 20 2008, 12:39                      Папа Карло Цитата(=GM= @ Feb 20 2008, 15:39) одну ош... Feb 20 2008, 13:00                       Папа Карло Написал программу для передатчика.
Отправляет пак... Feb 20 2008, 21:01      Жорик_у Цитата(Alex_Pol @ Feb 18 2008, 14:27) Для... Feb 27 2008, 13:29       =GM= Цитата(Жорик_у @ Feb 27 2008, 13:29) пове... Feb 27 2008, 15:49        Vlad219i Цитата(=GM= @ Feb 27 2008, 18:49) Вы случ... Feb 27 2008, 15:56       AntonS Цитата(Жорик_у @ Feb 27 2008, 15:29) У ме... Mar 1 2008, 13:31 bbill В передатчике уберите диод по питанию, на микрохем... Feb 18 2008, 11:35 bbill Из реальной старой работы:
Было написано для tn12,... Feb 19 2008, 13:45 GDI ЦитатаДШ на attiny13:
http://www.chip-dip.ru/libra... Feb 19 2008, 14:42 AntonS TSOP-ы хорошо принимают только короткие пачки импу... Feb 22 2008, 15:04 Папа Карло Протестировал в VMLAB передатчик с таким кодом:
Ко... Feb 23 2008, 12:02 vet Папа Карло,
я так понимаю, вы формируете меандр де... Feb 23 2008, 17:45 Папа Карло Цитата(vet @ Feb 23 2008, 20:45)
Просто... Feb 23 2008, 19:00  vet Цитата(Папа Карло @ Feb 23 2008, 22:00) П... Feb 23 2008, 19:46   Папа Карло Цитата(vet @ Feb 23 2008, 22:46) другим с... Feb 23 2008, 21:02 vet Папа Карло,
да, ознакомившись с первыми постами те... Feb 24 2008, 10:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|