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

Pic = Декодер Rc5


Гость ATom

Рекомендуемые сообщения

Уважаемые электронщики помогите пожалуйста с проблемой. Необходим кусочек программы на asme декодера RC5 для контроллера PIC16F628A.

Описание конструкции:

Приемник VSC 323 (после приемника сигнал инвертирован) подключен к RB0

Кварц 4 МГц

Смотрел осциллографом, сигнал с пульта принимается и присутствует на выводе контроллера. Еще одна непонятность, когда кодовая посылка отсутствует, на выходе приемника проскакивают импульсы разной длительности. Это нормально?

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Это нормально?

Нормально.

А по поводу исходников - догадайтесь, что будет в самой первой ссылке гугля, если ему сказать "RC5 PIC16F628" ???

---

ЗЫ. Извиняюсь, там бАсик :)

Ну тогда "PIC RC5 decoder"

Изменено пользователем AlenB
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

ссылку про декодеры мучил, толку никакого :( Нашел аглицкий документ, но там только какието обрывки кода и ничего конкретного. Схему прицепил.

post-41307-1200311698_thumb.jpg

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

http://www.pchards.boom.ru/hard/ir/rc2rs/rc2rs.htm - это на русском, но для Атмела.

http://www.sbprojects.com/projects/ircontrol/picir/rc5.htm - это на аГлицком, но для Пика.

Просто меняете в исходнике PORTA,4 на PORTB,0. Понятно, что у автора оно не по прерываниям работает, но ведь работает же.

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

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

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

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

Вот и отлично.

Я сам хочу заняться этим вопросом, если хочешь давай думать вместе.

Но я пишу на Си

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

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

Приемник VSC 323

Ни гугыль ни яндекс не нашёл... :angry:

1. Что за девайс, где найти доку?

2. Чем отличается от TSOP1736?

3. Зачем ставить транзистор, если можно инвертировать сигнал программно?

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

Что за приемник я не знаю, выдерунул из девайса. Главное что импульсы он формирует. Посылку я вижу на осциллографе даже расшифровать можно. Инверсию действительно можно програмно)) просто у меня рефлекс сработал)) Контроллерами не так давно заниматься начал так все на логике делал. А программа не пошла(( сейчас выложу ее.

P.S от TSOP походу ни чем не отличается.

Изменено пользователем ATom
Ссылка на комментарий
Поделиться на другие сайты

;---------------------------------------IR Start-----------------------------

IR_MACHINE MOVF IR_STATE,W ; Jump to present state

MOVWF PCL

;---------------------------------------STATE 0, WAIT FOR BEGIN OF START BIT--

IR_STATE_0 BTFSS PORTB,7 ;Input still low?

RETURN ;Yes! Nothing to do

MOVLW HALF_TIME/2-1 ;Wait until we're in the center of the

MOVWF BIT_TIMER ;start pulse

MOVLW IR_STATE_1 ;Next stop is state 1

MOVWF IR_STATE

RETURN

;---------------------------STATE 1, START BIT DETECTED, CHECK IF IT IS REAL--

IR_STATE_1 DECFSZ BIT_TIMER ;Wait until center of start pulse

RETURN ;Time's not up yet!

BTFSS PORTB,0 ;Is the input still high?

GOTO IR_ERROR_1 ;Nope! Exit with error

MOVLW HALF_TIME ;Set interval to the center of the

MOVWF BIT_TIMER ; first half of the next bit

MOVLW B'00001000' ;Prepare the shift register

MOVWF IR_SHIFT

CLRF IR_SHIFT+1

MOVLW IR_STATE_2 ;Prepare for next stop

MOVWF IR_STATE

RETURN

;-----------------------------------IR STATE 2, WAIT FOR FIRST HALF OF A BIT--

IR_STATE_2 DECFSZ BIT_TIMER ;Wait until center of first half of bit

RETURN ;Keep waiting!

MOVLW IR_STATE_3 ;Next state is 3 if input is low

BTFSC PORTB,0

MOVLW IR_STATE_4 ;Input is high, next state is 4

MOVWF IR_STATE

MOVLW HALF_TIME ;Restart bit timer

MOVWF BIT_TIMER

RETURN

;---------------IR STATE 3, FIRST HALF WAS HIGH NOW IT MUST BE LOW FOR A "1"--

IR_STATE_3 DECFSZ BIT_TIMER ;Wait until center of 2nd half of bit

RETURN ;Keep waiting!

BTFSS PORTB,0 ;Is input low now?

GOTO ERRORs ;Nope! It's an error!

BSF STATUS,CARRY ;A 1 was received, shift it in result

RLF IR_SHIFT,F

RLF IR_SHIFT+1,F

MOVLW HALF_TIME ;Restart bit timer

MOVWF BIT_TIMER

MOVLW IR_STATE_2 ;In case we need some more bits

BTFSC STATUS,CARRY ;We're done when Carry is 1

MOVLW IR_STATE_5 ;Carry is 1, received entire message

MOVWF IR_STATE

RETURN

ERRORs MOVLW IR_ERROR_0 ;Wait until input gets high before

MOVWF IR_STATE ;returning to state 0

RETURN

;---------------IR STATE 4, FIRST HALF WAS LOW NOW IT MUST BE HIGH FOR A "0"--

IR_STATE_4 DECFSZ BIT_TIMER ;Wait until center of 2nd half of bit

RETURN ;Keep waiting!

BTFSC PORTB,0 ;Is input low now?

GOTO IR_ERROR_1 ;Nope! It's an error!

BCF STATUS,CARRY ;A 0 was received, shift it in result

RLF IR_SHIFT,F

RLF IR_SHIFT+1,F

MOVLW HALF_TIME ;Restart bit timer

MOVWF BIT_TIMER

MOVLW IR_STATE_2 ;In case we need some more bits

BTFSC STATUS,CARRY ;We're done when Carry is 1

MOVLW IR_STATE_5 ;Carry is 1, received entire message

MOVWF IR_STATE

RETURN

;--------------------------IR STATE 5, MESSAGE RECEIVED, START PROCESSING IT--

IR_STATE_5

MOVLW IR_STATE_6 ;We've done enough in this state

MOVWF IR_STATE ;Let's do the rest in state 6

RETURN

;------------------------------IR STATE 6, CONVERT HEX MESSAGE TO 7 SEGMENTS--

IR_STATE_6

MOVLW IR_STATE_7 ;Done enough for now. Let's finish it

MOVWF IR_STATE ;in the last state

RETURN

;----------------------------------IR STATE 7, WAIT FOR INPUT TO RETURN HIGH--

IR_STATE_7

IR_ERROR_0 MOVLW IR_STATE_0 ;Reset state machine only if input is

BTFSS PORTB,0 ; high

MOVWF IR_STATE

RETURN

;-----------------------------------------------------------IR ERROR STATE 1--

IR_ERROR_1 MOVLW IR_STATE_0 ;Return to IR state 0

MOVWF IR_STATE

RETURN

Вызывать эту штуку надо 1 раз в 50 мкс (из описания автора программы).

Реально можно еще много выкинуть отсюда, но пока вот так.

Прога должна записать комманду в IR_SHIFT.

Реально комманда не принимается.

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

Решил писать программу сам.

Первые результаты есть, устойчиво ловлю первый импульс посылки и начало второго импульса.

Нужны советы по алгоритму расшифровки.

Вот кусочек проги, я отсеиваю левые импульсы по времени.

rc5

bcf INTCON,2 ;настройка таймера т~1mc

movlw B'11110110'

movwf TMR0

bsf STATUS,RP0

movlw B'11010110'

movwf OPTION_REG

bcf STATUS,RP0

jk btfss PORTB,0 ;проверяем пропадает импульс? если да то сбрасываем

return

btfss INTCON,2 ;время прошло? если да и импульс не пропадал, то это начало посылки.

goto jk

btfsc PORTB,0

goto $-1

btfss PORTB,0

goto $-1

bsf PORTA,3

goto $-1

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

Да, тоже интересно. сделаю универсальный, для компьютера. через преобразователь RS232-USB на замену стандартному WinLIRC-у т.к. у многих нет уже хардварный портов, а на преобразователях не работает в принципе.

Учение - изучение правил. Опыт - изучение исключений.

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

Вот программма декодер RC5.

Программа читает команду с пульта и пишет ее в еепром.

Несколько советов чтобы не наступать на грабли:

1) обязательно проверить соединение корпуса приемника с землёй (я выпаивал приемник из платы и корпус оказался не на 0.

2) приемник вешаем на RB0

3) некоторые кнопки пульта выдают разные коды при коротком нажатии и длинном.

