|
Приёмник и передатчик на ИК. Проблемы с передачей и приёмом., Схема и плата и софт, но вместе не работает хорошо... |
|
|
|
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 18 2008, 12:39
|

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

|
Цитата(Папа Карло @ Feb 18 2008, 14:01)  Резистор я поставил такой большой на ИК диод из-за того, что питание при включённом светодиоде сильно падало(на схеме его уже нет). Может у вас батарея дохлая?  Пока с железом не разберётесь, о софте говорить рано.
|
|
|
|
|
Feb 18 2008, 13:33
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(Alex_Pol @ Feb 18 2008, 15:39)  Может у вас батарея дохлая?  Пока с железом не разберётесь, о софте говорить рано. С железом всё ясно уже. Убрать диод Д2, уменьшить частоту МК до 2.4 и поставить транзистор с резистором на 50 Ом. Только у меня вопрос, что SS8050 лучше будет чем KT3102AM ? Типо KT3102AM не держит ток импульсный ?
|
|
|
|
|
Feb 18 2008, 13:58
|

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

|
Цитата(Папа Карло @ Feb 18 2008, 15:33)  С железом всё ясно уже. Убрать диод Д2, уменьшить частоту МК до 2.4 и поставить транзистор с резистором на 50 Ом. Только у меня вопрос, что SS8050 лучше будет чем KT3102AM ? Типо KT3102AM не держит ток импульсный ? Не ясно. Вы даташит на свою тиньку читали? Там английским по белому написано: Speed Grade: ATtiny 13V: 0-4mHz@ 1.8-5.5V 0-10mHz@2.7-5.5V. С частотой у вас всё путём. КТ3102 - Ik=100mA, импульсный - 200мА. В принципе пойдёт. Диод Д2, это да, нах не нужен, резистор тоже заменить на 51-47 Ом. Вы пишете, что у вас при включение светодиода напряжение садится. Этого быть не должно. С этим разберитесь.
|
|
|
|
|
Feb 18 2008, 18:03
|

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

|
Цитата(Папа Карло @ Feb 18 2008, 17:45)  В ДШ сказано до 4Мгц, а у меня МК на 4.8МГц работал. А питание после диода было ниже 2.7 В. В ДШ сказано, что при питании 1,8 вольта МК гарантированно заведётся на частоте 4 мГц, а при напряжении 2,7 вольта - на частоте 10мГц.
|
|
|
|
|
Feb 19 2008, 00:33
|

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

|
Цитата(Папа Карло @ Feb 18 2008, 23:02)  Или усиление у транзистора маленькое и ему было мало току от резистора 1кОм ? П.С. Базу через резистор подключал к питанию 5В. Минимальная бэта этих транзисторов - 100. Вот и считаёте, сколько надо в базу тока.
|
|
|
|
|
Feb 19 2008, 06:43
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Проверил диод на плате джойстика, он оказался нерабочий. Проверил фотоаппаратом, не светился ИК диод. Заменил на рабочий и приём стал заметно лучше. Теперь из коридора через всю комнату ловит сигнал, если прицельно навести. Померил ток на ИК диоде примерно 40мА. Теперь надо настроить несущую на 30кГц. Вот код настройки таймера и генерации несущей. Код // Timer 0 output compare A interrupt service routine interrupt [TIM0_COMPA] void timer0_compa_isr(void) { PORTB.0++; }
// 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=39;//60кГц (4 800 000 \ 2 * 1 * 60 000 - 1) OCR0B=0x00; Будет у меня с такими настройками несущая 30кГц ?
Сообщение отредактировал Папа Карло - Feb 19 2008, 06:44
|
|
|
|
|
Feb 19 2008, 11:54
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Папа Карло @ Feb 19 2008, 06:43)  Теперь надо настроить несущую на 30кГц. Вот код настройки таймера и генерации несущей. Код // Clock value: 4800,000 kHz // Mode: CTC top=OCR0A TCCR0A=0x02; TCCR0B=0x01; TCNT0=0x00; OCR0A=39;//60кГц (4 800 000 \ 2 * 1 * 60 000 - 1) OCR0B=0x00; Будет у меня с такими настройками несущая 30кГц? Не будет. У вас ошибка в расчёте. Командой TCCR0A=0x02 вы выбираете делитель на 8, т.е. на вход таймера поступают импульсы частотой 4800/8=600 кГц. Затем эта частота делится на 40, вы получаете 600/40=15 кГц. Ну, два прерывания дадут частоту 7.5 кГц вместо 30. Отсюда все ваши беды. Кстати, вроде бы в меге128 нет такого регистра TCCR0B, да и TCCR0А тоже нет, есть TCCR0.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 19 2008, 12:40
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(=GM= @ Feb 19 2008, 14:54)  нет такого регистра Жёстко вы меня  ДШ на attiny13: http://www.chip-dip.ru/library/DOC000059583.pdfСтраница 71
Сообщение отредактировал Папа Карло - Feb 19 2008, 12:42
|
|
|
|
Сообщений в этой теме
Папа Карло Приёмник и передатчик на ИК. Проблемы с передачей и приёмом. 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         Dog Pawlowa Цитата(Папа Карло @ Feb 18 2008, 17:33) С... Feb 18 2008, 13:44               Папа Карло Странно, что на такой простой вопрос не могут отве... 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, 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
|
|
|