Перейти к содержанию

управление БП через оптрон + PIC16F628A


Пентагрид

Рекомендуемые сообщения

Решил собрать источник питания с управлением через PIC16F628A (парой кнопок переключать нужные напряжения). Взял обычный импульсник на 15 В, из обратной связи выдрал TL431, оставил оптрон, его повесил на выход МК. Написал тестовую прошивку: задаётся Vref через VRCON, компаратор сравнивает и выдаёт на оптрон 1 или 0.

Сделал два варианта прошивки: в одном проверка на срабатывание выполняется циклически, в другом - вызов прерывания при реакции компаратора. Оба варианта тестировал в Протеусе (потенциометр и светодиод), работают. На бредборде завёлся только первый (с нагрузкой и без). А с прерыванием не работает: при отсутствии нагрузки выдаёт нужное напряжение, но стоит только подключить нагрузку и даже если рукой коснуться - напряжение падает. С нагрузкой вообще не заводится.

МК питаю отдельно (тлф. зарядка с домотанной вторичкой + 7805). Несколько раз прошёлся по прошивке, не нашёл за что зацепиться. Прошу совета.

Схема

Скрытый текст

5c744667866cf_.thumb.JPG.0f70dc6f63691c6d8b39834f7bfab079.JPG

В коде присутствуют рудименты для кнопок (пока не вводил).

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
 RA2 ничего не подключать!
;MCLR - сброс в ноль

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

#define	up	PORTA,7
#define	down	PORTA,6
#define	sd	PORTA,0

CBLOCK 70h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC


;переход к основной программе
org	0000h
goto	start


;переход к прерыванию
org	0004h
btfsc	CMCON,7	;обработка прерываний (опрос компаратора и вывод ОС)
goto	sd_0
goto	sd_1

sd_0:			;есть накачка
bcf	sd
goto	komp_end

sd_1:			;нет накачки
bsf	sd
goto	komp_end

komp_end:
bcf	PIR1,6

retfie
;конец обработки прерываний


;основная программа - инициализация МК
start:
BCF	INTCON,GIE	;глобальное запрещение прерываний
BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	;использовать только 2 компаратор
MOVWF	CMCON
BSF	STATUS,RP0	;банк 1 (TRISA, VRCON)
bsf	TRISA,1		;настройка пинов
bcf	TRISA,0


MOVLW	b'11101110'	;включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		;14В (2,92В)
BCF	STATUS,RP0	;банк 0 (порты)
CALL	delay_10mks	;задержка 10 мкс

MOVF	CMCON,F	;чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;сбросить флаг прерываний
BSF	STATUS,RP0	;банк 1
BSF	PIE1,CMIE	;разрешить прерывания от модуля компараторов
BCF	STATUS,RP0	;банк 0
BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00		;PORTB - выход
movwf	TRISB
bcf	STATUS,RP0
;конец инициализации МК
bcf	PIR1,6
;пусковой вызов ОС (без него не заработает до нажатия кнопок up/down)
btfsc	CMCON,7
goto	sd_0_first
goto	sd_1_first

sd_0_first:
bcf	sd
goto	komp_end_first

sd_1_first:
bsf	sd
goto	komp_end_first

komp_end_first:
bcf	PIR1,6
;конец пускового вызова ОС


main:
nop
nop
nop
goto	main



;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return


END

 

 

comp5nop.rar

Ссылка на комментарий
Поделиться на другие сайты

В ассемблере не силен , но за темой буду следить . У самого намечается подобная задача :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

start:
BCF	INTCON,GIE	;глобальное запрещение прерываний
BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей

заменить на

start:
clrf	INTCON	;глобальное запрещение прерываний
banksel PIE1	;запретить прерывания от периферийных модулей
clrf    PIE1 ;

какое отношение эта настройка компаратора 

MOVLW	b'00000101'	;использовать только 2 компаратор
MOVWF	CMCON

