Вы не вошли.
... Нормальный декодер должен работать ...
Читал такую идею:
в системе делается прерывание по таймеру, расчитанное так, чтоб его период был равен 1/8-й от 1,778 мс. По данному прерыванию сдвигается содержимое регистрика , а в его крайний разряд записывается текущее состояние входа от ик-приемника...
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
Тока вот сдвиг не влево а вправо.
Конечно! Я ошибся. Свиг влево - умножение на степень двойки, сдвиг вправо - деление.
Вне форума
Читал такую идею:
в системе делается прерывание по таймеру, расчитанное так, чтоб его период был равен 1/8-й от 1,778 мс. По данному прерыванию сдвигается содержимое регистрика , а в его крайний разряд записывается текущее состояние входа от ик-приемника...
Это прерывание нужно синхронизировать с посылкой. А то начнет попадать ровно на переход, что тогда делать? Прием распространенный: по прерыванию от фотоприемника определяется начало бита, запускается таймер с периодом 3/4 периода, в прерывании которого делается выборка входного сигнала и переключение фронта для перывания, если требуется. Это простой способ декодирования, но он не осуществляет контроль длительности входных импульсов.
Вне форума
Леонид! Вы торопитесь отвечать...
Какая разница кто и куда попадет. При том шаге кто нибудь да попадется! Факт отсутствия посылки - FF в крутящемся регистре после восьми сдвигов. "Отличающийся от FF результат" - шаблон "единицы", XOR с FF от "отличающегося от FF результата" - шаблон "ноля"...
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
А как быть уверенным, что 8 выборок, задвинутых врегистр, взяты на интервале одного передаваемого бита, а не на кусках двух соседних?
Вне форума
А как быть уверенным, что 8 выборок, задвинутых врегистр, взяты на интервале одного передаваемого бита, а не на кусках двух соседних?
Да, синхронизация нужна, однозначно. Иначе нет никакой уверенности, что ты там надекодировал.
Зачем вызвать прерывание на каждом такте??
Может пусть прерывание инициирует первый стартовый бит, затем по второму определяем нужные времена (3/4 и 5/4 такта), дальше принимаем сигнал, попутно контролируя длительность импульсов. Да и по первому биту, кстати уже можно намерить все, что надо. Результатом работы обработчика прерывания будет адрес системы и код команды в каких-либо регистрах или переменных в ОЗУ. (дай Бог бы теперь все это написать )
Я вот только никак в толк не возьму одно дело. В состоянии покоя (когда нет ИК сигнала) на выходе приемника что? Ноль или единица? И полярность импульсов на выходе приемника такая как у Вас в статье на рис. 4?? И опять-таки про те 3,5 мс. Вы писали, что перед посылкой должна быть тишина. Тишина есть, пока посылки нет, но если на выходе приемника сигнал не меняется, как мы прерывание-то вызовем?? Или в случае использования прерывания ждать 3,5 мс не надо??
Да и вот еще что. Прерывание вызывается положительным или отрицательным перепадом?
Отредактировано Матроскин (02.11.2006 00:35:56)
......There is someone in my head, but it's not me.......
Вне форума
А как быть уверенным, что 8 выборок, задвинутых врегистр, взяты на интервале одного передаваемого бита, а не на кусках двух соседних?
Вы делаете восемь выборок за 1,778 мс. Всё.
ЗЫ. Иногда чтоб осознать идею, с ней нужно "переспать"...
ЗЫ. to Матроскин
В "покое" на выходе ИК-приемника - единица.
Прерывание вызываете по спаду.
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
Вы делаете восемь выборок за 1,778 мс. Всё.
Так а в какой момент начинается эта серия выборок? Я так понял из Ваших слов, что таймер работает непрерывно, т.е. процесс выборок совершенно асинхронен по отношению к принимаемому сигналу. В таком случае в 8-разрядный регистр будут вдвинуты куски соседних принятых бит. Как это потом разгребать? В принципе, конечно, возможно, если записывать с периодом < 1.778 / 2 мс всё, что приходит с приемника, а затем этот массив просматривать неким скользящим алгоритмом с целью поиска корреляции с валидной посылкой RC-5... Но это так сложно (кстати, подобный алгоритм пришлось применить для декодирования посылки карточки RFID). Не проще ли синхронизироваться с принятым сигналом?
ЗЫ. Иногда чтоб осознать идею, с ней нужно "переспать"...
А Вы с этой идеей уже переспали? А то как-то туманно объясняете принцип Я пока не понял рационального зерна... Особенно магического числа выборок 8.
Еще раз курю Вашу фразу:
Какая разница кто и куда попадет. При том шаге кто нибудь да попадется! Факт отсутствия посылки - FF в крутящемся регистре после восьми сдвигов. "Отличающийся от FF результат" - шаблон "единицы", XOR с FF от "отличающегося от FF результата" - шаблон "ноля"...
Предположим, была тишина, в регистре - FF. Предположим, очередной раз серия своим последним сэмплом попала на начало старт - бита, прямо на переход. Естественно, что такой результат нельзя использовать как шаблон "единицы", потому что в каждой последующей серии последний сэмпл будет иметь нестабильное значение. Как и "XOR с FF", а это инверсия всего байта, нельзя использовать как шаблон "ноля". Причем в такой ситуации данный алгоритм вполне может декодировать посылку с ошибкой, что говорит о его низкой помехозащищенности.
P.S. У AVR прерывание может вызываться фронтом, спадом, любым переходом или низким уровнем.
Отредактировано Liv (02.11.2006 12:51:08)
Вне форума
Зачем вызвать прерывание на каждом такте??
Может пусть прерывание инициирует первый стартовый бит, затем по второму определяем нужные времена (3/4 и 5/4 такта), дальше принимаем сигнал, попутно контролируя длительность импульсов. Да и по первому биту, кстати уже можно намерить все, что надо. Результатом работы обработчика прерывания будет адрес системы и код команды в каких-либо регистрах или переменных в ОЗУ.
Это плохое предложение. Очень длинный обработчик прерывания получится. Я так делал на 8051, потому что они сами имели низкую производительность, там это не так заметно. Для AVR очень глупо сидеть в прерывании и ждать, пока придет следующий бит. Бесполезно тратится процессорное время. Прерывания должны быть как можно более короткими. Естественно, что в таком случае понадобится одно или два внешних прерывания на каждый принятый бит и, возможно, одно таймерное прерывание. Всё зависит от конкртной реализации декодера. Довольно хороший декодер RC-5 есть по ссылке (правда, на Си): markh.de/software/rc5dec.c
В состоянии покоя (когда нет ИК сигнала) на выходе приемника что? Ноль или единица?
А осциллографом или тестером посмотреть слабо? Или datasheet почитать? В состоянии покоя там единица, интегральный фотоприемник SFH-506 и подобные инвертирует сигнал.
И опять-таки про те 3,5 мс. Вы писали, что перед посылкой должна быть тишина. Тишина есть, пока посылки нет, но если на выходе приемника сигнал не меняется, как мы прерывание-то вызовем?? Или в случае использования прерывания ждать 3,5 мс не надо??
В примере AVR410 не используются прерывания от фотоприемника. Это плохой декодер. Если работать по прерываниям, то, естественно, никаких 3.5 мс ждать не надо.
Прерывание вызывается положительным или отрицательным перепадом?
Опять двадцать пять И Вы еще в другой теме жалуетесь, что Вас не берут инженером. Вы даже не знаете, что перед тем, как начинать работать с какой-то микросхемой, нужно хотя бы прочитать datasheet!
Вне форума
Для наглядности картинку взял из Вашей же статьи:
Так а в какой момент начинается эта серия выборок? Я так понял из Ваших слов, что таймер работает непрерывно, т.е. процесс выборок совершенно асинхронен по отношению к принимаемому сигналу.
Таймер работает асинхронно.
Возьмем идеальный вариант, когда первые 4 семпла со входа дадут 1, вторые дадат нули. В итоге в регистре F0 - "шаблон единицы" (имеется ввиду навых. ик-приемника, а не в соответствии с приведенным мной Вашим рисунком). XOR с FF дает 0F - "шаблон нуля". Сканирование идет все время. В итоге при приеме 3-х единиц, в регистре три раза подряд будет F0. Приедет ноль, даст 0F.
Теперь допустим, что самый первый перепад приехал не посредине восьми выборок, а допустим после 2-й. В итоге - шаблон единицы - С0. А сканирование продолжается - приедет следующая единица, снова будет С0, а приедет ноль - в регистре будет 3F (XOR с FF )...
... Предположим, очередной раз серия своим последним сэмплом попала на начало старт - бита, прямо на переход.
Эт да, тяжелый случай. В данном случае облажается данный метод. Но можно сам алгоритм запускать только после наличия первого спада..
P.S. У AVR прерывание может вызываться фронтом, спадом, любым переходом или низким уровнем.
Не понял к чему это. У пиков - или фронтом или спадом...
Отредактировано Dmitry (02.11.2006 19:05:06)
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
[ Сгенерировано за 0.131 сек, 8 запросов выполнено - Использовано памяти: 633.97 Кбайт (Пик: 684.34 Кбайт) ]