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

 
 
> Передача информации с помощью ИК, необходимо передавать 4 команды с одного контроллера на другой
eugmai86
сообщение Mar 20 2011, 15:15
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737



Доброго времени суток.
Пытаюсь передавать 4 команды от одного контроллера к другому. МК 1 Трансивер Tiny 13, приемник tiny2313. Передать одну команду(внешнее прерывание в тини) не проблема, все работает. А вот никак не могу разобраться с алгоритмом и его реализацией для нескольких команд.
Для передатчика использую следующий алгоритм:
Если нажата кнопка 1
-передаю 5 раз 20 импульсов с паузой 260мкс после каждого импульса
Если нажата кнопка 2
-передаю 10 раз 20 импульсов с паузой 260мкс после каждого импульса
...
Если нажата кнопка 4
-передаю 20 раз 20 импульсов с паузой 260мкс после каждого импульса


Приемник должен гонять таймер с частотой самого длинного импульса, в моем случае 26мкс(время 1 импульса)*20(кол-во пульсаций)*20(раз передается импульс)+260мкс(задержка после каждой пачки импульсов)*20(пачек импульсов)=15,6 мс. Что равно 64 Гц (если я не ошибаюсь).

В момент когда нажата кнопка на передатчике, на приемнике срабатывает внешнее прерывание

interrupt [EXT_INT0] void ext_int0_isr(void)
{
TCNT0=0xF0; //запускаем таймер 64 Гц, время самого длинного импульса
TCCR0B=0x04;

}

И в этот момент мне нужно посчитать сколько же было послано пачек 5,10, 15, или 20. Как не знаю. Застрял. Помогите. Может быть есть стандартные библиотеки для МК на этот случай.
Пишу в CVAVR
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Mar 20 2011, 16:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(eugmai86 @ Mar 20 2011, 18:15) *
И в этот момент мне нужно посчитать сколько же было послано пачек 5,10, 15, или 20. Как не знаю. Застрял. Помогите. Может быть есть стандартные библиотеки для МК на этот случай.
Пишу в CVAVR


Очень просто. Цифровой автомат.
Состояние S0: приемник ждет прерывания. При получении прерывания приемник переходит в S1
Состояние S1: приемник принимает импульсы (первые пять). При получении первых 5-ти импульсов, если через заданное время больше импульсов принято не было, то приемник считает, что это команда из пяти импульсов и переходит в S0. Если же импульсы были, то приемник переходит в S2.
Состояние S2: приемник принимает импульсы (очередные пять). При получении очередных 5-ти импульсов, если через заданное время больше импульсов принято не было, то приемник считает, что это команда из десяти импульсов и переходит в S0. Если же импульсы были, то приемник переходит в S3. И так далее.

Но так делать не надо. Почему бы просто не передавать команды по UART, защищая каждую команду (например, такую: "CMD1", "CMD2", ...) байтом CRC8 (или словом CRC16, или CRC32) ? Просто, стандартно, длина команды всегда постоянна, легко добавлять новые команды, реализаций CRC готовых масса ...

Сообщение отредактировал kovigor - Mar 20 2011, 16:07
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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