|
|
  |
алгоритм для записи пульта в AVR, помогите пожалуйста :( |
|
|
|
May 12 2008, 09:51
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 12:44)  если я буду брать знаяение TCNTx, мне больше не надо по моему прерывание от таймера и здесь модуляция ни причем прерывание от таймера происходит при слишком длительной паузе. По нему определяется окончание посылки. Про модуляцию я сказал к тому, что длина импульса на выходе из приемника не может быть меньше 26мкс.
|
|
|
|
|
May 12 2008, 09:53
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Цитата(adc @ May 12 2008, 13:30)  А в чем вопрос? Поскольку приемник детектирует сигнал (обрезает засветки и помехи) то на выходе у него последовательность импульсов с интервалами в зависимости от протокола. Достаточно принимаемым контроллером определить присутствие импульсов (вообще любых!!!) и это и будет условием переключения, включения, уменьшения/увеличения яркости. Уменьшение/увеличение яркости делаем так: Опрос входа(периодичность хоть 1 сек) на наличие импульсов (любых импульсов) есть значит увеличиваем. Закончились- ждем следущей непрерывной посылки при которой будем уменьшать яркость и т.д. вход в режим регулировки (чтобы случайно не срабатывало при управлении тв) можно установить по присутствию сигнала с условными интервалами пакетов. Может вас этот вариант устроит... Есть только вопрос с пультами которые посылают после отправки команды короткие команды подтверждения.. но думаю можно решить это алгоритмами в контроллере. нет это не устроивает  , по моему оптимальный вариант, это сначало записать в EEPROM а потом сравнить
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
May 12 2008, 09:58
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 12:53)  по моему оптимальный вариант, это сначало записать в EEPROM а потом сравнить Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие.
|
|
|
|
|
May 12 2008, 10:04
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Цитата(Клим @ May 12 2008, 13:58)  Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие. я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника, паузы между импулсами меняются??? пробал разные пульты.
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
May 12 2008, 10:13
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 13:04)  я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника, паузы между импулсами меняются??? пробал разные пульты. Насколько сильно меняются ? Осциллограмму в студию
|
|
|
|
|
May 12 2008, 11:16
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Цитата(Клим @ May 12 2008, 14:13)  Насколько сильно меняются ? Осциллограмму в студию  сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф  Цитата(VAHOO @ May 12 2008, 14:39)  сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф  с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
May 12 2008, 11:28
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 14:16)  сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф  с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс  Вообще мерять при 5см - это не правильно. Можно сравнивать метр и 3 метра. Погрешность в 4% как у вас это вполне приемлимо. Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5?
|
|
|
|
|
May 12 2008, 11:41
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Цитата(Клим @ May 12 2008, 15:28)  Вообще мерять при 5см - это не правильно. Можно сравнивать метр и 3 метра. Погрешность в 4% как у вас это вполне приемлимо. Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5? пульт протокол NEC, а расстояние между пульта и фотоприемника, паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м) Цитата(DpInRock @ May 12 2008, 15:16)  Вы читали или не читали мою ссылку? В пустую, что-ли? Ничего там не меняется. Сто раз делал такие приемники.
Алгоритм простой. Измеряете длительность посылок 0 и 1. Сохраняете эти числа в РАМ. Все. Дальше их можно превратить в код (см. документацию про RC5). А можно и не превращать. Тогда сравнивать одну посылку с другой следует с неким допуском погрешности для измеренных числе.
Задача очень простая. да читал вашу ссылку, " Измеряете длительность посылок 0 и 1." как? вот в чем вапрос, у разных пультов разные определение в 0 и 1
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
May 12 2008, 11:49
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 14:41)  пульт протокол NEC, а расстояние между пульта и фотоприемника, паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м) Зато длина импульса уменьшится  Это вполне нормальные цифры. Цитата " Измеряете длительность посылок 0 и 1." как? вот в чем вапрос, у разных пультов разные определение в 0 и 1 Если вы имеете в виду логический протокол - то забудьте про него. Тут есть выход с приемника у которого - 0 когда идут ИК импульсы с частотой 38кгц и лог.1 - когда не идут. Вот время между сменами состояние и надо мерять. Причем не настолько точно.
|
|
|
|
|
May 12 2008, 14:32
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику. Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей. Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки). Если столько места нет, то превращать эти длительности тупо в биты. Например, замерили вы следущее: 100, 30, 47, 210, 150 каких нибудь единиц времени. Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты:
11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды.
--------------------
On the road again (Canned Heat)
|
|
|
|
|
May 12 2008, 15:20
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
Цитата Можно же сразу анализировать 1 или 0 и писать в память сод посылки. 1. Нам неизвестна природа посылки. 2. Нам неизвестна скорость передачи 3. Единственное, что мы знаем наверняка, это то, что из приемника выходит некая последовательность уровней. Эти последовательности обычно разделены паузой. Все. Записывая же напрямую битовую последовательность, мы можем напороться (и скорее всего напоремся) на ЛИШНИЕ или недостающие биты (из-за незнания точной скорости и из-за неумение ее точно поддерживать, как нами так и передатчиком). То, как я описал - я лично делал. Работало со всеми пультами, которые видел приемник. Т.е. обучаемость была очень высокая. С полтыка.
--------------------
On the road again (Canned Heat)
|
|
|
|
|
May 12 2008, 17:19
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Цитата(DpInRock @ May 12 2008, 18:32)  У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику. Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей. Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки). Если столько места нет, то превращать эти длительности тупо в биты. Например, замерили вы следущее: 100, 30, 47, 210, 150 каких нибудь единиц времени. Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты:
11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды. тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему, если не жалко поделитесь с кодом
Сообщение отредактировал VAHOO - May 12 2008, 17:21
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
May 12 2008, 17:36
|
Местный
  
Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541

|
Цитата(VAHOO @ May 12 2008, 20:19)  тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему,
если не жалко поделитесь с кодом Да последоваельность будет именно такая. Только нас интересует длина каждого 0 и каждой диницы.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|