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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Приёмник и передатчик на ИК. Проблемы с передачей и приёмом., Схема и плата и софт, но вместе не работает хорошо...
=GM=
сообщение Feb 19 2008, 13:33
Сообщение #31


Ambidexter
*****

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



Цитата(Папа Карло @ Feb 19 2008, 12:40) *
Жёстко вы меня crying.gif

Прошу пардону, пост неправильный, с какого-то перепугу решил, что у вас мега128. Да и спрашивал я про наличие регистров в меге128, а не в тайни13.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bbill
сообщение Feb 19 2008, 13:45
Сообщение #32


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

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 19 2008, 14:14
Сообщение #33


Ambidexter
*****

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



Цитата(Папа Карло @ Feb 19 2008, 12:40) *
Жёстко вы меня crying.gif

Ну что ж, буду исправляться(:-). У вас на выходе делителя частота 4800 кГц. Частота прерываний 4800/40=120 кГц. Согласны? Если не согласны, то объясните, откуда у вас ещё двойка в знаменателе взялась?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
GDI
сообщение Feb 19 2008, 14:42
Сообщение #34


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата

Любые ДШ хоть на тини, хоть на мега лучше смотреть на atmel.com, там они по определению свежее всех


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 19 2008, 20:24
Сообщение #35


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

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 19 2008, 22:45
Сообщение #36


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А, да и всё. Вот почему, я думаю, у вас была плохая чувствительность, у вас каждый импульс фактически состоял из двух импульсов удвоенной частоты.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 20 2008, 06:50
Сообщение #37


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

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



Цитата(=GM= @ Feb 20 2008, 01:45) *
у вас была плохая чувствительность


Не поверите, но оказалось, что у джойстика был дохлый ИК диод 1111493779.gif
А после смены ИК диода чувствительность стала хорошей, но одинаково работало, что с несущей с делителем 39, что с 79 07.gif

Сейчас ещё проверю и отпишу.

---------------

Проверил ...
На удвоенной частоте приём лучше, чем на стандартной.

Что и как я мерил.
Настроил одинаково таймеры на приёмнике и передатчике.
И передавал единичный импульс по нажатию кнопки.
На передатчике 4 кнопки.
Одна передаёт импульс 20 тактов, вторая 30, третья 50, четвёртая 70.
Импульсы 20 и 30 тактов ловились хорошо и на обычном режиме и на удвоенном в комнате.

Но на удвоенном ловились чётко импульсы 20 и 30 даже из коридора.
А на обычной ловился чётко только 20.
Дистанция, команда 15 метров по диагонали и коридор 2-3 метра.

Сообщение отредактировал Папа Карло - Feb 20 2008, 07:20
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 20 2008, 12:39
Сообщение #38


Ambidexter
*****

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



Цитата(Папа Карло @ Feb 20 2008, 06:50) *
На удвоенной частоте приём лучше, чем на стандартной

По-хорошему, так не должно быть. Приёмники тсоп1730 есть и на 30 кГц, и на 33, и на 36,... Вы уверены, что ваш приёмник рассчитан на приём именно 30? Такое впечатление по вашим рассказам создаётся, что приёмник не чувствителен к частоте, это по крайней мере странно. Попробуйте найти оптимум по частоте.

Ну и ищите баги в программе, вы что ж думаете, нашли один и всё? Каждая, сколько угодно малая программа имеет по крайней мере одну ошибку(:-). Вот к примеру в вашей программе по приёму, когда вы устанавливаете переменную pulse, неплохо бы её обнулить на входе, поскольку может быть неоднозначность на выходе...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 20 2008, 13:00
Сообщение #39


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

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



Цитата(=GM= @ Feb 20 2008, 15:39) *
одну ошибку


У меня там столько ошибок, что страшные демоны плачут от ужаса...

Но стоит TSOP1730 и хз что там и как.
Сейчас программу переписываю.

Сообщение отредактировал Папа Карло - Feb 20 2008, 13:02
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 20 2008, 21:01
Сообщение #40


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

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



Написал программу для передатчика.

Отправляет пакет данных из 8 бит.
2 старт бита, 5 бит данных и один стоп бит.
Протокол по типу RC5. только не 14 бит.

Протестил прогу в VMLAB, вроде работает хорошо.

Если будут советы или замечания буду рад.
Прикрепленные файлы
Прикрепленный файл  z3.rar ( 1.71 килобайт ) Кол-во скачиваний: 47
 
Go to the top of the page
 
+Quote Post
AntonS
сообщение Feb 22 2008, 15:04
Сообщение #41


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

Группа: Свой
Сообщений: 80
Регистрация: 10-02-06
Из: Киев
Пользователь №: 14 208



TSOP-ы хорошо принимают только короткие пачки импульсов! Сам когда-то наступал на такие грабли... Подайте короткую пачку на несущей частоте (в данном случае 30 кГц), а затем сделайте паузу. Исходя из этого планируйте свой протокол передачи данных. Для примера посмотрите тестовый сигнал в даташите на TSOP.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 23 2008, 12:02
Сообщение #42


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

Группа: Новичок
Сообщений: 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МГц внутренний генератор.

Возможно ли, что МК просто не хватает времени обрабатывать прерывания ?
Go to the top of the page
 
+Quote Post
vet
сообщение Feb 23 2008, 17:45
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Папа Карло,
я так понимаю, вы формируете меандр дерганием ноги в прерывании?
почему бы не использовать штатный аппаратный режим таймера с инверсией ноги OC2 и не обойтись таким образом без этого прерывания вообще?
или переделка платы не допускается по условиям задачи?


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Feb 23 2008, 19:00
Сообщение #44


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

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



Цитата(vet @ Feb 23 2008, 20:45) *


Просто нужно знать, что такой режим существует.

Допустим я завёл таймер и по сравнению и он инвертирует ногу.
И у меня меандр генерируется аппаратно.

Но тогда мне передавать пакет данных придётся уже не в фоновом режиме и без прерываний.

И как же считать точно отрезки времени, если прерывания нету и счётчика?
Go to the top of the page
 
+Quote Post
vet
сообщение Feb 23 2008, 19:46
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(Папа Карло @ Feb 23 2008, 22:00) *
Просто нужно знать, что такой режим существует.

Битовое поле в регистре TCCR2.

Цитата(Папа Карло @ Feb 23 2008, 22:00) *
Допустим я завёл таймер и по сравнению и он инвертирует ногу.
И у меня меандр генерируется аппаратно.

Но тогда мне передавать пакет данных придётся уже не в фоновом режиме и без прерываний.

почему бы нет?
просто прерывание будет генерироваться другим счетчиком, по другому условию (выдача следующего бита), и будет происходить намного реже.

Цитата(Папа Карло @ Feb 23 2008, 22:00) *
И как же считать точно отрезки времени, если прерывания нету и счётчика?

другим счётчиком.
приёмнику безразлично, в какой фазе мы прервем меандр при передаче бита.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post

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

 


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


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