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

 
 
 
Reply to this topicStart new topic
> Опять RC-5, Не работает ни в какую...
hd44780
сообщение Jun 7 2007, 08:28
Сообщение #1


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Пытаюсь написать декодер RC-5.
ATMega32, 16 MHz (внешний кварц), датчик на PD2 (INT0), на этой же ноге pull-up 4.7 кил.
Питание от USB, FT232BM. Там еше LCD 20x4 висит.

Перебрал массу примеров, прошивок - ничего. Одни не работают вообще, другие дают неправильные коды (у многих клавиш получаются одинаковые коды).
Пульт четко RC-5 (по программе RC Explorer + схема WinLIRC на COM-порт).

В итоге написал свою реализацию - см. вложение.

ПРи работе выдает лог в USART. Анализируя логи, увидел, что вылетает на проверке мачестерского кода (значения). Почему-то считываются все единицы.

Кто-нибудь глянет, м.б. у меня уже глаз на этот RC-5 замылился...
Прикрепленные файлы
Прикрепленный файл  RC5testCVavr.zip ( 13.77 килобайт ) Кол-во скачиваний: 89
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
sadat
сообщение Jun 8 2007, 07:42
Сообщение #2


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

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Не любитель я для простых задач Си использовать, в асме все гораздо легче (погу выслать работающую программу).
Но посоветую вот что:
1. от звуковой карты вход LINE IN выведи три проводка - ноль устройства, левый канал на выход ИК приемника, правый - на какой нибудь тестовый пин МК.
По каждой обработке таймера меняй выход тестового пина на противоположный.
Выглядит следующим образом: включаешь SOUND FORGE на запись с линейного входа, включаешь устройство и смотришь, что оно у тебя там обрабатывает. Так сказать, простейший запоминающий осциллограф. Сразу все и поймешь.
2. "Висеть" в прерывании (delay (445)) - это "некрасиво" с точки зрения расходования ресурсов. Лучше настрой прерывание по изменению уровня на входе, по срабатыванию - загружаешь в таймер время 1/4 от периода, по переполнению таймера - обработка, что же там на входе.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 8 2007, 12:26
Сообщение #3


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Вышли пожалуйста на hd44780@yandex.ru, посмотрю.

А звуковуха от 5 вольтовых уровней не погорит?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
GDI
сообщение Jun 8 2007, 13:16
Сообщение #4


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

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



У атмела есть аппликуха по RC-5, на www.avrfreaks.net есть проекты с RC5.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
VXDRV
сообщение Jun 8 2007, 23:54
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Цитата(hd44780 @ Jun 8 2007, 15:26) *
А звуковуха от 5 вольтовых уровней не погорит?

А для этого надо делитель сделать.
Go to the top of the page
 
+Quote Post
SSG
сообщение Jun 12 2007, 14:30
Сообщение #6





Группа: Новичок
Сообщений: 1
Регистрация: 20-03-07
Пользователь №: 26 338



Посмотри Про RC5 на робофоруме. Я там переделанные исходники выложил. Где-то когда-то слил и дорабатывал. Все оч. хорошо работает на меге 32, тока кварц 4МГц.
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Jun 12 2007, 15:16
Сообщение #7


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

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Цитата
А звуковуха от 5 вольтовых уровней не погорит?

не погорит, у меня встроенная, я туда TTL пихал, все работало


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 13 2007, 05:47
Сообщение #8


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Спасибо, глянем.

Кверц на 4 есть. Если пойдет, попробуем на 16 переделать.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Jun 14 2007, 20:05
Сообщение #9


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

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(hd44780 @ Jun 7 2007, 12:28) *
Перебрал массу примеров, прошивок - ничего. Одни не работают вообще, другие дают неправильные коды (у многих клавиш получаются одинаковые коды).


