Перейти к содержанию
    

алгоритм для записи пульта в AVR

если я буду брать знаяение TCNTx, мне больше не надо по моему прерывание от таймера и здесь

модуляция ни причем

прерывание от таймера происходит при слишком длительной паузе. По нему определяется окончание посылки.

Про модуляцию я сказал к тому, что длина импульса на выходе из приемника не может быть меньше 26мкс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чем вопрос? Поскольку приемник детектирует сигнал (обрезает засветки и помехи) то на выходе у него последовательность импульсов с интервалами в зависимости от протокола. Достаточно принимаемым контроллером определить присутствие импульсов (вообще любых!!!) и это и будет условием переключения, включения, уменьшения/увеличения яркости.

Уменьшение/увеличение яркости делаем так:

Опрос входа(периодичность хоть 1 сек) на наличие импульсов (любых импульсов) есть значит увеличиваем. Закончились- ждем следущей непрерывной посылки при которой будем уменьшать яркость и т.д.

вход в режим регулировки (чтобы случайно не срабатывало при управлении тв) можно установить по присутствию сигнала с условными интервалами пакетов.

Может вас этот вариант устроит...

Есть только вопрос с пультами которые посылают после отправки команды короткие команды подтверждения.. но думаю можно решить это алгоритмами в контроллере.

 

нет это не устроивает :( , по моему оптимальный вариант, это сначало записать в EEPROM

а потом сравнить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по моему оптимальный вариант, это сначало записать в EEPROM

а потом сравнить

Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только ж как будете "сначало записать в EEPROM", сначала примите команду в RAM послностью, а потом уже писать в епром - там задержки большие.

 

 

я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника,

паузы между импулсами меняются???

пробал разные пульты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я так и делаю, только непонимаю почему от расстоянии, пульт от фотоприемника,

паузы между импулсами меняются???

пробал разные пульты.

Насколько сильно меняются ?

Осциллограмму в студию :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько сильно меняются ?

Осциллограмму в студию :)

 

 

сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу,

по моему идеальный осциллограф :)

 

сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу,

по моему идеальный осциллограф :)

 

 

с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы читали или не читали мою ссылку? В пустую, что-ли?

Ничего там не меняется. Сто раз делал такие приемники.

 

Алгоритм простой. Измеряете длительность посылок 0 и 1. Сохраняете эти числа в РАМ. Все. Дальше их можно превратить в код (см. документацию про RC5). А можно и не превращать. Тогда сравнивать одну посылку с другой следует с неким допуском погрешности для измеренных числе.

 

Задача очень простая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сейчас TSOP подключю к саунд карту и в саунд фордже посмотрю и скажу,

по моему идеальный осциллограф :)

с расстоянии 5 см между импулсами 1111 мкс, а 1м 1156мкс :crying:

Вообще мерять при 5см - это не правильно.

Можно сравнивать метр и 3 метра.

Погрешность в 4% как у вас это вполне приемлимо.

Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще мерять при 5см - это не правильно.

Можно сравнивать метр и 3 метра.

Погрешность в 4% как у вас это вполне приемлимо.

Только вот я не понял, что значит у вас "расстояние между импульсами" ? И какой пульт ? РЦ5?

 

пульт протокол NEC, а расстояние между пульта и фотоприемника,

паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м)

 

 

Вы читали или не читали мою ссылку? В пустую, что-ли?

Ничего там не меняется. Сто раз делал такие приемники.

 

Алгоритм простой. Измеряете длительность посылок 0 и 1. Сохраняете эти числа в РАМ. Все. Дальше их можно превратить в код (см. документацию про RC5). А можно и не превращать. Тогда сравнивать одну посылку с другой следует с неким допуском погрешности для измеренных числе.

 

Задача очень простая.

 

да читал вашу ссылку,

 

" Измеряете длительность посылок 0 и 1." как?

вот в чем вапрос, у разных пультов разные определение в 0 и 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пульт протокол NEC, а расстояние между пульта и фотоприемника,

паузы между импулсами 1111 мкс (на 5см) и 1156 мкс (на 1м)

Зато длина импульса уменьшится :)

Это вполне нормальные цифры.

" Измеряете длительность посылок 0 и 1." как?

вот в чем вапрос, у разных пультов разные определение в 0 и 1

Если вы имеете в виду логический протокол - то забудьте про него. Тут есть выход с приемника у которого - 0 когда идут ИК импульсы с частотой 38кгц и лог.1 - когда не идут. Вот время между сменами состояние и надо мерять. Причем не настолько точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику.

Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей.

Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки).

Если столько места нет, то превращать эти длительности тупо в биты.

Например, замерили вы следущее:

100, 30, 47, 210, 150 каких нибудь единиц времени.

Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты:

 

11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем писать массив?

Можно же сразу анализировать 1 или 0 и писать в память сод посылки.

http://fi-com.ru/mcu/rc5.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно же сразу анализировать 1 или 0 и писать в память сод посылки.

1. Нам неизвестна природа посылки.

2. Нам неизвестна скорость передачи

3. Единственное, что мы знаем наверняка, это то, что из приемника выходит некая последовательность уровней. Эти последовательности обычно разделены паузой. Все.

 

Записывая же напрямую битовую последовательность, мы можем напороться (и скорее всего напоремся) на ЛИШНИЕ или недостающие биты (из-за незнания точной скорости и из-за неумение ее точно поддерживать, как нами так и передатчиком).

 

То, как я описал - я лично делал. Работало со всеми пультами, которые видел приемник. Т.е. обучаемость была очень высокая. С полтыка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вашего ПРИЕМНИКА определение 0 и 1 соответсвующее ИМЕННО ЭТОМУ приемнику.

Приемник просто демодулирует посылку. А вы превращаете эту посылку в список длительностей.

Скажем, в посылке 30 бит. Значит длина массива с длительностями будет где-нибудь 60 байт. (Первую длинную можно не учитывать, а использовать как признак начала посылки).

Если столько места нет, то превращать эти длительности тупо в биты.

Например, замерили вы следущее:

100, 30, 47, 210, 150 каких нибудь единиц времени.

Видим, что минимальная длительность бита - 30. значит превращаем эти числа в биты:

 

11101000000011111 - уже намного короче. И делать это можно по ходу действия. Только заранее забить минимальную длительность бита. Можно брать реальную (будет точнее), а можно и от балды.

 

тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему,

 

если не жалко поделитесь с кодом

Изменено пользователем VAHOO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тoгда последовательность будет ВСЕГДА 01010101010101010101010101010101 , по моему,

 

если не жалко поделитесь с кодом

Да последоваельность будет именно такая. Только нас интересует длина каждого 0 и каждой диницы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...