реклама на сайте
подробности

 
 
> Приёмник и передатчик на ИК. Проблемы с передачей и приёмом., Схема и плата и софт, но вместе не работает хорошо...
Папа Карло
сообщение Feb 16 2008, 12:16
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 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 команды.

Если передавать пакетом всё накрывается sad.gif

У приёмника похожая логика.
Ножка сигнальная 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
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Serg_Mitin
сообщение Feb 16 2008, 20:26
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 17-07-07
Пользователь №: 29 192



Без осциллографа туго....
питание 3В я хотел сказать про драйвер диода, скорее всего он коряво работает. и вмесо прямоугольника стгнал в виде пилы ... а приемнику нужен четкий сигнал на 30кГц

диод можно попробовать повесить на контроллер я думаю удасться выдавить 15- 20ма резистор 30-100 ом желательно поставить. Можно запаралелить два вывода для увеличения тока

Я не знаю есть у тини возможность задать режим ШИМ и какие я их редко пользовал...
но если совсем просто подойти если там только таймер 0 то это тоскливо. лучше уйти на mega8 я думаю по цене и размерам не большая разница


это для пробы
пока 1{ установим бит и сбросим бит с задержкой}
а на приемнике посмотреть - должна быть 1 пока работает передатчик....

На сегодня все...
Удачи!
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 16 2008, 21:42
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Я уже бьюсь неделю с этой проблемой и много чего успел натестить.
Драйвер диода вы имели ввиду npn транзистор КТ3102АМ ?
Дело в том, что МК attiny13V маловольтная и ток почти не выдаёт на ноги.
Да на ней только таймер 0, но сделать можно много на ней, только надо знать как 07.gif
Вот на atmega48 я спокойно вешал диоды.
Режим ШИМ там есть, но как настроить 30кГц я не знаю.
Может кто подскажет ?

На самом деле приёмник выдаёт 1-ку и при поступлении сигнала скидывает на ноль, если сигнал долго поступает от передатчика, то TSOP опять ставит сам 1 лог.

Причём мне удалось уже ловить на приёмники сигналы разной длительности и код который я дал, как раз и работает так.
Он довольно чётко распознаёт 3 сигнала, но передать пакет сигналов не выходит.

Ктому же у меня есть подозрения, что при передаче питание батарейное проседает и частота у МК начинает гулять.
Я подумывал о смене резистора 100 Ом на 500 Ом.
Сам диод ИК 30МВт. То есть ток 10мА, что означает нужен резистор на 300 Ом.

Если я где ошибся поправьте плиз.

Сообщение отредактировал Папа Карло - Feb 16 2008, 21:43
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 17 2008, 19:22
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Потестил с пультом от телека контроллер.
Тестировал только приём импульса любого.
Приём отличный со всех углов.
С передатчика же принимает под меньшим углом и вдвое меньшей дальности.

Выходит у меня передатчик не настроен на частоту 30кГц или частота меняется при подаче импульсов.

Заменил резистор на ИК диоде на 1 кОм, качество приёма не изменилось совсем.

Подскажите пожалуйста как лучше настроить и подавать импульсы 30кГц на attiny13V ?


Подключил ИК диод сразу к ноге МК и приём сразу стал лучше раза в 1.5.

И с больших углов принимает и дальше ловить стал.
Осталось как, то настроить МК точно на 30кГц, но боюсь это сделать не выйдет без осциллографа на attiny13.

Наверно мне надо было взять МК с кварцем, тогда можно было бы точно настроить МК.
Go to the top of the page
 
+Quote Post
Alex_Pol
сообщение Feb 17 2008, 20:38
Сообщение #5


Частый гость
**

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



