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

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

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

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

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

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


 
Опции темы
Непрочитано 03.04.2015, 20:27  
rusyvochka
Гражданин KAZUS.RU
 
Аватар для 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
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.RU
 
Аватар для 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.RU
 
Аватар для 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Переключение опорного для компаратора в PIC12F675

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





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

Последний раз редактировалось NewWriter; 04.04.2015 в 12:05.
NewWriter вне форума  
Непрочитано 04.04.2015, 16:03  
rusyvochka
Гражданин KAZUS.RU
 
Аватар для 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
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.RU
 
Аватар для 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.RU
 
Аватар для 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.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
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, время: 08:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot