|
|
  |
Приёмник и передатчик на ИК. Проблемы с передачей и приёмом., Схема и плата и софт, но вместе не работает хорошо... |
|
|
|
Feb 19 2008, 13:45
|
Частый гость
 
Группа: Участник
Сообщений: 76
Регистрация: 21-10-05
Пользователь №: 9 941

|
Из реальной старой работы: Было написано для tn12, можно напрямую перенести на13, при использовании внутреннего делителя. Использовалось без таймеров и прерываний из-за малой частоты тиньки(1,2МГц)
;****Подпрограма формирования возбуждения ИК-диода*********************************** light: cbi PORTB,LOCK ;включение ключа nop ; nop ;формирование излучения ИК-диода в течение 1,28 мс nop ;режим: 7 мкс излучение, 21 мкс - пауза nop ;46 импульсов возбуждения ; nop ; nop ;команды для подстройки длительности nop sbi PORTB,LOCK ;
inc swst ;формирование задержки в 21 мкс cpi swst,0x5B ;счет числа импульсов возбуждения(46) breq light_out ;46 имп. 1,28 мсек nop ; nop ; nop ; nop ldi temp,3 voz1_2: dec temp ; tst temp brne voz1_2 rjmp light light_out: ret
;******************************************************************************* ********
Питание ключа в передатчике использовалось 12В(батарея), токоограничительный резистор 10 Ом. Приемник 36кГц(тип не помню), ранее использовался в телевизорах. Дальность сильно зависит от импульсного тока через диод и точности частоты передатчик-приемник.
Успехов.
Сообщение отредактировал bbill - Feb 19 2008, 13:46
|
|
|
|
|
Feb 19 2008, 20:24
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(=GM= @ Feb 19 2008, 17:14)  У вас на выходе делителя частота 4800 кГц. Частота прерываний 4800/40=120 кГц. Согласны? Если не согласны, то объясните, откуда у вас ещё двойка в знаменателе взялась? Вот мои мысли подкрепленные ДШ. Формула ДШ для таймера по переполнению по OCR. Foc = Fcl/2*N*(1+OCR) Fcl частота генератора МК, Foc частота выхода с таймера. N = 1, делитель таймера Тоесть при 4 800 000 / 2 * 1 * (1+39) = 60 000 Гц. Так в чём у меня были вопросы по частоте я не мог понять почему у меня на выходе ноги 60 000 Гц. Когда, по идее, должно быть по формуле 60 000 Гц частота прерывания и делим на 2 для смены уровней и выходит 30 000 Гц. Так вот в ДШ уже в формуле посчитали 2 прерывания. И это "двойка" как раз и отвечает за это. Значит для получения частоты прерываний нужно из формулы убрать "двойку". Подтвердите или опровергните плиз мои заключения. конечная формула частоты прерываний у меня вышла: Foc = Fcl/N*(1+OCR) П.С. =GM= то есть то же самое, что у вас, но 40 не значение регистра OCR, чтоб делитель был 40 нужно вычесть 1.
Сообщение отредактировал Папа Карло - Feb 19 2008, 20:38
|
|
|
|
|
Feb 19 2008, 22:45
|

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

|
Цитата(Папа Карло @ Feb 19 2008, 20:24)  Формула ДШ для таймера по переполнению по OCR. Foc = Fcl/2*N*(1+OCR) Ну, прежде всего, формула приведена для частоты меандра на ноге OC0А. А для каждого периода будет два прерывания, значит выражение надо удвоить. Цитата(Папа Карло @ Feb 19 2008, 20:24)  Так в чём у меня были вопросы по частоте я не мог понять почему у меня на выходе ноги 60 000 Гц. Когда, по идее, должно быть по формуле 60 000 Гц частота прерывания и делим на 2 для смены уровней и выходит 30 000 Гц. Так вот в ДШ уже в формуле посчитали 2 прерывания. И это "двойка" как раз и отвечает за это. Значит для получения частоты прерываний нужно из формулы убрать "двойку". Подтвердите или опровергните плиз мои заключения. конечная формула частоты прерываний у меня вышла: Foc = Fcl/N*(1+OCR) Как-то вы тут немного сумбурно выражаетесь(:-). Я уже сказал в посте выше, что у вас частота прерываний составляет 120 кГц. Если разрешите выход ноги OC0А, можете померять, будет 60 кГц. А вам надо 30 кГц, в этом вся загвоздка для вашей программы, которая решается элементарно - вместо числа 39 запишите число 79 в OCR0А, да и всё. Вот почему, я думаю, у вас была плохая чувствительность, у вас каждый импульс фактически состоял из двух импульсов удвоенной частоты.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 20 2008, 06:50
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(=GM= @ Feb 20 2008, 01:45)  у вас была плохая чувствительность Не поверите, но оказалось, что у джойстика был дохлый ИК диод А после смены ИК диода чувствительность стала хорошей, но одинаково работало, что с несущей с делителем 39, что с 79 Сейчас ещё проверю и отпишу. --------------- Проверил ... На удвоенной частоте приём лучше, чем на стандартной. Что и как я мерил. Настроил одинаково таймеры на приёмнике и передатчике. И передавал единичный импульс по нажатию кнопки. На передатчике 4 кнопки. Одна передаёт импульс 20 тактов, вторая 30, третья 50, четвёртая 70. Импульсы 20 и 30 тактов ловились хорошо и на обычном режиме и на удвоенном в комнате. Но на удвоенном ловились чётко импульсы 20 и 30 даже из коридора. А на обычной ловился чётко только 20. Дистанция, команда 15 метров по диагонали и коридор 2-3 метра.
Сообщение отредактировал Папа Карло - Feb 20 2008, 07:20
|
|
|
|
|
Feb 20 2008, 12:39
|

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