имеет к внутреннему ИОН? при этой настройке задействованы входы RA1 и RA2 , RA2 и вас в схеме ваапче не задействован.

требование ДШ об устранении несоответствия 

MOVF	CMCON,F	;чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;сбросить флаг прерываний

при инициализации выполнили,  а в прерывании значит это уже делать недада?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

11 час назад, IMXO сказал:

требование ДШ об устранении несоответствия

Добавил, не заработало. Перепроверю сам БП, есть подозрения на ШИМку. Буду использовать вариант с прямым подключением выхода компаратора к пину.

 

11 час назад, IMXO сказал:

RA2 и вас в схеме ваапче не задействован

Бит VRCON,6=1 подключает ИОН к RA2, т.е. он идёт на вход компаратора внутри МК.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Это твои опыты показывают. Мои например опыты отличаются от твоих , причем в противоположную сторону .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

33 минуты назад, artos5 сказал:

причем в противоположную сторону

Получилось что-нибудь работоспособное с прерыванием?

Ссылка на комментарий
Поделиться на другие сайты

Ну естественно , как же без них любимых?))

При помощи прерываний можно из невозможного сделать возможное !

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Лучше изучай си , он не привязан к архитектуре так как ассемблер . Ассемблер для критичных к исполнению вещей . Через пару лет будут поголовно 32х битки , и о ассемблере мало кто будет вспоминать.  Я и на си успешно решаю много задач. 

1 минуту назад, Пентагрид сказал:

выкладывай

Что именно? У меня много чего на прерываниям есть. И все отлично работает !

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

21 минуту назад, Пентагрид сказал:

работоспособное с прерыванием?

У меня даже где-то есть решение софтово стабилизатора тока на attiny13A

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Похоже, проблема была в конфигурационных файлах проекта (переносил и компилировал на разных компьютерах) и/или "пусковой ОС". Откатил и написал для прерываний заново (без пусковой ОС), теперь работает.

Вариант с прерыванием. Работает только при наличии серьёзной нагрузки, в противном случае через 5 сек напряжение падает до нуля и МК не реагирует на подключение нагрузки. Можно применять, если по ходу кода будет хоть раз проводиться программный опрос в течение упомянутого времени.

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;к RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start

ORG	4

btfsc	CMCON,7	;обработка прерываний (опрос компаратора и вывод ОС)
goto	sd_0
goto	sd_1

sd_0:			;есть накачка
bcf	PORTA,0
goto	komp_end

sd_1:			;нет накачки
bsf	PORTA,0
goto	komp_end

komp_end:
MOVF	CMCON,F
bcf	PIR1,6

retfie

start:
BCF	INTCON,GIE	;Глобальное запрещение прерываний
BCF	INTCON,PEIE	;Запретить прерывания от периферийных модулей
CLRF	PORTA		;Инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2-й компаратор
BSF	STATUS,RP0	; Выбрать Банк 1
bsf	TRISA,1
bcf	TRISA,0

MOVLW	b'11101001'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 1,88В (9В)
			; установить VR<3:0>=6
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
BSF	STATUS,RP0	;Выбрать банк 1
BSF	PIE1,CMIE	;Разрешить прерывания от модуля компараторов
BCF	STATUS,RP0	;Выбрать банк0
BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00
movwf	TRISB
bcf	STATUS,RP0


komp2_pusk:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd2_0_pusk
goto	sd2_1_pusk

sd2_0_pusk:
bcf	PORTA,0
goto	manolo

sd2_1_pusk:
bsf	PORTA,0
goto	manolo

manolo:
nop
nop
nop
goto	manolo

;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

Вариант с циклической проверкой. Надёжно работает с нагрузкой и без, подключением и отключением в процессе работы. Без нагрузки напряжение гуляет в пределах 1 В,  с нагрузкой -- стабильно. Похоже, придётся вывести его в подпрограмму и вызывать везде, где только возможно зацикливание (опрос кнопок и т.п.).

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;к RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start