Вникать не стал. Вкратце, по собственному опыту. Большинство примеров,
включая из многих application notes -- проблемные. По двум пунктам --
халявной реализацией приёмника и монопольным использованием
ЦПУ на момент декодирования посылки, что невозможно в практически
любом более-менее серьёзном проекте. Манчестерский код --
по сути относительная фазовая модуляция (поправьте если не прав),
и принимается соответствующим образом -- путём перемножения
задержанного на период несущей (и одновременно -- битовый интетвал) сигнала
с текущим его значением и суммирования результата. Одновременно
выполняется подстройка по фазе. Поскольку вход двоичный, то все операции сводятся
к XOR и подсчёту числа установленных битов в байте, на битовый интервал
считывается 8 значений -- ровно на байт. Подстройка фазы/частоты осуществляется
аналогичным образом (в теории положена петля костаса и др. ужосы, но практически
всё сводится к принятию решения о пропуске/вставке лишнего 1/8 бита на каждом
битовом интервале по результату перемножения последних 8-бит на 0x0f и подсчёту
сброшенных/установленных разрядов). В результате на каждом битовом интервале имеем значение
-4..+4 характерезующее принятый бит как 0..1 с некоторой вероятностью. Алгоритм
запускается с частотой 8*Fнесущая (высокая точность тут не нужна в силу особенности
(де)кодирования), считывает с порта очередное входное значение
и выдаёт декодированные байты, которые разбираются отдельным автоматом.

Цитата
Кто-нибудь глянет, м.б. у меня уже глаз на этот RC-5 замылился...


Разглядывать чужие баги -- неблагодарное занятие...


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 14 2007, 21:14
Сообщение #10


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Kirill Frolov @ Jun 15 2007, 00:05) *
Вникать не стал. Вкратце, по собственному опыту. Большинство примеров,
включая из многих application notes -- проблемные. По двум пунктам --
халявной реализацией приёмника и монопольным использованием
ЦПУ на момент декодирования посылки, что невозможно в практически
любом более-менее серьёзном проекте.

Можно полюбопытствовать, из Вашего опыта, какой процент использования ЦП для
декодирования RC5 у Вас получился ?
Что такое "халявной реализацией приёмника" ниасилил 07.gif
Цитата
Манчестерский код --
по сути относительная фазовая модуляция (поправьте если не прав),
и принимается соответствующим образом -- путём перемножения
задержанного на период несущей (и одновременно -- битовый интетвал) сигнала
с текущим его значением и суммирования результата. Одновременно
выполняется подстройка по фазе. Поскольку вход двоичный, то все операции сводятся
к XOR и подсчёту числа установленных битов в байте, на битовый интервал
считывается 8 значений -- ровно на байт. Подстройка фазы/частоты осуществляется
аналогичным образом (в теории положена петля костаса и др. ужосы, но практически
всё сводится к принятию решения о пропуске/вставке лишнего 1/8 бита на каждом
битовом интервале по результату перемножения последних 8-бит на 0x0f и подсчёту
сброшенных/установленных разрядов). В результате на каждом битовом интервале имеем значение
-4..+4 характерезующее принятый бит как 0..1 с некоторой вероятностью. Алгоритм
запускается с частотой 8*Fнесущая (высокая точность тут не нужна в силу особенности
(де)кодирования), считывает с порта очередное входное значение
и выдаёт декодированные байты, которые разбираются отдельным автоматом.

Вы знаете, как-то у Вас все слишком сложно, с первого раза ниасилил...
Вабще-то для приема кода аля RC5, даже при передаче через радиоканал
достаточно пары прерываний (INT & TIMER), и в каждом обработчике
команд по 20-30 на ASM.

Цитата
Разглядывать чужие баги -- неблагодарное занятие...

Лучше разглядывать чужие чем плодить свои biggrin.gif

2 hd44780:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr ( void )
{
delay_us ( 445 ); // 445 mks = 1/4 такта RC5 - 1.778 / 4 = 444.5 mks

Я думаю, что для начала, нужно избавится от этой задержки в прерывании
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 15 2007, 05:19
Сообщение #11


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Не катит никак, сейчас асмовские примеры смотрю (AT90S2313, 4 MHz), потом отпишусь.

Сообщение отредактировал hd44780 - Jun 15 2007, 05:27


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 16 2007, 21:56
Сообщение #12


Ambidexter
*****

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



Цитата(singlskv @ Jun 14 2007, 21:14) *
2 hd44780:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr ( void )
{
delay_us ( 445 ); // 445 mks = 1/4 такта RC5 - 1.778 / 4 = 444.5 mks

Я думаю, что для начала, нужно избавится от этой задержки в прерывании


Добавлю, там у вас потери одной секунды в минуте, одной минуты в часе, и одного часа в сутках.
Ничего страшного, но лучше поправить(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

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

 


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


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