Прошивка диммера на PIC10F

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
d.v.ermakov
Администратор
Сообщения: 2185
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Прошивка диммера на PIC10F

Сообщение d.v.ermakov » 28 янв 2019, 22:38

Как я и писал ранее, диммер на PIC10F готов, аппаратная часть работает без нареканий.
Речь идёт о маленькой плате в формате реле, которая может быть установлена вместо реле в панельку. На входе её +12 вольт и ШИМ-сигнал по минус 12 вольт. На выходе - симистор, который обеспечивает фазовую регулировку нагрузки пропорционально входящего ШИМ.
Вот схема:
pic4.jpg
pic4.jpg (60.43 КБ) 4346 просмотров
Вот прошивка на текущий момент:
PIC1028012019.zip
(42.87 КБ) 135 скачиваний

Код: Выделить всё

#include p10f322.inc 
     
;====================================================================
; Variables
;====================================================================
PWMIN	    equ RA0 ; Port PWM
ZC	    equ RA1 ; Port Zero Cross
OUT	    equ RA2 ; Port MOC
ON	    equ 0x00; FIRE ENABLE
FULL	    equ 0x01; ON/OFF TRIAC
I	    equ 0x02; INT ENABLE
CH	    equ 0x03; INT ENABLE

	   constant Period = 0x73 ; (100 Hz)
	   constant C.input_mask = (1<<PWMIN)
	   constant fixdec = 0x01
	   constant mindim = 0x1E 
	   constant onfire = 0x03
	   constant PWMperiod = 0x50 ;0x64 ;(383 Hz)
	   constant FULLcount = 0x09 
; Variables (0x40 thru 0x7F)
           udata
W_TEMP	    res 1
STATUS_TEMP res 1
NCOtmp	    res 1
count	    res 1
TMP	    res 1
FIRE	    res 1
PORTAtmp	    res 1	    
inputs.this_time    res 1	    
inputs.last_time    res 1
edgeR.detected	    res 1
edgeF.detected	    res 1	    

;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

      org  0x00 ; RESET VECTOR
	goto  START
      
      org  0x04 ; INTERRUPT VECTOR
	MOVWF	W_TEMP	  ;Copy W to TEMP register
	SWAPF	STATUS,W	  ;Swap status to be saved into W
			  ;Swaps are used because they do 
			  ;not affect the status bits
	MOVWF	STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
	BSF	FIRE,I
	BTFSC	INTCON,TMR0IF	; INTERRUPT TMR0
	GOTO	TRIAC.OFF
	BTFSC	PIR1,TMR2IF	; INTERRUPT TMR2
	GOTO	INTTMR2
	BTFSC	INTCON,IOCIF	; INTERRUPT-ON-CHANGE
	GOTO	SIN.START
	GOTO	ENDOFINT
	
TRIAC.OFF
	BTFSS	FIRE,FULL
	BCF	LATA,OUT	
	BCF	INTCON,TMR0IF
	BCF	INTCON, TMR0IE
	BCF	T2CON,TMR2ON
	BCF	PIR1, TMR2IF
	CLRF	TMR2
	GOTO	ENDOFINT	

SIN.START
	BTFSS	IOCAF, ZC ; INTERRUPT-ON-CHANGE PORTA 
	GOTO	ENDOFINT
	MOVLW   (1 << ZC)
	XORWF	IOCAF, W
	ANDWF	IOCAF, F
	BTFSC	PORTA, ZC
	GOTO	ENDOFINT	
	BSF	T2CON,TMR2ON
	MOVLW	Period
	MOVWF	TMR0
	BCF	INTCON, TMR0IF
	BSF	INTCON, TMR0IE
	GOTO	ENDOFINT
INTTMR2
	BSF	LATA,OUT
	BCF	T2CON,TMR2ON
	BCF	PIR1, TMR2IF

ENDOFINT
	SWAPF	STATUS_TEMP,W	;Swap STATUS_TEMP register into W
				;(sets bank to original state)
	MOVWF	STATUS		;Move W into STATUS register
	SWAPF	W_TEMP,F	;Swap W_TEMP
	SWAPF	W_TEMP,W	;Swap W_TEMP into W
	retfie
      
;====================================================================
; CODE SEGMENT
;====================================================================

START
; OSC 4MHz (default 8MHz)
    CLRF	TMP     
    MOVLW	b'00100000'
    MOVWF	TMP
    MOVLW	b'01110000'
    IORWF	OSCCON,W
    XORWF	TMP,W
    MOVWF	OSCCON

; INIT VARS


    
; INIT PORTA
    CLRF	PORTA 
    CLRF        LATA 
    CLRF	ANSELA ;Ports all digital
    
; After reset all ports as input
    bsf		TRISA,ZC ; Input port Zero Cross
    bsf		TRISA,PWMIN ; Input port PWM
    BCF		TRISA,OUT    
    ;BSF		WPUA,PWMIN