Цитата(Папа Карло @ Feb 17 2008, 21:22) *
Заменил резистор на ИК диоде на 1 кОм, качество приёма не изменилось совсем...
Подскажите пожалуйста как лучше настроить и подавать импульсы 30кГц на attiny13V ?
Подключил ИК диод сразу к ноге МК и приём сразу стал лучше раза в 1.5...
Наверно мне надо было взять МК с кварцем, тогда можно было бы точно настроить МК.
Вы R1 увеличили до 1к? И нечего не изменилось? Подключили светодиод на прямую к 5-й ноге и приём улучшился? Если так, у вас ключ не работает. Я так думаю. И не в частоте дело. Транзистор замените, что ли. Без осцила тяжко. З.Ы. Может, цифровой фотик есть? На ЖК-матрице ИК-светодиод отлично видно. З.З.Ы. Дело к ночи, соображаю туго, но скажите, на вашем ИК диоде прямое падение напряжения сколько? Может, он при питании 3В вообще не открывается?
З.З.З.Ы. Если правильно ошибаюсь, ток через диод равен I=(Uпит-Uпр)/R
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 18 2008, 07:34
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Так и делал, вначале сменил резистор со 100 Ом на 1 000 Ом. Потом ИК диод сразу подключил к ноге МК без резистора и транзистора.

И что интересно, когда я подключил диод прямо на ногу, то при изменении несущей частоты в два раза приёмник переставал принимать сигнал, а через транзистор с резистором, приёмник принимал сигнал даже если несущую изменить как угодно crying.gif

Вот данные на ИК диод:

Мощность излучения P,мВт: 30
Прямое напряжение,В: 1.2
при токе Iпр.,мА: 20
Длина волны,нм: 940
Ширина спектра излучения,нм: 50
Видимый телесный угол,град: 30
Максимальное время нарастания импульса,нс: -
Максимальное время спада импульса,нс: -
Максимальное обратное напряжение,В: 5
Максимальный прямой ток,мА: 50
Максимальный импульсный прямой ток,мА: 1200
Способ монтажа: в отверстие
Рабочая температура,С: -40...85
Производитель: Kingbright Electronic Co. Ltd.

Сообщение отредактировал Папа Карло - Feb 18 2008, 07:44
Go to the top of the page
 
+Quote Post
Alex_Pol
сообщение Feb 18 2008, 11:27
Сообщение #7


Частый гость
**

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



Цитата(Папа Карло @ Feb 18 2008, 09:34) *
Так и делал, вначале сменил резистор со 100...Что интересно, когда я подключил диод прямо на ногу, то при изменении несущей частоты в два раза приёмник переставал принимать сигнал, а через транзистор с резистором, приёмник принимал сигнал даже если несущую изменить как угодно crying.gif

Ключ у вас не работает. Вам Serg_Mitin уже говорил: на светодиоде падает 1,2 вольта, на насыщенном транзисторе - где то 0,5 вольт. Остаётся 1,3 вольта. Для получения искомых 20 мА нужен резистор 1,3/0,02=65 Ом. Резистор R1 должен быть где - то 51 Ом. А порт может выдать миллиампер 30, в даташите посмотрите. Отпалите вы его нахрен. Или порт, или светодиод. З.Ы. Кондюк по питанию поставьте. Поближе к ключу. Микрофарад 40. Если вы меняете несущую, а ваш приёмник продолжает принимать сигнал, эт он не сигнал принимает, а какую то помеху.
2 модератор. Может, тему в раздел для начинающих?
Блин, только заметил. Диод Д2 чем занимается? Ещё 0,6 Вольта отжирает?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 18 2008, 12:01
Сообщение #8


Частый гость
**

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Цитата(Alex_Pol @ Feb 18 2008, 14:27) *
Ещё 0,6 Вольта отжирает?


Он для защиты от не правильного подключения, но уже можно и убрать его 05.gif
Кондёр уже поставил 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кГц.
Если что напутал поправьте плиз help.gif

Сообщение отредактировал Папа Карло - Feb 18 2008, 12:12
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Папа Карло   Приёмник и передатчик на ИК. Проблемы с передачей и приёмом.   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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01549 секунд с 7
ELECTRONIX ©2004-2016