start:
BCF	INTCON,GIE	;Глобальное запрещение прерываний
BCF	INTCON,PEIE	;Запретить прерывания от периферийных модулей
CLRF	PORTA		;Инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2-й компаратор
BSF	STATUS,RP0	; Выбрать Банк 1
bsf	TRISA,1
bcf	TRISA,0

MOVLW	b'11101001'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 1,88В (9В)
			; установить VR<3:0>=6
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
;BSF	STATUS,RP0	;Выбрать банк 1
;BSF	PIE1,CMIE	;Разрешить прерывания от модуля компараторов
;BCF	STATUS,RP0	;Выбрать банк0
;BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
;BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00
movwf	TRISB
bcf	STATUS,RP0


komp2:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd2_0
goto	sd2_1

sd2_0:
bcf	PORTA,0
goto	komp2

sd2_1:
bsf	PORTA,0
goto	komp2


;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

comp666interrupt.rar

comp777cycle.rar

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Пентагрид сказал:

Похоже, придётся вывести его в подпрограмму и вызывать везде, где только возможно зацикливание (опрос кнопок и т.п.).

Какое зацикливание?? Сделайте все на прерываниях и будет все на автомате работать!

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, artos5 сказал:

будет все на автомате работать

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

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, Пентагрид сказал:

Надо подобрать холостую нагрузку

Так надо цеплять нагрузочный резистор , порядка 51 - 100 Ом при 12в питании .

 

Так вырубаться не должно ! Будут колебания , но вырубаться ничего не должно :) что то не так или с кодом инициализации или с алгоритмом реализации стабилизатора / обратной связи .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

@artos5 , ради стабильности можно и 50 Ом. Похоже, мне придётся опять вернуться к варианту с прерыванием.

 

Пока тестировал вариант с кнопками и циклическим опросом. Запуск с Vref=0, потом можно переключать кнопками вверх/вниз с шагом 1 В. Без нагрузки всё норм, но с нагрузкой работает только начиная с 9 В, ниже вольтметр не показывает, трансформатор пищит с одной периодичностью. Это похоже на постоянный сброс? Каково Ваше мнение о причинах такой лажи на низких напряжениях?

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;RA7-up, RA6-down
 RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

#define	sd	PORTA,0
#define	up	PORTA,7
#define	down	PORTA,6

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start


;ИНИЦИАЛИЗАЦИЯ МК
start:
clrf	INTCON
banksel	PIE1
clrf    PIE1
banksel PORTA
;BCF	INTCON,GIE	;глобальное запрещение прерываний
;BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация портов
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2 компаратор
BSF	STATUS,RP0
bsf	TRISA,1	;вход -
bsf	TRISA,6	;вход down
bsf	TRISA,7	;вход up
bcf	TRISA,0	;выход оптрон
movlw	0x00
movwf	TRISB

MOVLW	b'11100000'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 0В (0В)
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний



;ОСНОВНОЙ РАБОЧИЙ ЦИКЛ
knopka_up:		;метка работы с кнопкой UP
call	sd_os
btfss	up		;проверка факта нажатия UP
goto	wait_up
goto	knopka_down

wait_up:			;проверка факта отжатия UP
call	sd_os
btfss	up
goto	wait_up
goto	inc_vrcon

inc_vrcon:			;повышение Vref
bsf	STATUS,RP0

btfss	VRCON,0		;проверка потолка Vref=1111
goto	inc_vrcon_in
btfss	VRCON,1
goto	inc_vrcon_in
btfss	VRCON,2
goto	inc_vrcon_in
btfss	VRCON,3
goto	inc_vrcon_in
goto	inc_vrcon_out

inc_vrcon_in:		;повысить Vref (потолок не достигнут)
INCF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_down

inc_vrcon_out:		;не повышать Vref (потолок достигнут)
bcf	STATUS,RP0
goto	knopka_down


knopka_down:		;метка работы с кнопкой DOWN
call	sd_os
btfss	down		;проверка факта нажатия DOWN
goto	wait_down
goto	knopka_up

