Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 63
Из них просматривают:
Аналоги: 10. Видео: 1. Галерея: 1. Даташиты: 10. Новости: 9. Остальное: 5. Производители: 2. Профиль пользователя: 3. Расчёты: 1. Теги: 1. Форум: 20.
Участников: 2
Гостей: 61

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
Я вот разрабатываю приемник и передатчик по ИК каналу. Сейчас разрабатываю свой протокол по Т, 2Т сони технологии.
Т, 2Т. Т-0, 2Т-1. Передаю 2 бита старта. 8 бит адреса и 8 бит данных.
Декодер я делал по прерыванию 8 битного таймера. По переполнению считает низкий уровень и битовый флаг 1. Как только высокий уровень флаг в 0. Проверяет условие. Определяет время, сравнивая с константой. Кладет его в буфер типа FIFO. Отту в основной прогр. Сравнивает все и выполняет событие если истина. Все это реализовываю в таймере. Да кстати 1 - 2мС, 0- 1м, старт бит - 500 мкС.
Таймер оказывается все не успевает делать. Если по внешнему прерыванию делать, то я пока что- то не совсем понимаю. Перегрев)))
Помогите пожалуйста. Как правильно и лучше это реализовать.
А то я уже совсем запутался
Может у кого пример кода есть.
P.S. Программирую на С. В азме только проверяю как выглядит код



Re: Проблема с декодером
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
Необходимо измерять длительность импульсов с помощью схемы захвата таймера. Импульс принимается если его длительность +/- 25 % от базовой. Ну и на 2,5 мс каждый раз заводим таймер другой на переполнение- если произошло- то таймаут посылки и не RC5 код- очистка флагов и ждем начала. Длительность стартового импульса вообще не проверяем- она будет искажена из-за АРУ приемника.



Re: Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
Спасибо более понятнее стало!
В смысле:"если произошло"? И как проверить не RC5 code?



Re: Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
И еще вопрос. Как реализовать буфер для чтения принятых данных?



Re: Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
Извините, что пишу не сразу все. Вопросы постепенно лезут)))
Не могу понять зачем другой таймер и для чего 2.5 мС?



Re: Проблема с декодером
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
2,5 мс это 2 мс +25% т.е. если время вышло-тогда вся полученная посылка не соответсвует кодировке. Полученный код необходимо очистить и сбросить все флаги. Напишите на бумаге словами как вы видите весь алгоритм работы, последовательно уточняя каждую его часть. Получать можно с помощью битового сдвига и логической ИЛИ.



Re: Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
Дело в что 16 битный таймер занят.
Я написал след. образом:
1) иниц. внешн. прерыв. по люб. лог. уровню и 2-го таймера 8-ми битного по переполнению каждые 12 мкС.
2) Если прих. 0: запуск таймера счета для вычисления длины импульса при помощи переменной timecount(в прерывании использую только timecount++) и уст. флаг.
3)если прих. 1: ост. таймер и сброс флага
4)Если сброшен флаг и есть счет(timecount): то провер. счет, если в одном диапазоне для 1 мС, то в 16 символьный массив с опред. индексом(buffer[wr]) помещаем 0; а если в дипазоне для 2 мС, то ... 1.
5) увелич индекс wr и сравн. его с размером массива 16, если равен, то обнул. wr
6)увелич индекс counter и сравн. его с размером массива 16, если равен, то обнул. counter.
7) пишим макрос:
а. объявляем перем. дата для хранения
б. ждем пока counter равен 0
в. как только counter не равен 0, то data=buffer[rd]
г. увелич индекс rd и сравн. его с размером массива 16, если равен, то обнул. rd.
д. запрещ. все прерыв.; пониж. счетчик; разреш. прерыв;
е. возвращ. в ф-ю data (return data).
8) Дальше просто последов. провер:
Например, если передаю 0х6F = ob01101111, то проверяю так
if (getchar() ==0 && getchar() ==1 && getchar() ==1 && getchar() ==0 ... ) PORTC.2=1; // выкл. LED

P.S. если оставишь мыло свое, то могу скинуть код.
Писал на С



Re: Проблема с декодером
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
Код можно прикрепить сюда архивом. Не заметил в алгоритме сбросов по таймауту посылки. Закидывать биты в байты можно напрямую, а не через ж..у :
unsigned int code=0;
code=code<<1;
if(принята "1") code |=(1U<<index);


Отредактировано пользователем MACTEP 05.07.2011 18:45:57


Re: Проблема с декодером
Главный Технолог
Зарегистрирован:
01.07.2011 19:44
Из: Тольятти
Сообщений: 305
Не в сети
Так в этом то и проблема что не занятый только 1 таймер. Там есть один из вариантов преобразования в байт. Через косвенную адресацию делал(указатели). А потом проверка этих байтов(tmpdata - переменная для хранения байтов). в условии проверяю и потом уже действие в зависимости от рез-та истинности условия. Посмотри, пожалйста.
P.S. Спасибо, что помогаешь)))

Это все я делаю на отдельных макетках. На которых разрабатываю протокол.(отдельная программа)
А в самом уст-ве задействовано АЦП, таймер 1, таймер 0, TWI(I2C).

Прикреплённый файл:


zip irda.zip Размер: 2.74 KB; Просмотры: 442



Re: Проблема с декодером
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
где-то вот такой автомат состояний

Прикреплённый файл:


zip irda.zip Размер: 1.57 KB; Просмотры: 357



Поиск по форуму


Расширенный поиск

Разное

Интересно

Пайка SMD резисторов и прочих компонентов обычным паяльником: