Свежие обсуждения
Микроконтроллеры

Дайте плиз асм-код для декодирования RC-5 процессором PIC16F84

1 2 3

Ув DWD, представьте себе, что Ваш микроконтроллер просто опрашивает клавиатуру, определяет коды нажатых клавиш и реализует кодовый замок. Режем программу на две части - которая опрашивает клавиатуру, и которая реализует кодовый замок. Одну часть "зашиваем" в один микроконтроллер, другую часть - в другой. В том микроконтроллере, что на клавиатуре, пишем команду записи кода клавиши, к примеру, в последовательный порт, в другом - команду чтения кода клавиши из последовательного порта. Два вопроса:
1. И чего тут писать ?
2. Неужели не интересно ?

 

DWD: Но дело в том, что у меня опыта работы с МК всего 1,5 раза, да и то, на уровне простой логики (если..., то...) и без привязки к временнЫм интервалам. А тут нужно "вести учёт" каждой микросекунды... .
Программа у Вас есть. Если захотите , то будете шаг за шагом разбирать и учиться. Так делают многие. Поставите MPLAB себе, научитесь этим инструментом пользоваться при наладке и при написании. Подпрограммы временных задержек любые - хоть через таймеры, хоть через декременты счетчиков.
Если решили что микроконтроллер Вам нужен - придется учиться. Даже если заставить его "дергать ножками", то все равно программу писать надо.
Не говоря уж о декодировании и передаче чего либо куда либо. "Самоучитель" Корабельникова почитайте, на его форуме побывайте.

 

chav1961: Режем программу на две части - которая опрашивает клавиатуру, и которая реализует кодовый замок.

Извините, но я, всё равно, не вижу пока смысла использовать для кодера отдельный МК. Даже купить готовый кодер будет дешевле, не смотря на наличие "валяющихся под ногами". И писать прогу придётся только для одной части - декодера.
Как ни крути, а с отдельным МК будет дороже и сложнее.
Смысл будет только при использовании своего, оригинального кода.

 

Welcome61: Далее двигаюсь по времени и опрашиваю вход порта.
Определяюсь - 1раз прочитал порт (записал), затем 2 раз прочитал (записал), Анализ -если перепад из 1 в 0 - то это 0.
Иначе - 1.

Посмотрел реализацию прерывания МК по изменению уровня на входе порта. Написано, что сам МК делает тоже самое, по этому нет смысла самому писать код "оцифровки".

По внешнему прерыванию - да, нужно писать, так как вход может реагироовать либо на фронт либо на спад импульса.
А вот прерывания по изменению уровня могут произойти при любом перепаде. При этом сам МК в каждом цикле Q1 записывает текущее состояние порта, потом считывает следующее и сравнивает с предыдущим. Если одинаковые, то проверяет дальше, а если разные, то формирует прерывание.
По этому, нам останется только прочитать порт, получив прерывание от изменения уровня, и запомнить считанное значение - если если после прерывания читается 0, то "поймали" спад импульса, а если 1, то "поймали" фронт.

Или я чего-то не понял?..

 

DWD: Посмотрел реализацию прерывания МК по изменению уровня на входе порта
Это только для RB4.....RB7.
Для RB0 можно определить с чего уходить на прерывание (и соответственно флаг поднимется) с перепада с 1 на 0 или наоборот.
Все в примерах и описаниях многократно описывалось...Могу книжку дать почитать.

 

Welcome61: Для RB0 можно определить с чего уходить на прерывание...

Это понятно.
Я хотел сказать, что используя порты RB4.....RB7 можно не заморачиваться самостоятельной "оцифровкой", как у Вас, а поручить делать это самому МК, раз у него есть прошитая уже такая функция.
Останется мерять только относительно большие промежутки времени, что позволит высвободить больше "свободного времени" для обработки чего-то другого.

Собственно, алгоритм уже вырисовывается в голове. На выходных попробую промоделировать, и расскажу, что получилось.

 

Вы спрашивали изначально по RC-5, т.е. принять переданные последовательно 14 бит и преобразовать его в параллельный двухбайтный код.
Если я плохо понял Ваше ТУ, то извините.
Удачи.

 

Два в одном передатчик и приемник, отображается все в читабельном для человека виде

имеется прошивка и исходник на бейсике

http://www.picbasic.nl/frameload_uk.htm?http://www.picbasic.nl/rc5-rc6_transceiv...

 

Welcome61, не обижайтесь...
Я не собирался критиковать Ваш вариант. Просто, изучая прерывания МК, и поняв, что всё будет сводиться к формированию временных интервалов (а вариантов может быть много) спросил, можно ли использовать прерывания по изменению уровня.
Несколько просмотреных вариантов (в том числе и Ваш) используют только прерывание по фронту/спаду.
Вот, мне и было интересно узнать, почему не используется такой вариант? Мне казалось, что он подходит, но, может, я чего-то не вижу?

Welcome61: Все в примерах и описаниях многократно описывалось...Могу книжку дать почитать.

А какя книга, и где "лежит"?

 

unalex, спасибо, изучаю.