wait_down:			;проверка факта отжатия DOWN
call	sd_os
btfss	down
goto	wait_down
goto	dec_vrcon

dec_vrcon:			;понизить Vref (плинтус не достигнут)
bsf	STATUS,RP0

btfsc	VRCON,0		;проверка плинтуса Vref=0000
goto	dec_vrcon_in
btfsc	VRCON,1
goto	dec_vrcon_in
btfsc	VRCON,2
goto	dec_vrcon_in
btfsc	VRCON,3
goto	dec_vrcon_in
goto	dec_vrcon_out

dec_vrcon_in:		;понизить Vref (плинтус не достигнут)
DECF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_up

dec_vrcon_out:		;не понижать Vref (плинтус достигнут)
bcf	STATUS,RP0
goto	knopka_up





;подпрограмма ОС
sd_os:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd_0
goto	sd_1
sd_0:			;нет накачки
bcf	sd
goto	sd_end
sd_1:			;есть накачка
bsf	sd
goto	sd_end
sd_end:
MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
return





;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

Пока буду проверять:

1. качество питания МК;

2. опять вариант с непосредственным подключением выхода компаратора к пину.

 

Схема

Скрытый текст

5c781de7aaad5_.thumb.JPG.8b1532c196ccfc4cc14f6f1eb839ec0a.JPG

 

Изменено пользователем Пентагрид
Ссылка на комментарий
Поделиться на другие сайты

R2 уменьшить до 150-200 Ом. К R4 параллельно керамика 10н.

http://narodstream.ru/pic-urok-25-modul-adc-acp-izmeryaem-napryazhenie-chast-1/

https://alex-exe.ru/radio/microcontrollers/atg-comparator-628a/

Ссылка на комментарий
Поделиться на другие сайты

Применил все рекомендации, скомпилировал и испробовал с десяток разных вариантов, в т.ч. с прямым подключением выхода компаратора. Наблюдения:

1. без нагрузки стабильно держит весь диапазон;

2. под нагрузкой 30 Ом напряжение держит с 9 В;

3. под нагрузкой 240 Ом держит весь диапазон подрагивая, стабильно держит с 10-11 В.

 

Решил, что при малых напряжения сказываются факторы:

1. качество питания ИОН (однако запитал от кроны через 7805, и всё осталось как прежде);

2. пульсации измеряемого напряжения (их влияние прослеживается при изменении нагрузки).

Ссылка на комментарий
Поделиться на другие сайты

Удалось постепенно снизить порог стабильной работы до 6 В (электролит. 22 мкФ параллельно R4, керам. 100 нФ между верхним концом R3 и точкой ИОН RA2, напряжение ОС берётся не с диода, а с нагрузки).

Ссылка на комментарий
Поделиться на другие сайты

Так может проблема в 4.7 в стабилитрона? Делитель на него 2 к 1 и посмотри. Код явно кривой

Электролит убери

Изменено пользователем РадиоНастройщик
Ссылка на комментарий
Поделиться на другие сайты

@РадиоНастройщик , делитель рассчитал из того, чтобы нижний диапазон Vref=0...3,13 укладывался в 0...15 В. Стабилитрон пока убрал.

Испытания провожу при прямом выходе CMOUT2=RA4T0CKI, код к нему -- просто инициализация + циклы чтения кнопок +/- 1 В.

Укажите на сомнительные моменты, буду внимателен и попытаюсь перекроить.

Скрытый текст

;4 MHz внутренний
;RA7-up, RA6-down
;компаратор 1	-RA0, outRA3 (не используется, вход на землю)
;компаратор 2	-RA1, outRA4 (используется, СД к Vdd)
 +RA2 ничего не подключать!



list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT 

#define	up	PORTA,7
#define	down	PORTA,6

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start


;ИНИЦИАЛИЗАЦИЯ МК
start:
clrf	INTCON
banksel	PIE1
clrf	PIE1
banksel	PORTA
;BCF	INTCON,GIE	;глобальное запрещение прерываний
;BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация портов
clrf	PORTB

