приемник сигналов от ИК-пульта (PIC12F629). Часть 2
приемник сигналов от ИК-пульта (PIC12F629). Часть 2
Добрый день , не нашёл соответствующую тему, поэтому решил создать. Собрал схемку, прошил контроллер (прошивка rc-5 с манчестерским кодом), всё один к одному- не работает, вернее работает, но как-то не так)))описание к прошивке читал, но загорается и тухнет всё время первый светодиод причём от любой кнопки, а по нажатии на первую кнопку происходит дребезг, то есть загорается и тухнет хаотично.
Пульт точно RC-5 (от горизонта), калибровочные константы сохранял как надо. Пробовал шить rc-5-простой и nec - вообще не реагирует, перепробовал десяток разных пультов, осцилографом на ноге от фотоприёмника сигнал чистый. Помогите, что не так?
Пульт точно RC-5 (от горизонта), калибровочные константы сохранял как надо. Пробовал шить rc-5-простой и nec - вообще не реагирует, перепробовал десяток разных пультов, осцилографом на ноге от фотоприёмника сигнал чистый. Помогите, что не так?
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
1) Пришли осциллограммы посылки, снятые с выхода фотоприёмника (интересно) при нажатии на кнопку на пульте от горизонта.
2) Прошивка RC-5 попроще и для нэка и не должны зажигать никаких диодов. Нэковская - потому что протокол не тот, а RC-5 - потому что номер системы стоит 29 - освещение, а у телевизора должен быть номер системы - 0. Так что она и не должна на телевизионный пульт реагировать. Читай описание протокола RC-5: http://radiohlam.ru/teory/rc-5.htm. Измени в программе номер системы и перекомпиль прошивку. А вот почему прошивка RC-5 посложнее считает, что принимаемый код не манчестерский (загорание первого светодиода говорит об этом) - вопрос. По идее должен всегда загораться второй светодиод - несовпадение номера системы. Возможно ответ на него можно будет узнать из осциллограмм. А ещё проверь стабильность питания контроллера, потому что непонтно отчего гаснет первый ветодиод. Если уж он зажёгся, то погаснуть он должен только при загорании другого светодиода, т.е. когда принятый код пройдёт проверку на манчестер (при этом должен загореться один из трёх других светодиодов). А просто сам по себе он в программе нигде не сбрасывается, если зажёгся.
И ещё - что такое первая кнопка? Это кнопка с цифрой 1 на пульте? При её нажатии тоже осциллограмму пришли с выхода фотоприёмника.
2) Прошивка RC-5 попроще и для нэка и не должны зажигать никаких диодов. Нэковская - потому что протокол не тот, а RC-5 - потому что номер системы стоит 29 - освещение, а у телевизора должен быть номер системы - 0. Так что она и не должна на телевизионный пульт реагировать. Читай описание протокола RC-5: http://radiohlam.ru/teory/rc-5.htm. Измени в программе номер системы и перекомпиль прошивку. А вот почему прошивка RC-5 посложнее считает, что принимаемый код не манчестерский (загорание первого светодиода говорит об этом) - вопрос. По идее должен всегда загораться второй светодиод - несовпадение номера системы. Возможно ответ на него можно будет узнать из осциллограмм. А ещё проверь стабильность питания контроллера, потому что непонтно отчего гаснет первый ветодиод. Если уж он зажёгся, то погаснуть он должен только при загорании другого светодиода, т.е. когда принятый код пройдёт проверку на манчестер (при этом должен загореться один из трёх других светодиодов). А просто сам по себе он в программе нигде не сбрасывается, если зажёгся.
И ещё - что такое первая кнопка? Это кнопка с цифрой 1 на пульте? При её нажатии тоже осциллограмму пришли с выхода фотоприёмника.
С уважением, администрация сайта.
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
Точняк, нормальный RC-5.
Варианты действий.
1) Обязательно в программах измени номер системы (как я уже выше писал), в данном случае номер 0 - телевизор.
2)Вообще-то вот так писать не совсем правильно (можно даже сказать совсем неправильно )
Надо либо разделить эти команды командой nop, либо менять сразу все необходимые биты через iorwf/andwf, потому что при изменении регистров порта происходит чтение-модификация-запись, то есть каждый раз состояние всех выводов перечитывается заново и если состояние, которое должно установиться в результате предыдущей команды, ещё не успело установиться, то и считано оно будет неправильно и текущая команда перезапишет в порт это неправильно считанное значение.
3) Возможно, что частота контроллера не совсем точно откалибрована и из-за этого задержки получаются больше/меньше, чем нужно, в результате чего чтение полубитов происходит не в тех местах, в которых надо (об этом косвенно говорит не такая реакция на первую кнопку, как на все остальные). Тут надо просто поиграться со величиной задержек (T1, T2, возможно даже и TN).
Вот как-то так.
Варианты действий.
1) Обязательно в программах измени номер системы (как я уже выше писал), в данном случае номер 0 - телевизор.
2)Вообще-то вот так писать не совсем правильно (можно даже сказать совсем неправильно )
Код: Выделить всё
bcf GPIO, 0 ; погасить первый красный светодиод
bcf GPIO, 1 ; погасить второй красный светодиод
bcf GPIO, 2 ; погасить желтый светодиод
bsf GPIO, 4 ; зажечь зеленый светодиод
3) Возможно, что частота контроллера не совсем точно откалибрована и из-за этого задержки получаются больше/меньше, чем нужно, в результате чего чтение полубитов происходит не в тех местах, в которых надо (об этом косвенно говорит не такая реакция на первую кнопку, как на все остальные). Тут надо просто поиграться со величиной задержек (T1, T2, возможно даже и TN).
Вот как-то так.
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629)
Спасибо большое, третий пункт помог
Re: приемник сигналов от ИК-пульта (PIC12F629)
Здравствуйте подскажите пожалуйста по изменению программы ИК приемника на 12f629. Если не в том месте задал вопрос извеняюсь просто думл не плодить темы про ик пульты на 12f629 а продолжить.
Нашол схему приемника и передатчика ИК пульта на вашем сайте. Собрал их. Заработали не с первого раза но все работает четко хоть и номиналы некоторых резисторов взял не совсем те. Уточню что взял простой вариант програмирования приемника.
Но посетила мою светлую голову идея о том что надо переделать программу. Просто мне кажется удобнее будет сделать если не будут светодиоды все гаснуть а загораться толька тот на кнопку которого нажали. Хотел сделать так чтоб при нажатии например на кнопку 1 светодиода он сначала загорался а если нажать еще раз он бы тух. Соответственно чтоб радотали и остальные 3 светодиода. Тоесть развязать их чтоб они не были связаны прогамно и работали отдельно друг от друга. Мне такой вариант схемы кажется более удобным в использовании.
ДАк вот заболтался. Заменил я в асемблерном варианте прошивки строки указаные ниже. и ноль эмоций схема вообше перестала работать. Не менял в программе больше ничего кроме удаления команды call gasim.
;******* Проверка команды 1 *********************************************************
movlw CMD_1
xorwf LBC,0 ;
btfss Status,2 ; если бит 2 (Z) в регистре Status=1, то следующая инструкция не выполняется
goto com2 ;
call gasim ;
bsf GPIO, 0 ; зажечь первый светодиод
goto out
;******* Проверка команды 1 *********************************************************
movlw CMD_1
xorwf LBC,0 ;
btfss Status,2 ; если бит 2 (Z) в регистре Status=1, то следующая инструкция не выполняется
goto com2 ;
btfsc GPIO, 0 ; если 1 светодиод погашен то выполняется след команда
bsf GPIO, 0 ; зажечь 1 светодиод
btfss GPIO, 0 ; если 1 светодиод горит то выполняется след команда
bcf GPIO, 0 ; погасить 1 светодиод
goto out
Нашол схему приемника и передатчика ИК пульта на вашем сайте. Собрал их. Заработали не с первого раза но все работает четко хоть и номиналы некоторых резисторов взял не совсем те. Уточню что взял простой вариант програмирования приемника.
Но посетила мою светлую голову идея о том что надо переделать программу. Просто мне кажется удобнее будет сделать если не будут светодиоды все гаснуть а загораться толька тот на кнопку которого нажали. Хотел сделать так чтоб при нажатии например на кнопку 1 светодиода он сначала загорался а если нажать еще раз он бы тух. Соответственно чтоб радотали и остальные 3 светодиода. Тоесть развязать их чтоб они не были связаны прогамно и работали отдельно друг от друга. Мне такой вариант схемы кажется более удобным в использовании.
ДАк вот заболтался. Заменил я в асемблерном варианте прошивки строки указаные ниже. и ноль эмоций схема вообше перестала работать. Не менял в программе больше ничего кроме удаления команды call gasim.
;******* Проверка команды 1 *********************************************************
movlw CMD_1
xorwf LBC,0 ;
btfss Status,2 ; если бит 2 (Z) в регистре Status=1, то следующая инструкция не выполняется
goto com2 ;
call gasim ;
bsf GPIO, 0 ; зажечь первый светодиод
goto out
;******* Проверка команды 1 *********************************************************
movlw CMD_1
xorwf LBC,0 ;
btfss Status,2 ; если бит 2 (Z) в регистре Status=1, то следующая инструкция не выполняется
goto com2 ;
btfsc GPIO, 0 ; если 1 светодиод погашен то выполняется след команда
bsf GPIO, 0 ; зажечь 1 светодиод
btfss GPIO, 0 ; если 1 светодиод горит то выполняется след команда
bcf GPIO, 0 ; погасить 1 светодиод
goto out
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
Ну так-то логично, что не работает:
Чтобы инвертировать нулевой бит - надо написать так:
Соответственно инверсия первого бита:
и т.д.
Код: Выделить всё
btfsc GPIO, 0 ; если GPIO<0>=0 (светодиод погашен), то пропустить следующую команду (т.е. не зажигать светодиод)
bsf GPIO, 0 ; GPIO<0>=1
btfss GPIO, 0 ; если GPIO<0>=1 (светодиод горит), то пропустить следующую команду (т.е. не гасить светодиод)
bcf GPIO, 0 ; GPIO<0>=0
Код: Выделить всё
movlw b'00000001'
xorwf GPIO,1
Код: Выделить всё
movlw b'00000010'
xorwf GPIO,1
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629)
Может быть нада так делать. Мне просто показалось странным что GPIO,1 вы употребили и для нулевого и для 1 бита.
если не так то у меня совсем туго с пониманием работы ассемблера
Код: Выделить всё
movlw b'00000001'
xorwf GPIO,0
Код: Выделить всё
movlw b'00000010'
xorwf GPIO,1
Код: Выделить всё
movlw b'00000100'
xorwf GPIO,2
Код: Выделить всё
movlw b'00010000'
xorwf GPIO,4
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
Нет, единица после запятой к номеру бита не имеет никакого отношения, она указывает, что результат операции xorwf (побитное исключающее ИЛИ указанного регистра, в данном случае это регистр GPIO, и W) нужно сохранить в указанный регистр (т.е. в GPIO), а не в аккумулятор (регистр W).
P.S. После запятой в этой команде может быть только 0 (при этом результат сохраняется в W) или 1 (при этом результат сохраняется в регистр, указанный до запятой).
P.S. После запятой в этой команде может быть только 0 (при этом результат сохраняется в W) или 1 (при этом результат сохраняется в регистр, указанный до запятой).
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629)
Спасибо большое за подсказку. Все заработало.