Продолжает. Нажали и отпустили кнопку - диод загорелся и продолжает гореть, пока другую кнопку не нажмёшь. Так изначально было. Тут выше обсуждалось как сделать инверсию состояния: нажал - диод загорелся, нажал ещё раз - погас.при нажатии и отпускании диод продолжает гореть или перестает?
приемник сигналов от ИК-пульта (PIC12F629). Часть 1
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629)
добрый день,
только учусь работать с микроконтроллерами и хотел сделать именно этот проект в proteus. начал собирать схему и заметил что в нём нет никаких ИК приёмников. так же не представляю как мне потом посылать сигналы. помогите пожалуйста
только учусь работать с микроконтроллерами и хотел сделать именно этот проект в proteus. начал собирать схему и заметил что в нём нет никаких ИК приёмников. так же не представляю как мне потом посылать сигналы. помогите пожалуйста
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629)
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629)
я имел ввиду что в протеусе не понимаю как сделать отправитель и приёмник мне для защиты курсовой хватает только в протеусе показать.rhf-admin писал(а):Как нету, смотри внимательно, а ILMS5360 в левом нижнем углу схемы.
А посылать - пультом.
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
Тут есть три варианта:
1) Найти для протеуса модель фотоприёмника (для ИК-приёмника), соответственно ему на вход воткнуть сигнал с ИК-диода пульта.
2) Сделать самому модель фотоприёмника, дальше вариант 1.
3) Для протеуса прогу чуть подкорректировать - убрать несущую, заменить импульсы на частоте несущей постоянным сигналом (тогда заработает модель Санька).
1) Найти для протеуса модель фотоприёмника (для ИК-приёмника), соответственно ему на вход воткнуть сигнал с ИК-диода пульта.
2) Сделать самому модель фотоприёмника, дальше вариант 1.
3) Для протеуса прогу чуть подкорректировать - убрать несущую, заменить импульсы на частоте несущей постоянным сигналом (тогда заработает модель Санька).
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
спасибо, нашёл всётки в протеусе такую штуку ирлинк, подключил, использовал простую версии программы и всё работаетrhf-admin писал(а):Тут есть три варианта:
1) Найти для протеуса модель фотоприёмника (для ИК-приёмника), соответственно ему на вход воткнуть сигнал с ИК-диода пульта.
2) Сделать самому модель фотоприёмника, дальше вариант 1.
3) Для протеуса прогу чуть подкорректировать - убрать несущую, заменить импульсы на частоте несущей постоянным сигналом (тогда заработает модель Санька).
ресил теперь собрать прибор настоящий спаял плату, но никак не могу разобраться как прошивать м.к. никогда не пробывал. у меня программатор pickit2. подключил я его как надо и что дальше? как сделать эти пункты?
1. Считываем текущую конфигурацию контроллера.
2. Записываем значение битов калибровки схемы BOR (12-й, 13-й биты слова конфигурации, они же bandgap)
3. Записываем значение последнего слова программного кода (слово по адресу 03FF) - биты калибровки генератора.
4. Открываем нашу прошивку в программе программатора, и меняем в ней биты калибровки схемы BOR и генератора на считанные и записанные значения.
вот вижу такое окно, куда что вводить и менять?
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
На скрине, я так понимаю, то, что прочитано с чистого камня?
OSCCAL: 343C - это калибровочная константа генератора (её же можно увидеть, если прокрутить до конца вниз бегунок в большом окне, где много 3FFF, - она должна быть записана в самом последнем слове), BandGap: 1000 - это биты калибровки схемы BOR (вообще-то их по-моему два, то есть скорее всего это 10). Вот это всё записываешь (некоторые программаторы сами при попытке прошить камень сравнивают эти данные с тем, что зашито и спрашивают что делать, если они в прошивке отличаются от тех, что в камне, а некоторые нет, поэтому лучше записать).
Далее, выбираем меню File -> Import HEX и открываем Hex-файл с прошивкой, которую хотим залить.
Я не пользовался Pickit2 и не знаю спросит ли он, если в прошивке калибровочные биты будут отличаться от того, что в данный момент зашито в камень, а также позволяет ли Pickit2 редактировать загруженный hex и слово конфигурации. Если позволяет, то надо руками прописать в последнее слово памяти программ (окошечко с кучей 3FFF) значение OSCCAL (т.е. в твоём случае 343С) и в слово конфигурации биты BandGap.
После этого для записи прошивки в чип нужно нажать Write и всё.
OSCCAL: 343C - это калибровочная константа генератора (её же можно увидеть, если прокрутить до конца вниз бегунок в большом окне, где много 3FFF, - она должна быть записана в самом последнем слове), BandGap: 1000 - это биты калибровки схемы BOR (вообще-то их по-моему два, то есть скорее всего это 10). Вот это всё записываешь (некоторые программаторы сами при попытке прошить камень сравнивают эти данные с тем, что зашито и спрашивают что делать, если они в прошивке отличаются от тех, что в камне, а некоторые нет, поэтому лучше записать).
Далее, выбираем меню File -> Import HEX и открываем Hex-файл с прошивкой, которую хотим залить.
Я не пользовался Pickit2 и не знаю спросит ли он, если в прошивке калибровочные биты будут отличаться от того, что в данный момент зашито в камень, а также позволяет ли Pickit2 редактировать загруженный hex и слово конфигурации. Если позволяет, то надо руками прописать в последнее слово памяти программ (окошечко с кучей 3FFF) значение OSCCAL (т.е. в твоём случае 343С) и в слово конфигурации биты BandGap.
После этого для записи прошивки в чип нужно нажать Write и всё.
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
изучаю эту программу и так как в контроллерах я мало что понимаю, (прочитал только основы) никак не могу разобраться в этих строчках:
T1 equ .212 ; задержка 1
T2 equ .2
TP equ .200 ; определяет задержку между приемом посылок
Tn equ .50 ; начальная задержка (ближе к середине полубита)
Sys equ .253 ; номер системы (29) + 2SB=1 + TB=1
CMD_1 equ .1 ; код команды 1
CMD_2 equ .2 ; код команды 2
CMD_3 equ .3 ; код команды 3
CMD_4 equ .4 ; код команды 4
Вот эти цифры .2, .200, .50. Что это значит? "Определяет задержку". Как понять что за задержка исходя из этих значений?
теперь вот это:
bcf Status,5 ; перейти в банк 0
clrf GPIO ; инициализация защелок
movlw .7 ; биты 0..2 поднять
movwf Cmcon ; компаратор выключен, GP0, GP1, GP2 - цифровые вх/вых
не понимаю что за компаратор и что значит поднять 0..2 биты?
Scan btfss GPIO,5 ; если 5-й бит равен единице - данных нет, пропускаем
call priem
btfsc MBC,7 ; если start bit (7-й) в регистре MBC = 1,
; то была принята информация
Вот тут почему старт бит 7 по счёту и почему проверяем 5 бит?
movlw Tn
movwf Counter3
wait_n
nop
decfsz Counter3,1
goto wait_n
Вот тут вообще не ясно как это? я так понял тут получают паузу 400мкс? а как так её получить именно столько?
wait movlw T2
movwf Counter2
pause2 movlw T1
movwf Counter1
pause1 nop
decfsz Counter1,1
goto pause1
decfsz Counter2,1
goto pause2
return
и вот эту паузу то же не понимаю
простите за тупые вопросы но очень был бы рад получить ответы, хотя бы на первые вопросы, сам весь день пытаюсь разобратся и с трудом получается за ранее спасибо
T1 equ .212 ; задержка 1
T2 equ .2
TP equ .200 ; определяет задержку между приемом посылок
Tn equ .50 ; начальная задержка (ближе к середине полубита)
Sys equ .253 ; номер системы (29) + 2SB=1 + TB=1
CMD_1 equ .1 ; код команды 1
CMD_2 equ .2 ; код команды 2
CMD_3 equ .3 ; код команды 3
CMD_4 equ .4 ; код команды 4
Вот эти цифры .2, .200, .50. Что это значит? "Определяет задержку". Как понять что за задержка исходя из этих значений?
теперь вот это:
bcf Status,5 ; перейти в банк 0
clrf GPIO ; инициализация защелок
movlw .7 ; биты 0..2 поднять
movwf Cmcon ; компаратор выключен, GP0, GP1, GP2 - цифровые вх/вых
не понимаю что за компаратор и что значит поднять 0..2 биты?
Scan btfss GPIO,5 ; если 5-й бит равен единице - данных нет, пропускаем
call priem
btfsc MBC,7 ; если start bit (7-й) в регистре MBC = 1,
; то была принята информация
Вот тут почему старт бит 7 по счёту и почему проверяем 5 бит?
movlw Tn
movwf Counter3
wait_n
nop
decfsz Counter3,1
goto wait_n
Вот тут вообще не ясно как это? я так понял тут получают паузу 400мкс? а как так её получить именно столько?
wait movlw T2
movwf Counter2
pause2 movlw T1
movwf Counter1
pause1 nop
decfsz Counter1,1
goto pause1
decfsz Counter2,1
goto pause2
return
и вот эту паузу то же не понимаю
простите за тупые вопросы но очень был бы рад получить ответы, хотя бы на первые вопросы, сам весь день пытаюсь разобратся и с трудом получается за ранее спасибо
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
Код: Выделить всё
T1 equ .212 ; задержка 1
T2 equ .2
TP equ .200 ; определяет задержку между приемом посылок
Tn equ .50 ; начальная задержка (ближе к середине полубита)
Sys equ .253 ; номер системы (29) + 2SB=1 + TB=1
CMD_1 equ .1 ; код команды 1
CMD_2 equ .2 ; код команды 2
CMD_3 equ .3 ; код команды 3
CMD_4 equ .4 ; код команды 4
Задержку можно организовать двумя способами: 1) Позаниматься нужное время чем-то бесполезным. Для этого в пиках даже есть специальная команда - nop, которая ничего не делает. Если нужно подольше - пишут несколько таких команд, если ещё больше, то организуют так называемые "пустые циклы" - когда контроллер занимается тем, что в цикле выполняет нужное количество таких команд (или даже просто весь цикл занимается тем, что изменяет значение счётчика и проверяет - не пора ли уже заканчивать с этим циклом). 2) Использовать таймер. Тут можно пока таймер работает позаниматься чем-то полезным или "поспать" (если железо позволяет просыпаться от таймера), а потом от таймера приходит прерывание и мы понимаем, что наша задержка закончилась.Что это значит? "Определяет задержку".
В проге реализован первый способ (как самый простой) и числа T1, TP, Tn определяют сколько раз нужно в цикле выполнять nop.
Регистры у нас 8-ми битные, со счётчиком на таком регистре можно сделать максимум 255 циклов задержки. А что делать, если этого мало? А тогда можно сделать вложенный цикл (когда внутри одного цикла есть ещё один цикл), вот как здесь:
Код: Выделить всё
wait movlw T2
movwf Counter2
pause2 movlw T1 <---
movwf Counter1 |
pause1 nop <--- |
decfsz Counter1,1 | |
goto pause1 --- |
decfsz Counter2,1 |
goto pause2 ---
return
Как посчитать, - сколько на всё это затрачивается времени? Тут всё просто. Нужно посчитать за сколько тактов выполнятся все эти циклы и умножить на время выполнения одного такта. Время выполнения одного такта определяется тактовой частотой: T=1/f и для 4МГц составляет 0,25 мкс. В доке на контроллер (там, где описание команд) написано сколько тактов затрачивается на выполнение каждой команды (для пиков написано не количество тактов, а количество машинных циклов, 1 машинный цикл равен 4-м тактам).
Можно проще. В MPLab, во вкладке Windows есть пункт Stopwatch. Запускаешь пошаговое выполнение программы (F8), устанавливаешь указатель команд на метку Wait (Debug->Run->Change Program Counter), ресетишь Stopwatch, ставишь Breakpoint на команду return (правой кнопкой) и запускаешь выполнение (F9). Прога будет выполняться от метки Wait до того места, где установлен Breakpoint, а в окошке stopwatch посчитается сколько на это уйдёт времени и машинных циклов. Прибавишь к этому время выполнения команд Call и return - узнаешь общее время задержки.
Поднять - значит записать туда единицу. Бит может быть либо нулём, либо единицей. Когда говорят "поднять бит" (или флаг, который обычно и является битом в каком-нибудь регистре), то это означает, что надо сделать этот бит равным единице. Когда говорят "сбросить бит" - значит его нужно сделать равным нулю. Теперь про компараторы. В контроллере обычно есть куча всякой периферии (всяких встроенных устройств), а выводов (то есть ножек) мало, и можно специальными флагами подключать к выводам ту или иную периферию, в зависимости от этого у ножек будут те или иные функции. При загрузке у нашего контроллера в регистре CMCON биты 0..2 сброшены, для контроллера это означает, что ноги GP0, GP1, GP2 подключены ко встроенным компараторам и используются как аналоговые входы этих компараторов. А если биты 0..2 в регистре CMCON поднять, то контроллер отключит от выводов компараторы и будет использовать эти ноги как цифровые входы/выходы (как входы или как выходы определяется битами в регистре TrisIO).не понимаю что за компаратор и что значит поднять 0..2 биты?
Если нога настроена на вход, то при чтении GPIO в пятом бите будет значение на входе GP5. GP5 - это у нас вход, к которому подключен фотоприёмник. Фотоприёмник у нас сигнал инвертирует. То есть когда он ничего не принимает - у него на выходе высокий уровень, то есть на входе контроллера висит 1. Когда он принимает импульсы на несущей частоте - у него на выходе низкий уровень, на входе контроллера получается ноль. Вот мы и проверяем эту ногу, пока она в ноль не упадёт. Как упала - значит появился старт-бит. Седьмым по счёту он окажется потому что мы так сигнал принимаем. Мы принимаем бит, сдвигаем все биты в приёмном регистре влево и потом младшим битом записываем этот принятый бит. Приняв таким образом в регистр 8 бит, самый первый принятый окажется самым старшим (то есть седьмым, биты же с нуля считаются).Вот тут почему старт бит 7 по счёту и почему проверяем 5 бит?
С уважением, администрация сайта.
Re: приемник сигналов от ИК-пульта (PIC12F629). Часть 1
огромное спасибо за ответы, всё очень понятно объяснили, только запутался с задержками
пробую посчитать время затраченное на паузу перед принятием кода. ставлю указатели и получаю вот такое число...
а ведь судя по скринам в описании пауза должна быть 400мкс...
с этими числами всё равно не понял как их понимать в секундах .200 это сколько?
Код: Выделить всё
;*** ПРИЕМ ДАННЫХ *****************************************
priem clrf MBC
clrf LBC
;**********************************************************
movlw Tn
movwf Counter3
wait_n
nop
decfsz Counter3,1
goto wait_n
а ведь судя по скринам в описании пауза должна быть 400мкс...
Код: Выделить всё
T1 equ .212 ; задержка 1
T2 equ .2
TP equ .200 ; определяет задержку между приемом посылок
Tn equ .50 ; начальная задержка (ближе к середине полубита)