MOVLW	b'00000110'	; оба компаратора, прямые выходе C1-RA3, C2-RA4
MOVWF	CMCON		; только 2 компаратор
BSF	STATUS,RP0
bsf	TRISA,0
bsf	TRISA,1
bcf	TRISA,3
bcf	TRISA,4
bsf	TRISA,2
bsf	TRISA,6
bsf	TRISA,7


MOVLW	b'11100000'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 0В (0В)
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний



;ОСНОВНОЙ РАБОЧИЙ ЦИКЛ
knopka_up:		;метка работы с кнопкой UP
;call	sd_os
btfss	up		;проверка факта нажатия UP
goto	wait_up
goto	knopka_down

wait_up:			;проверка факта отжатия UP
;call	sd_os
btfss	up
goto	wait_up
goto	inc_vrcon

inc_vrcon:			;повышение Vref
bsf	STATUS,RP0

btfss	VRCON,0		;проверка потолка Vref=1111
goto	inc_vrcon_in
btfss	VRCON,1
goto	inc_vrcon_in
btfss	VRCON,2
goto	inc_vrcon_in
btfss	VRCON,3
goto	inc_vrcon_in
goto	inc_vrcon_out

inc_vrcon_in:		;повысить Vref (потолок не достигнут)
INCF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_down

inc_vrcon_out:		;не повышать Vref (потолок достигнут)
bcf	STATUS,RP0
goto	knopka_down


knopka_down:		;метка работы с кнопкой DOWN
;call	sd_os
btfss	down		;проверка факта нажатия DOWN
goto	wait_down
goto	knopka_up

wait_down:			;проверка факта отжатия DOWN
;call	sd_os
btfss	down
goto	wait_down
goto	dec_vrcon

dec_vrcon:			;понизить Vref (плинтус не достигнут)
bsf	STATUS,RP0

btfsc	VRCON,0		;проверка плинтуса Vref=0000
goto	dec_vrcon_in
btfsc	VRCON,1
goto	dec_vrcon_in
btfsc	VRCON,2
goto	dec_vrcon_in
btfsc	VRCON,3
goto	dec_vrcon_in
goto	dec_vrcon_out

dec_vrcon_in:		;понизить Vref (плинтус не достигнут)
DECF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_up

dec_vrcon_out:		;не понижать Vref (плинтус достигнут)
bcf	STATUS,RP0
goto	knopka_up





;подпрограмма ОС
;sd_os:			;проверка компаратора 2
;btfsc	CMCON,7
;goto	sd_0
;goto	sd_1
;sd_0:			;нет накачки
;bcf	sd
;goto	sd_end
;sd_1:			;есть накачка
;bsf	sd
;goto	sd_end
;sd_end:
;MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
;BCF	PIR1,CMIF	;Сбросить флаг прерываний
;return





;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

Изменено пользователем Пентагрид
Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, РадиоНастройщик сказал:

он просто не успевает зажигаться

Как это решить при прямом подключении компаратора? Оригинальные схемы на TL431 обеспечивают гарантированное зажигание?

Ссылка на комментарий
Поделиться на другие сайты

Контроллер считывает показания, при несовпадении выдает импульс 1 мс на светодиод и ждет. Потом опять считывает значение на входе.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

@РадиоНастройщик , всё дело оказалось в самопитании ШИМки, она берётся с того же трансформатора (обмотка Vtx). На малом коэффициенте заполнения напряжения Vcc не хватает, и ШИМка переходит в режим постоянного перезапуска, отчего и скачет вых. напряжение хаотически.

Проверил с временным питанием от "дежурки" (тлф. зарядки с домотанной вторичкой на 13 В, от которой питается МК через 7805). На её трансформатор  намотаю ещё обмотку тонким проводом и будет изолированное питание для ШИМки.

scrn1.png.dfb787ef1b00491f37a132b1e1070b6f.png

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...