|
Цитата(Папа Карло @ Feb 20 2008, 06:50)  На удвоенной частоте приём лучше, чем на стандартной По-хорошему, так не должно быть. Приёмники тсоп1730 есть и на 30 кГц, и на 33, и на 36,... Вы уверены, что ваш приёмник рассчитан на приём именно 30? Такое впечатление по вашим рассказам создаётся, что приёмник не чувствителен к частоте, это по крайней мере странно. Попробуйте найти оптимум по частоте. Ну и ищите баги в программе, вы что ж думаете, нашли один и всё? Каждая, сколько угодно малая программа имеет по крайней мере одну ошибку(:-). Вот к примеру в вашей программе по приёму, когда вы устанавливаете переменную pulse, неплохо бы её обнулить на входе, поскольку может быть неоднозначность на выходе...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 20 2008, 13:00
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

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

|
Написал программу для передатчика. Отправляет пакет данных из 8 бит. 2 старт бита, 5 бит данных и один стоп бит. Протокол по типу RC5. только не 14 бит. Протестил прогу в VMLAB, вроде работает хорошо. Если будут советы или замечания буду рад.
Прикрепленные файлы
z3.rar ( 1.71 килобайт )
Кол-во скачиваний: 47
|
|
|
|
|
Feb 23 2008, 12:02
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Протестировал в VMLAB передатчик с таким кодом: Код interrupt [TIM2_COMP] void timer2_comp_isr(void) { if(pulse) {PORTD.0++;pulse--;} else PORTD.0 = 0;
timen1++; }
void ir_send (unsigned int byte) { if (!pulse && timen1 > 3000) { pulse = byte; while(!pulse) #asm("nop"); timen1 = 0; while(timen1 < byte) #asm("nop"); pulse = byte; while(!pulse) #asm("nop"); timen1 = 0; } } Настройки таймера: Код // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 4800,000 kHz // Mode: CTC top=OCR2 // OC2 output: Disconnected ASSR=0x00; TCCR2=0x09; TCNT2=0x00; OCR2=79; И у меня всё время в прерывании висела программа. Частота МК 4.8МГц внутренний генератор. Возможно ли, что МК просто не хватает времени обрабатывать прерывания ?
|
|
|
|
|
Feb 23 2008, 19:00
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Цитата(vet @ Feb 23 2008, 20:45)  Просто нужно знать, что такой режим существует. Допустим я завёл таймер и по сравнению и он инвертирует ногу. И у меня меандр генерируется аппаратно. Но тогда мне передавать пакет данных придётся уже не в фоновом режиме и без прерываний. И как же считать точно отрезки времени, если прерывания нету и счётчика?
|
|
|
|
|
Feb 23 2008, 19:46
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(Папа Карло @ Feb 23 2008, 22:00)  Просто нужно знать, что такой режим существует. Битовое поле в регистре TCCR2. Цитата(Папа Карло @ Feb 23 2008, 22:00)  Допустим я завёл таймер и по сравнению и он инвертирует ногу. И у меня меандр генерируется аппаратно.
Но тогда мне передавать пакет данных придётся уже не в фоновом режиме и без прерываний. почему бы нет? просто прерывание будет генерироваться другим счетчиком, по другому условию (выдача следующего бита), и будет происходить намного реже. Цитата(Папа Карло @ Feb 23 2008, 22:00)  И как же считать точно отрезки времени, если прерывания нету и счётчика? другим счётчиком. приёмнику безразлично, в какой фазе мы прервем меандр при передаче бита.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|