Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опять RC-5
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
hd44780
Пытаюсь написать декодер RC-5.
ATMega32, 16 MHz (внешний кварц), датчик на PD2 (INT0), на этой же ноге pull-up 4.7 кил.
Питание от USB, FT232BM. Там еше LCD 20x4 висит.

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

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

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

Кто-нибудь глянет, м.б. у меня уже глаз на этот RC-5 замылился...
sadat
Не любитель я для простых задач Си использовать, в асме все гораздо легче (погу выслать работающую программу).
Но посоветую вот что:
1. от звуковой карты вход LINE IN выведи три проводка - ноль устройства, левый канал на выход ИК приемника, правый - на какой нибудь тестовый пин МК.
По каждой обработке таймера меняй выход тестового пина на противоположный.
Выглядит следующим образом: включаешь SOUND FORGE на запись с линейного входа, включаешь устройство и смотришь, что оно у тебя там обрабатывает. Так сказать, простейший запоминающий осциллограф. Сразу все и поймешь.
2. "Висеть" в прерывании (delay (445)) - это "некрасиво" с точки зрения расходования ресурсов. Лучше настрой прерывание по изменению уровня на входе, по срабатыванию - загружаешь в таймер время 1/4 от периода, по переполнению таймера - обработка, что же там на входе.
hd44780
Вышли пожалуйста на hd44780@yandex.ru, посмотрю.

А звуковуха от 5 вольтовых уровней не погорит?
GDI
У атмела есть аппликуха по RC-5, на www.avrfreaks.net есть проекты с RC5.
VXDRV
Цитата(hd44780 @ Jun 8 2007, 15:26) *
А звуковуха от 5 вольтовых уровней не погорит?

А для этого надо делитель сделать.
SSG
Посмотри Про RC5 на робофоруме. Я там переделанные исходники выложил. Где-то когда-то слил и дорабатывал. Все оч. хорошо работает на меге 32, тока кварц 4МГц.
Pyku_He_oTTyda
Цитата
А звуковуха от 5 вольтовых уровней не погорит?

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

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


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

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


Разглядывать чужие баги -- неблагодарное занятие...
singlskv
Цитата(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

Я думаю, что для начала, нужно избавится от этой задержки в прерывании
hd44780
Не катит никак, сейчас асмовские примеры смотрю (AT90S2313, 4 MHz), потом отпишусь.
=GM=
Цитата(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

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


Добавлю, там у вас потери одной секунды в минуте, одной минуты в часе, и одного часа в сутках.
Ничего страшного, но лучше поправить(:-).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.