приемник сигналов от ИК-пульта (PIC12F629). Часть 2

Здесь обсуждаем устройства на МК и программы для них
rotor155
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 23 апр 2011, 11:51

приемник сигналов от ИК-пульта (PIC12F629). Часть 2

Сообщение rotor155 »

Добрый день , не нашёл соответствующую тему, поэтому решил создать. Собрал схемку, прошил контроллер (прошивка rc-5 с манчестерским кодом), всё один к одному- не работает, вернее работает, но как-то не так)))описание к прошивке читал, но загорается и тухнет всё время первый светодиод причём от любой кнопки, а по нажатии на первую кнопку происходит дребезг, то есть загорается и тухнет хаотично.
Пульт точно RC-5 (от горизонта), калибровочные константы сохранял как надо. Пробовал шить rc-5-простой и nec - вообще не реагирует, перепробовал десяток разных пультов, осцилографом на ноге от фотоприёмника сигнал чистый. Помогите, что не так?
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение rhf-admin »

1) Пришли осциллограммы посылки, снятые с выхода фотоприёмника (интересно) при нажатии на кнопку на пульте от горизонта.
2) Прошивка RC-5 попроще и для нэка и не должны зажигать никаких диодов. Нэковская - потому что протокол не тот, а RC-5 - потому что номер системы стоит 29 - освещение, а у телевизора должен быть номер системы - 0. Так что она и не должна на телевизионный пульт реагировать. Читай описание протокола RC-5: http://radiohlam.ru/teory/rc-5.htm. Измени в программе номер системы и перекомпиль прошивку. А вот почему прошивка RC-5 посложнее считает, что принимаемый код не манчестерский (загорание первого светодиода говорит об этом) - вопрос. По идее должен всегда загораться второй светодиод - несовпадение номера системы. Возможно ответ на него можно будет узнать из осциллограмм. А ещё проверь стабильность питания контроллера, потому что непонтно отчего гаснет первый ветодиод. Если уж он зажёгся, то погаснуть он должен только при загорании другого светодиода, т.е. когда принятый код пройдёт проверку на манчестер (при этом должен загореться один из трёх других светодиодов). А просто сам по себе он в программе нигде не сбрасывается, если зажёгся.
И ещё - что такое первая кнопка? Это кнопка с цифрой 1 на пульте? При её нажатии тоже осциллограмму пришли с выхода фотоприёмника.
С уважением, администрация сайта.
rotor155
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 23 апр 2011, 11:51

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение rotor155 »

первая кнопка
Изображение

вторая
Изображение

третья
Изображение

четвёртая
Изображение

сравнил с описаниями, вроде как классический rc-5)) питание ещё раз проверил. дребезг по первой кнопке с пульта, вкл-выкл с любой другой кнопки
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение rhf-admin »

Точняк, нормальный RC-5.
Варианты действий.
1) Обязательно в программах измени номер системы (как я уже выше писал), в данном случае номер 0 - телевизор.
2)Вообще-то вот так писать не совсем правильно (можно даже сказать совсем неправильно :lol: )

Код: Выделить всё

    bcf GPIO, 0          ; погасить первый красный светодиод
    bcf GPIO, 1          ; погасить второй красный светодиод
    bcf GPIO, 2          ; погасить желтый светодиод
    bsf GPIO, 4          ; зажечь зеленый светодиод
Надо либо разделить эти команды командой nop, либо менять сразу все необходимые биты через iorwf/andwf, потому что при изменении регистров порта происходит чтение-модификация-запись, то есть каждый раз состояние всех выводов перечитывается заново и если состояние, которое должно установиться в результате предыдущей команды, ещё не успело установиться, то и считано оно будет неправильно и текущая команда перезапишет в порт это неправильно считанное значение.
3) Возможно, что частота контроллера не совсем точно откалибрована и из-за этого задержки получаются больше/меньше, чем нужно, в результате чего чтение полубитов происходит не в тех местах, в которых надо (об этом косвенно говорит не такая реакция на первую кнопку, как на все остальные). Тут надо просто поиграться со величиной задержек (T1, T2, возможно даже и TN).

Вот как-то так.
С уважением, администрация сайта.
rotor155
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 23 апр 2011, 11:51

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение rotor155 »

Спасибо большое, третий пункт помог
craiven
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 03 май 2011, 18:53

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение craiven »

Здравствуйте подскажите пожалуйста по изменению программы ИК приемника на 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
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение rhf-admin »

Ну так-то логично, что не работает:

Код: Выделить всё

   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
и т.д.
С уважением, администрация сайта.
craiven
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 03 май 2011, 18:53

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение craiven »

Может быть нада так делать. Мне просто показалось странным что 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)

Сообщение rhf-admin »

Нет, единица после запятой к номеру бита не имеет никакого отношения, она указывает, что результат операции xorwf (побитное исключающее ИЛИ указанного регистра, в данном случае это регистр GPIO, и W) нужно сохранить в указанный регистр (т.е. в GPIO), а не в аккумулятор (регистр W).

P.S. После запятой в этой команде может быть только 0 (при этом результат сохраняется в W) или 1 (при этом результат сохраняется в регистр, указанный до запятой).
С уважением, администрация сайта.
craiven
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 03 май 2011, 18:53

Re: приемник сигналов от ИК-пульта (PIC12F629)

Сообщение craiven »

Спасибо большое за подсказку. Все заработало.
Ответить

Вернуться в «Устройства на микроконтроллерах»