03.04.2015, 20:27
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Переключение опорного для компаратора в PIC12F675
Доброго времени! Я снова со своим гемором....
Имеем компаратор в пике. При неизменном внутреннем опорном работает "как в книжке". Ежели переключить опорное на другой номинал, ("отключить" первый по тексту "GOTO Start") происходят странные вещи... Хаос попросту. Где я себя кидаю? Задержки по времени, после переключения, как для АЦП, не помогли.
Хелп, плиз!
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
04.04.2015, 08:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Вообще-то, очень много непонятных действий... Для чего например через регистры FSR/INDF проводить какую-то разовую операцию? Через эти регистры обращаются к регистрам, адреса которых не являются константами, а меняются (вычисляются) в процессе работы самой программы, например, для таблиц, для буферов.
... Аа, вероятно, чтобы сэкономить на переключениях банков? Да ну, нифига, только дольше получается.
При старте МК и без того выбран "банк 0", смотри даташит, таблицу состояния после сбросов.
Для настройки модулей лучше константы записывать не в hex-виде, а в бинарном, так легче ориентироваться в том, какие биты включены. Вместо 0х99 лучше записать b'10011001' - тут сразу видно что включено.
Блок начальной инициализации МК располагать нужно перед основным текстом программы. Это логичнее. К тому, же, при больших программах можно столкнуться с особенностями перехода через края страниц памяти.
Строчка
Код:
|
GOTO Setup ; Обходим обработчик прерываний |
ничего не дает именно в плане обхода вектора прерываний. В MPLAB-е выбери в меню View-›Program Memory и посмотри, какая команда у тебя пропишется по адресу 0x004 вектора прерываний.
Сообщение от rusyvochka
|
переключить опорное на другой номинал
|
ГДЕ ЭТО В ТЕКСТЕ???? Там дальше по тексту снова операции с регистром CMCON, а не VRCON.
Upd: аа, понял, через INDF... хе. а вдруг FSR за это время поменяется? во-во!
В самом начале:
Код:
|
Start CLRWDT
MOVFF CYKL,GPIO
MOVLF 0x8F,INDF |
- а чему в это время равен регистр FSR то?? По какому адресу произойдет запись через INDF???
прошагав по шагам, получилось, что по адресу 0x99, оставшемуся в FSR после предыдущей записи. А это VRCON, и теперь туда загоняются уже другие данные, зачем тогда было настраивать этот регистр в блоке инициализации МК несколько шагов назад??? Я ж говорю, зачем все эти непонятки с FSR/INDF??? У VRCON статичный, неизменный адрес, он никуда не поменяется, поэтому к нему можно напрямую обращаться. А вдруг при дальнейшем написании проги снова захочется использовать FSR/INDF для других целей, а тут бац и такой замес вылезет, что мама-не горюй..
В том виде, в котором написан текст проги сейчас, тяжело что-то понять. Даже более того - вообще ничего не понятно. Нужно высчитывать, где какие биты, где чего проверяется и почему. Читая текст, нужно постоянно залазить в даташит, потому что я на память не помню, что находится в 6 бите регистра CMCON. А ведь в inc-файле этот бит прописан как COUT. Хорошо хоть регистр записан не по его адресу, а по обозначению.
Весь косяк наверняка в том, какие действия вообще выполняются и как это написано. Вероятно, неправильно посчитано опорное напряжение по формуле, и на входе нет такого напряжения, поэтому дальше программа и не пойдет, если раскомментировать тот самый goto Start, через который не может перешагнуть по условию.
Последний раз редактировалось NewWriter; 04.04.2015 в 09:17.
|
|
|
|
04.04.2015, 09:43
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Это, конечно, не вся программа, а только часть работы с компараторами.
"GOTO Setup" как раз и нужен, чтоб перепрыгнуть 0х04, там еще два прерывания обрабатываются. CYKL & TEMP появились дабы проверить:
BTFSS CMCON,COUT
BSF GPIO,GP4
BTFSC CMCON,COUT
BCF GPIO,GP5
потому как было подозрение, что из-зи прямого воздействия на пин, может "портиться" состояние другого (чтение/мод/запись). Потому пробовал уже через временный с записью в GPIO.
FSR, опять таки, равен 0x99 VRCON, дабы в отладке "не тасовать банки".
Есно, потом замениться на
BSF STATUS,RP0
MOVLW 0x95 (к примеру)
MOVWF VRCON
BCF STATUS,RP0
› позволю себе заметить, что при отладке, да еще и при тупиковых результатах, выражение MOVLF 0x95,INDF или MOVLF 0x95,0 читаются и набираются куда быстрее
Прикрепляю "первоначальный вариант, результат тот-же... расширение на asm по желанию.
P.S. Register in operand not in bank 0. Ensure that bank bits are correct.
при использовании FSR не возникает, ну и в Bin представление удобно в чистовом виде. На данном этапе установки "от фонаря". ожидается правильная реакция компаратора.
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
04.04.2015, 10:27
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
добавил чуть рассуждений / коментариев
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
04.04.2015, 12:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Всё нужно делать правильно и незапутанно. Конфиг МК то кто прописывать будет? А по умолчанию в конфиге GP5 не подключен к выходному порту.
Да не нужны там никакие "рассуждения и комментарии". Особенно рассуждения. Они вообще до лампочки, эти рассуждения. Я ж говорю - надо понятным языком записывать сам текст программы, сам код. А не наворачивать непереводимых конструкций из макросов и FSR/INDF, это ж жуть. Это ж сколько действий тратится на то, чтобы сначала выставить адрес в FSR, потом занести константу через INDF то, вместо того, чтобы напрямую сделать, я уже устал объяснять, что косвенная адресация применяется в таблицах, циклических операциях, в буферах. А для непосредственной работы с регистром есть прямая адресация. Путаешься с банками - так есть директива ассемблера banksel, которая выставит биты статуса в соответствии с банком.
Последний раз редактировалось NewWriter; 04.04.2015 в 12:05.
|
|
|
|
04.04.2015, 16:03
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Если имеется в виду:
LIST P=12F675 ; задан камень
#include ‹P12F675.inc› ; подключили библиотеку, описание
__config b'11111111001100'
radix hex ; система исчисления -
то, с недавних пор, пользуюсь встроенными настройками в MPLab, удобнее:
Снимок 1, галочку только поставить не забыть. рис 2
‹есть директива ассемблера banksel, которая выставит биты статуса в соответствии с банком.› - дык это:
BSF STATUS,RP0
BCF STATUS,PR1 - всегда! две строки, две команды. если раз пять тасовать, 10 лишних команд... (рис3). Иногда, не всегда, удобнее через FSR, на вкус и цвет, как говорят...
‹в конфиге GP5 не подключен к выходному порту.› а вот с этого места по подробнее. рис 4. или TRIS мало? Ведь если я переключу ТОЛЬКО на вторую уставку и задействую ТОЛЬКО GP5, всё работает как ожидается???
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
04.04.2015, 18:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Я не знаю, кому как удобнее, но вот лично мне разгребать такие конструкции не удобно, я целый час смотрел на код, пытаясь вычистить мусор, но в итоге быстрее самому написать, благо уже отработано ранее.
Вобщем, всё очень просто: нужно сначала проверить на пересечение нижнего предела (низкий Vref), если ниже нижнего, включить один LED, если выше нижнего, переключить Vref на высокое напряжение и проверить пересечение верхнего предела. Если выше верхнего предела, включить другой LED, если ниже верхнего предела, значит, напряжение между пределами и оба LED нужно погасить. Никаких доп.регистров и хитрых операций с двойной проверкой одного и того же бита с разных сторон.
Цитата:
|
пользуюсь встроенными настройками в MPLab, удобнее
|
Ога, удобнее, но с точностью до наоборот следует понимать назначение галочки Configuration Bit set in code, ха-ха. Если она установлена, то это означает, что конфигурационные биты заданы ВНУТРИ КОДА, а настройки MPLAB-а игнорируются А в тех файлах как раз и не было строк конфига то.
А по умолчанию, в слове конфигурации, если его не трогать, будут все единицы. А это такой режим осциллятора, при котором "RC on GP5/OSC1/CLKIN".
Сообщение от rusyvochka
|
удобнее через FSR
|
А давай посчитаем, сколько команд уйдет на такой способ, хе-хе. Выставить адрес - две команды (макрос не заменяет команды физически!), записать константу в регистр - еще две команды. А что делать, если пойдет копирование из одного регистра в другой через W?? Непосредственная запись FSR сотрет копируемый байт из W.
Сообщение от rusyvochka
|
директива ассемблера banksel ... дык это:
BSF STATUS,RP0
BCF STATUS,PR1 - всегда! две строки, две команды
|
ГДЕЕЕЕЕ?????? Да ну нафик, я слепой чтоле??? Где в 675-м две сточки, покажите, не вижу, хоть убей! Даже в твоей предыдущей картинке - на один banksel всего одна строчка - BSF 0x3, 0x5. ассемблер не такой тупой: если этого бита в принципе не существует, то он и не будет писать ошибочную строчку
И еще, FSR так же придется переключать, бит IPR=0 для банков 0 и 1, IPR=1 для банков 2 и 3.
А если сунуться в новые МК, которые с четырехзначными цифрами, там .... хааа.
А вот еще одна ошибка, которая возникла из-за стремления всё запутать и сделать не так, как у людей.
В первом файле, код задержки:
Код:
|
; MOVLF 0x20,TEMP
; MOVLF 0xFF,CYKL
; DECFSZ CYKL,F
; GOTO $-0x01
; DECFSZ TEMP,F
; GOTO $-0x04 |
ну и! Сам посмотри. Пишешь, что перейдешь на 4 шага назад. Ога.. отсчитываем 4 строчки назад.. опа, а там - макрос MOVLF, определенный ранее и состоящий из двух строчек, и в листинге на самом деле будет переход на последнюю строчку в теле макроса, то есть команду movwf внутри макроса. Ха! Ну и нафига тогда писался этот макрос, если тут же, не отходя далеко, сразу и вляпался в него же!
Последний раз редактировалось NewWriter; 04.04.2015 в 21:10.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
05.04.2015, 12:38
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
То ли лыжи не едут.....
Задумка в целом не совсем такая:
- при снижении напряжения на -Cin (GP1) ниже 2,34, выставляется один флаг;
- при снижении до 1,72 - другой.
Светодиоды "подвесил" для наглядности в "Протеусе".
Опять таки те же: по отдельности каждая установка отрабатывает. При смене - остается единица на CMCON,COUT ??? При снижении контролируемого, как бы отрабатывает правильно: один порог, затем второй. При увеличении - хренушки. Может сам Протеус балуется? Пока в железе нет, с понедельника соберу, проверю уже точно.
Программа в "столбик" с прыжками на паузу (увеличил до 10 мс - не помогло, хотя должно хватать 10 мкс).
NewWriter ‹Я не знаю, кому как удобнее, но вот лично мне разгребать такие конструкции не удобно› Вы уж извините, с компараторами в пике первый раз столкнулся. Учусь понемногу.
__________________
Смотрящий под ноги - звёзды видит в лужах.
Последний раз редактировалось rusyvochka; 05.04.2015 в 12:43.
|
|
|
|
05.04.2015, 16:45
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
Бл. почему об этом нигде не написано? Ведь и так "0" прописан!
Без этого не работает! Чтение CMCON, как профилактика в обработке прерывания, не отрабатывает. ШОК!
С "указанием" выхода даже первая "кривая" по мнению NewWriter работает на ура, и без тасовки банков, через INDF, прописаний перед опросом в FSR.
Обьясняю: выполняется в обработке прерывания, потому "шустрее" выхожу из подпрограммы. Опережая: в прерывании не только компараторы опрашиваются... каждый такт на счету .
В целом спасибо! пошаговый режим проекта NewWriter натолкнул на "попробовать" добавить прям/инв.
Всё выстрелило, но осадок остался....
Можно не в тему:
Lo_Vref set .2 | b'00100000' - это как IOR отрабатывает? или сложение? первый раз встречаю такой формат записи.
LED set 5 - почему не "equ" или "#define"? тоже не встречал.
BZ, SKPC, BNC, SETC и другие недокументированные встречал на просторах...
Что полистать порекомендуете на предмет почитать в целях повышения, так сказать, самоначитанности?
__________________
Смотрящий под ноги - звёзды видит в лужах.
Последний раз редактировалось rusyvochka; 05.04.2015 в 16:58.
|
|
|
|
05.04.2015, 17:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
|
Re: Переключение опорного для компаратора в PIC12F675
rusyvochka,
а откуда в тексте программы у вас берутся относительные переходы типа
GOTO $-0x01 ?
вы их в листинге берете или из дизассемблера ковыряете?
почему не используете метки?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:50.
|
|