; TMR0 INIT    
    MOVLW	b'10000101' ;1:64 tmr0 prescaler, pullups disable   
    MOVWF	OPTION_REG
   
; TMR2 INIT
    MOVLW	b'00000011' ;1:64 tmr2 prescaler, 1:1 postscaler, tmr2 off
    MOVWF	T2CON
    MOVLW	0xFF 
    MOVWF	PR2
    BSF		PIE1,TMR2IE ; Interrup TMR2 Enable

; NCO INIT 
    MOVLW	b'00000001'   
    MOVWF	NCO1CLK
    CLRF	NCO1CON
    CLRF	NCO1ACCL
    CLRF	NCO1ACCH
    CLRF	NCO1ACCU
    MOVLW	PWMperiod 
    MOVWF	NCO1INCL
    BSF		NCO1CON,N1EN ; NCO Enable
    
;INTC   
    BSF		IOCAN,ZC ; Int for ZC negativ front
    BSF		INTCON,IOCIE ; Enable Interrupt-on-Change
    BSF		INTCON,PEIE ; Peripheral Interrupt
    BSF		INTCON,GIE ; Global Interrupt Enable
    CLRF	FIRE
    CLRF	NCOtmp
    MOVLW	FULLcount
    MOVWF	count
    

MAINLOOP
    BTFSS	    PIR1,NCO1IF     
    goto	    edge.rise
    DECFSZ	    count
    goto	    clr.nco	
    BSF		    FIRE,FULL
    MOVLW	    FULLcount
    MOVWF	    count    
clr.nco
    BCF		    PIR1,NCO1IF 
    CLRF	    NCO1ACCL
    CLRF	    NCO1ACCH
    CLRF	    NCO1ACCU    
    goto	    MAINLOOP
    
edge.rise
	movfw		PORTA				; load PORTA to Wreg            
	andlw           C.input_mask                    ; mask out I/O bits we're not interested in
        movwf           inputs.this_time                ; save result to variable
        xorwf           inputs.last_time,W              ; XOR last input value with current input value
        andwf           inputs.this_time,W              ; keep only bits that have changed from 0 to 1
        movwf           edgeR.detected                  ; save result to variable;

	movf		inputs.this_time,W              ; load result to variable
	xorwf           inputs.last_time,W              ; XOR last input value with current input value
        andwf           inputs.last_time,W              ; keep only bits that have changed from 0 to 1
        movwf           edgeF.detected

	movfw           inputs.this_time                ; copy input.this_time to 
        movwf           inputs.last_time

	BTFSC		edgeR.detected, PWMIN
	goto		tmr0.start
	BTFSC		edgeF.detected, PWMIN
	goto		tmr0.stop
	;goto	    MAINLOOP 
	
	MOVF	    NCOtmp,W
	MOVWF	    PR2
	goto	    MAINLOOP
	BCF	    STATUS,Z
	BCF	    STATUS,C
	SUBWF	    PR2,W
	BTFSC	    STATUS,Z
	INCF	    PR2,F
	BTFSC	    STATUS,C
	DECF	    PR2,F
	BTFSS	    STATUS,C
	INCF	    PR2,F
	goto	    MAINLOOP 
	
tmr0.start
	CLRF	    NCO1ACCL
	CLRF	    NCO1ACCH
	CLRF	    NCO1ACCU	
	goto	    MAINLOOP
tmr0.stop
	BCF	    NCO1CON,N1EN ;NCO Disable
	MOVLW	    b'11110000'
	ANDWF	    NCO1ACCH,W
	ADDWF	    NCO1ACCU,W
	BTFSC	    FIRE,I
	goto	    tmr0.stop.1
	MOVWF	    NCOtmp
	SWAPF	    NCOtmp,F
	BCF	    FIRE,FULL
	
tmr0.stop.1
	BCF	    FIRE,I
	MOVLW	    FULLcount
	MOVWF	    count 
	BSF	    NCO1CON,N1EN ;NCO Enable	
	goto	    MAINLOOP
TableHi
	ADDWF       PCL,F
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00

TableLo	
	ADDWF       PCL,F
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
	RETLW	    0x00
;====================================================================
      END
Для упрощения мы пока используем только одну частоту входящего ШИМ-сигнала, LOW, 383Hz.

Схема и прошивка диммера опубликованы на условиях лицензии CC BY-NC-SA.
Последний раз редактировалось d.v.ermakov 19 май 2019, 23:10, всего редактировалось 1 раз.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 06 апр 2019, 05:04

Прошивка обновлялась ? Или PIC1028012019.zip крайняя?

d.v.ermakov
Администратор
Сообщения: 2185
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Прошивка диммера на PIC10F

Сообщение d.v.ermakov » 06 апр 2019, 07:37

Обновилась. Просто я достаточно давно в отъезде. На следующей неделе вернусь и выложу.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 06 апр 2019, 09:35

