tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба если я буду брать знаяение TCNTx, мне больше не надо по моему прерывание от таймера и здесь модуляция ни причем прерывание от таймера происходит при слишком длительной паузе. По нему определяется окончание посылки. Про модуляцию я сказал к тому, что длина импульса на выходе из приемника не может быть меньше 26мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба А в чем вопрос? Поскольку приемник детектирует сигнал (обрезает засветки и помехи) то на выходе у него последовательность импульсов с интервалами в зависимости от протокола. Достаточно принимаемым контроллером определить присутствие импульсов (вообще любых!!!) и это и будет условием переключения, включения, уменьшения/увеличения яркости. Уменьшение/увеличение яркости делаем так: Опрос входа(периодичность хоть 1 сек) на наличие импульсов (любых импульсов) есть значит увеличиваем. Закончились- ждем следущей непрерывной посылки при которой будем уменьшать яркость и т.д. вход в режим регулировки (чтобы случайно не срабатывало при управлении тв) можно установить по присутствию сигнала с условными интервалами пакетов. Может вас этот вариант устроит... Есть только вопрос с пультами которые посылают после отправки команды короткие команды подтверждения.. но думаю можно решить это алгоритмами в контроллере. нет это не устроивает :( , по моему оптимальный вариант, это сначало записать в EEPROM а потом сравнить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба по моему оптимальный вариант, это сначало записать в EEPROM а потом сравнить Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие. я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника, паузы между импулсами меняются??? пробал разные пульты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника, паузы между импулсами меняются??? пробал разные пульты. Насколько сильно меняются ? Осциллограмму в студию :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Насколько сильно меняются ? Осциллограмму в студию :) сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф :) сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф :) с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Вы читали или не читали мою ссылку? В пустую, что-ли? Ничего там не меняется. Сто раз делал такие приемники. Алгоритм простой. Измеряете длительность посылок 0 и 1. Сохраняете эти числа в РАМ. Все. Дальше их можно превратить в код (см. документацию про RC5). А можно и не превращать. Тогда сравнивать одну посылку с другой следует с неким допуском погрешности для измеренных числе. Задача очень простая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу, по моему идеальный осциллограф :) с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс :crying: Вообще мерять при 5см - это не правильно. Можно сравнивать метр и 3 метра. Погрешность в 4% как у вас это вполне приемлимо. Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Вообще мерять при 5см - это не правильно. Можно сравнивать метр и 3 метра. Погрешность в 4% как у вас это вполне приемлимо. Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5? пульт протокол NEC, а расстояние между пульта и фотоприемника, паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м) Вы читали или не читали мою ссылку? В пустую, что-ли? Ничего там не меняется. Сто раз делал такие приемники. Алгоритм простой. Измеряете длительность посылок 0 и 1. Сохраняете эти числа в РАМ. Все. Дальше их можно превратить в код (см. документацию про RC5). А можно и не превращать. Тогда сравнивать одну посылку с другой следует с неким допуском погрешности для измеренных числе. Задача очень простая. да читал вашу ссылку, " Измеряете длительность посылок 0 и 1." как? вот в чем вапрос, у разных пультов разные определение в 0 и 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба пульт протокол NEC, а расстояние между пульта и фотоприемника, паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м) Зато длина импульса уменьшится :) Это вполне нормальные цифры. " Измеряете длительность посылок 0 и 1." как? вот в чем вапрос, у разных пультов разные определение в 0 и 1 Если вы имеете в виду логический протокол - то забудьте про него. Тут есть выход с приемника у которого - 0 когда идут ИК импульсы с частотой 38кгц и лог.1 - когда не идут. Вот время между сменами состояние и надо мерять. Причем не настолько точно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику. Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей. Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки). Если столько места нет, то превращать эти длительности тупо в биты. Например, замерили вы следущее: 100, 30, 47, 210, 150 каких нибудь единиц времени. Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты: 11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба А зачем писать массив? Можно же сразу анализировать 1 или 0 и писать в память сод посылки. http://fi-com.ru/mcu/rc5.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Можно же сразу анализировать 1 или 0 и писать в память сод посылки. 1. Нам неизвестна природа посылки. 2. Нам неизвестна скорость передачи 3. Единственное, что мы знаем наверняка, это то, что из приемника выходит некая последовательность уровней. Эти последовательности обычно разделены паузой. Все. Записывая же напрямую битовую последовательность, мы можем напороться (и скорее всего напоремся) на ЛИШНИЕ или недостающие биты (из-за незнания точной скорости и из-за неумение ее точно поддерживать, как нами так и передатчиком). То, как я описал - я лично делал. Работало со всеми пультами, которые видел приемник. Т.е. обучаемость была очень высокая. С полтыка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAHOO 0 12 мая, 2008 Опубликовано 12 мая, 2008 (изменено) · Жалоба У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику. Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей. Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки). Если столько места нет, то превращать эти длительности тупо в биты. Например, замерили вы следущее: 100, 30, 47, 210, 150 каких нибудь единиц времени. Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты: 11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды. тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему, если не жалко поделитесь с кодом Изменено 12 мая, 2008 пользователем VAHOO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tklim 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему, если не жалко поделитесь с кодом Да последоваельность будет именно такая. Только нас интересует длина каждого 0 и каждой диницы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться