Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Переключение опорного для компаратора в PIC12F675

Непрочитано 03.04.2015, 20:27  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию Переключение опорного для компаратора в PIC12F675

Доброго времени! Я снова со своим гемором....
Имеем компаратор в пике. При неизменном внутреннем опорном работает "как в книжке". Ежели переключить опорное на другой номинал, ("отключить" первый по тексту "GOTO Start") происходят странные вещи... Хаос попросту. Где я себя кидаю? Задержки по времени, после переключения, как для АЦП, не помогли.
Хелп, плиз!
Вложения:
Тип файла: rar UsPlSt.rar (15.8 Кб, 53 просмотров)
Реклама:
__________________
Смотрящий под ноги - звёзды видит в лужах.
rusyvochka вне форума  
Непрочитано 04.04.2015, 08:23  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию 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.
NewWriter вне форума  
Непрочитано 04.04.2015, 09:43  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию 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 представление удобно в чистовом виде. На данном этапе установки "от фонаря". ожидается правильная реакция компаратора.
Вложения:
Тип файла: txt UsPlSt - копия (2).txt (1.5 Кб, 29 просмотров)
__________________
Смотрящий под ноги - звёзды видит в лужах.
rusyvochka вне форума  
Непрочитано 04.04.2015, 10:27  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

добавил чуть рассуждений / коментариев
Вложения:
Тип файла: txt UsPlSt - копия (3).txt (1.8 Кб, 28 просмотров)
__________________
Смотрящий под ноги - звёзды видит в лужах.
rusyvochka вне форума  
Непрочитано 04.04.2015, 12:03  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

Всё нужно делать правильно и незапутанно. Конфиг МК то кто прописывать будет? А по умолчанию в конфиге GP5 не подключен к выходному порту.





Да не нужны там никакие "рассуждения и комментарии". Особенно рассуждения. Они вообще до лампочки, эти рассуждения. Я ж говорю - надо понятным языком записывать сам текст программы, сам код. А не наворачивать непереводимых конструкций из макросов и FSR/INDF, это ж жуть. Это ж сколько действий тратится на то, чтобы сначала выставить адрес в FSR, потом занести константу через INDF то, вместо того, чтобы напрямую сделать, я уже устал объяснять, что косвенная адресация применяется в таблицах, циклических операциях, в буферах. А для непосредственной работы с регистром есть прямая адресация. Путаешься с банками - так есть директива ассемблера banksel, которая выставит биты статуса в соответствии с банком.

Последний раз редактировалось NewWriter; 04.04.2015 в 12:05.
NewWriter вне форума  
Непрочитано 04.04.2015, 16:03  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию 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, всё работает как ожидается???
Миниатюры:
Нажмите на изображение для увеличения
Название: 2015_4_4_14_42_55.jpg
Просмотров: 32
Размер:	88.3 Кб
ID:	77778   Нажмите на изображение для увеличения
Название: 2015_4_4_14_43_21.jpg
Просмотров: 28
Размер:	239.8 Кб
ID:	77779   Нажмите на изображение для увеличения
Название: 2015_4_4_14_43_21-2.jpg
Просмотров: 27
Размер:	242.7 Кб
ID:	77780  

Нажмите на изображение для увеличения
Название: 2015_4_4_14_51_45.jpg
Просмотров: 27
Размер:	127.7 Кб
ID:	77781  
__________________
Смотрящий под ноги - звёзды видит в лужах.
rusyvochka вне форума  
Непрочитано 04.04.2015, 18:19  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию 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 внутри макроса. Ха! Ну и нафига тогда писался этот макрос, если тут же, не отходя далеко, сразу и вляпался в него же!
Вложения:
Тип файла: zip 09 Comparator test.zip (47.2 Кб, 28 просмотров)

Последний раз редактировалось NewWriter; 04.04.2015 в 21:10.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
rusyvochka (05.04.2015)
Непрочитано 05.04.2015, 12:38  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

То ли лыжи не едут.....
Задумка в целом не совсем такая:
- при снижении напряжения на -Cin (GP1) ниже 2,34, выставляется один флаг;
- при снижении до 1,72 - другой.
Светодиоды "подвесил" для наглядности в "Протеусе".
Опять таки те же: по отдельности каждая установка отрабатывает. При смене - остается единица на CMCON,COUT ??? При снижении контролируемого, как бы отрабатывает правильно: один порог, затем второй. При увеличении - хренушки. Может сам Протеус балуется? Пока в железе нет, с понедельника соберу, проверю уже точно.
Программа в "столбик" с прыжками на паузу (увеличил до 10 мс - не помогло, хотя должно хватать 10 мкс).
NewWriter ‹Я не знаю, кому как удобнее, но вот лично мне разгребать такие конструкции не удобно› Вы уж извините, с компараторами в пике первый раз столкнулся. Учусь понемногу.
Миниатюры:
Нажмите на изображение для увеличения
Название: 2015_4_5_11_36_31.jpg
Просмотров: 22
Размер:	324.7 Кб
ID:	77820  
Вложения:
Тип файла: txt UsPlSt - копия (2).txt (1.9 Кб, 21 просмотров)
Тип файла: rar UsPlSt.rar (2.73 Мб, 18 просмотров)
__________________
Смотрящий под ноги - звёзды видит в лужах.

Последний раз редактировалось rusyvochka; 05.04.2015 в 12:43.
rusyvochka вне форума  
Непрочитано 05.04.2015, 16:45  
rusyvochka
Гражданин KAZUS.RUN
 
Аватар для rusyvochka
 
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
rusyvochka на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

Бл. почему об этом нигде не написано? Ведь и так "0" прописан!
Без этого не работает! Чтение CMCON, как профилактика в обработке прерывания, не отрабатывает. ШОК!
С "указанием" выхода даже первая "кривая" по мнению NewWriter работает на ура, и без тасовки банков, через INDF, прописаний перед опросом в FSR.
Обьясняю: выполняется в обработке прерывания, потому "шустрее" выхожу из подпрограммы. Опережая: в прерывании не только компараторы опрашиваются... каждый такт на счету .
В целом спасибо! пошаговый режим проекта NewWriter натолкнул на "попробовать" добавить прям/инв.
Всё выстрелило, но осадок остался....
Можно не в тему:
Lo_Vref set .2 | b'00100000' - это как IOR отрабатывает? или сложение? первый раз встречаю такой формат записи.
LED set 5 - почему не "equ" или "#define"? тоже не встречал.
BZ, SKPC, BNC, SETC и другие недокументированные встречал на просторах...
Что полистать порекомендуете на предмет почитать в целях повышения, так сказать, самоначитанности?
Миниатюры:
Нажмите на изображение для увеличения
Название: 2015_4_5_15_35_42.jpg
Просмотров: 26
Размер:	298.1 Кб
ID:	77835  
__________________
Смотрящий под ноги - звёзды видит в лужах.

Последний раз редактировалось rusyvochka; 05.04.2015 в 16:58.
rusyvochka вне форума  
Непрочитано 05.04.2015, 17:34  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,009
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

rusyvochka,
а откуда в тексте программы у вас берутся относительные переходы типа
GOTO $-0x01 ?
вы их в листинге берете или из дизассемблера ковыряете?
почему не используете метки?
jump вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Парапсихология, гомеопатия и паранаука Marc2005 Отвлекитесь, эмбеддеры! 2616 05.09.2014 23:07
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 01:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.