Спасибо буду ждать контроллеры с Китая уже должны прити.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 08 апр 2019, 10:41

Для прошивки пик нужны какие то константи фюзы?

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 08 апр 2019, 10:42

Какие изменения в новой прошивке,в сравнении с выложенной?

d.v.ermakov
Администратор
Сообщения: 2185
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Прошивка диммера на PIC10F

Сообщение d.v.ermakov » 14 апр 2019, 21:42

Прошивку выкладываю в теме про моноблок.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 17 май 2019, 00:39

]Слепил двухканальний диммер,для ванны,думаю витяжкой управлять,чтоби мень шумело+ лампочка для зеркала.Мало того что микроконтроллеры где то застряли унас на почте ,уже вторую неделю так еще программатор пик кит 2 не поддерживает этот микроконтроллер.Теперь сижу и думаю столько времени потратил на заказ + печатку сделал,так еще и зашит нечем.Может кто знает или поможет скомпилировать файл для заливки в микроконтроллер и есть ли способ залить пик кит2?
22.jpg
22.jpg (424.03 КБ) 3838 просмотров

d.v.ermakov
Администратор
Сообщения: 2185
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Прошивка диммера на PIC10F

Сообщение d.v.ermakov » 17 май 2019, 16:38

Уважаемый Andry,
во-первых, поставить MPLAB X и перекомпилить исходник, а потом скормить hex программе второго PICkit - это делов на полчаса;
во-вторых, hex есть в архиве с полным проектом прошивки по ссылке выше в моём сообщении, поищите;
в-третьих, если сильно нужно - могу выслать пару уже прошитых контроллеров.
Фьюзы выставлять не нужно, они все прописаны в hex. Вообще в программаторе ничего трогать не нужно.
Контроллеры PIC10F поддерживаются программатором PICkit2 года примерно с 2008го (до этого действительно не поддерживались).

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 17 май 2019, 19:33

Бил бы очень признателен за контроллеры,прошивку с роширением hex нашол спасибо.Да оно должно подерживаться,только я пик кит 2 ставлю а в виборе микрух нет такой.Обновил с оф сайта последнюю версию программы для программатора и софт последний для него ,а нет такой.Скрини скину вечером,что показывает программа для пик кит 2.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 17 май 2019, 19:42

Baseline Devices
----------------
PIC10F200 PIC10F202 PIC10F204 PIC10F206
PIC10F220 PIC10F222
PIC12F508 PIC12F509 PIC12F510 PIC12F519
PIC16F505 PIC16F506 PIC16F526
PIC16F54 PIC16F57 PIC16F59

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 17 май 2019, 19:43

Нет такой вроде,или пропустил:(

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 17 май 2019, 19:43

Нет 320 :(((

d.v.ermakov
Администратор
Сообщения: 2185
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Прошивка диммера на PIC10F

Сообщение d.v.ermakov » 17 май 2019, 21:02

PIC10F320 в те годы не существовало в природе, поэтому его нет в списке. А потом программатор перестал поддерживаться.
У всех PIC10F интерфейс одинаковый.
PICkit2 программирует PIC10F322, проверено. Правда, уже не помню, как.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 18 май 2019, 10:23

Может выбрать в устройствах PIC10F220,или не пройдет?

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 18 май 2019, 14:32

Помогите зашить .Пришли микроконтроллеры.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 19 май 2019, 15:14

Прошил.но работает странно.Вход ШИМ через резистор 1к на 1 пин PIC10?

avtomat78
Сообщения: 92
Зарегистрирован: 06 фев 2015, 19:02

Re: Прошивка диммера на PIC10F

Сообщение avtomat78 » 19 май 2019, 15:36

Andry писал(а):
19 май 2019, 15:14
Прошил.но работает странно.Вход ШИМ через резистор 1к на 1 пин PIC10?
У вас оптроны стоят 817, у них один светодиод! а нужно два! тоесть 814 оптрон

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 19 май 2019, 17:08

Спасибо,да мой косяк.Куплю на неделе проверю.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка диммера на PIC10F

Сообщение Andry » 21 май 2019, 21:11

купил все равно не хочет работать.Такое ощущение что микроконтроллер виснет.Регулировка есть но например на мозгах виставил Шим 100 и включил то может отрегулировать на ето положение и все .Есть страннные мерцания.Не знаю куда копать.Отключаю ноль PIC перестайот управлять BT138.Значит на 0 реагирует.Может чего с обвязкой? у меня питаеться 5В.На1 пин через 1к резюк подаю ШИМ с мозгов LOW.Раз даже завелось на пару секунд и все перестало регулировать,лампочка еле светила.
Вложения
Снимок.jpg
Снимок.jpg (45.47 КБ) 3670 просмотров
Последний раз редактировалось Andry 21 май 2019, 21:34, всего редактировалось 3 раза.

Ответить