4) моя программа работает с кварцем 4Мгц, если кварц другой нужно пересчитать таймер и предделитель TMR0

5) после приемника у меня стоит инвертор на транзисторе ( смотри мой пост со схемой выше)

Алгоритм у меня такой.

Принимаем начало первого импульса включаем таймер и измеряем его длительность, если импульс короче 1mc то это помеха.

Ожидаем завершения первого импульса.

Ожидаем начала второго импульса.

Синхронизация закончена.

Далее отсчитываем временной промежуток 1.79 мс и читаем RB0.

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

Последние 6 бит это команда.

Такой алгоритм работает только при правильно расчитанном таймере и не очень большом количестве битов в посылке.

Исходные данные:

1) Длинна такта посылки пульта 1.778 мс (см. приложенные рисунки)

2) тактовая частота (у меня 4Мгц)

Необходимо так подобрать делитель и таймер, чтобы он переполнялся через 1.79 мс

Время желательно подбирать поточнее не более 1.79 мс и не менее 1.779 иначе возможны ошибки в приеме.

PS. Программа работает, но еще очень сырая есть простор для мысли.

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

Для меня это было не критично. И еще одно узкое место надо добавить проверку длительности ожидания второго импульса и окончания первого импульса иначе возможны зависания.

PSS. Не буду же я все писать за вас)) оставляю простор для мысли.

RC5.rar

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

...Далее отсчитываем временной промежуток 1.79 мс и читаем RB0.

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

Последние 6 бит это команда.

А где же оценка предыдущего состояния? Ведь кодировка бифазная...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Сорри моя ошибка.

Изначально не достаточно подробно обозначил техзадание.

Необходимо принимать команду которая соответствует определенной клавише пульта ДУ.

Другими словами нажал кнопку получил всегда один и то же код.

С данной задачей программа справляется.

Я уже говорил, что программа сырая более того, как показала практика, к протоколу RC5 она имеет очень отдаленное отношение. Дело в том, что программа некорректно считывает адрес причина видимо в самом алгоритме.

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

Мои старания по поиску успехом не увенчались :(

А теперь коротко ответ)) оценки предыдущего состояния в моей программе нет.

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

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

Алгоритм есть. Сделано на С для AVR, но реализовать можно и на PIC...

http://forum.cxem.net/index.php?showtopic=...mp;#comment-207355

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

есть несколько видов пультов - некоторые передают одну команду, затем такую же но с битом повтора который держится пока не отпустишь кнопку, есть которые этот бит с каждой командой инвертируют, а есть я один раз видел такой пульт от SANYO муз центра - команда передается один раз, а затем просто короткие одиночные импульсы пока держишь кнопку!

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...