;**************************************************************************** ******************** TITLE PWM0_5V.ASM ; ; CONTROLE DE TENSÃO DE SAIDA 0 - 5 VOLTS ; ; UTILIZA O SISTEMA DE VOLTAGEM DE REFERENCIA E COMPARADOR ; ANALÓGICO INTERNOS PARA GERAR AS TENSÕES DE SAÍDA. ; AUTOR: CLAUDIO LARIOS INICIO:24-11-12 TÉRMINO:24-11-12 ; MICROCONTROLADOR: PIC 16F628A ; OBJETIVO: COM BOTÃO UP E DOWN, CONTROLAR TENSÃO DE SAÍDA DE 0 A 5 VOLTS ; APÓS CERTO TEMPO APERTADO, OS BOTÕES ENTRAM EM MODO 'RÁPIDO' ; USE 1 DISPLAY DE ANODO COMUM : ; PINAGENS DO PIC 16F628A: ; PINO 1 - NÃO USADO ; PINO 2 - NÃO USADO ; PINO 3 - NÃO USADO ; PINO 4 - RESET (RESISTOR DE 10K AO +VCC) ; PINO 5 - GND ; PINO 6 - SEGUIMENTO 'a' DO DISPLAY ; PINO 7 - SEGUIMENTO 'b' DO DISPLAY ; PINO 8 - SEGUIMENTO 'c' DO DISPLAY ; PINO 9 - SAIDA DE TENSÃO 'PWM' DE 0 - 5 VOLTS VIA RESISTOR DE 1K SEGUIDO DE CAPACITOR 100/16 A MASSA ; PINO 10 - SEGUIMENTO 'e' DO DISPLAY ; PINO 11 - SEGUIMENTO 'f' DO DISPLAY ; PINO 12 - SEGUIMENTO 'g' DO DISPLAY ; PINO 13 - NÃO USADO ; PINO 14 - +VCC ; PINO 15 - BOTÃO 'DOWN' (RESISTOR DE 470 OHMS AO BOTÃO E AO GND) ; PINO 16 - NÃO USADO ; PINO 17 - SEGUIMENTO 'd' DO DISPLAY ; PINO 18 - BOTÃO 'UP' (RESISTOR DE 470 OHMS AO BOTÃO E AO GND) ;**************************************************************************** ******************** ;============================================================================ ==================== ;ARQUIVOS PARA COMPILAÇÃO LIST P=16f628A , R=DEC INCLUDE "P16F628A.INC" ;-------------------------- ERRORLEVEL -302 ;ELIMINA MENSAGENS DE ERROS DE BANCOS NORMAIS ;PALAVRA DE CONFIGURAÇÃO __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF & _LVP_OFF ;RAM CBLOCK 0X20 TEMP,TEMP1,AUX,CONTH,CONTL,CONT,DEL2, DEL1,DEL0,FLAGS,Z1 ENDC ;DEFINIÇÕES #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 #DEFINE UP PORTA,1 ;IN - PINO 18 #DEFINE DOWN PORTA,6 ;IN - PINO 15 #DEFINE X2 PORTA,7 ;OUT- PINO 16 #DEFINE AJ_RAP FLAGS,0 ;FLAG DE AJUSTE RÁPIDO ;VARIÁVEIS VTEMP_AJ_RAP EQU 0X30 ;TEMPO ANTES DO AJUSTE RÁPIDO ATUAR (APÓS APERTAR O BOTÃO) ;============================================================================ ====================== ;INICIO DO PROGRAMA ORG 00H INICIO MOVLW .7 MOVWF CMCON ;DESLIGA COMPARADORES MOVLW B'00001100' MOVWF CCP1CON ;ACERTA PARA FUNÇÃO 'PWM' (RB3 SAIDA) MOVLW B'00000111' ;B2=ON/OFF TMR2 B1/B0=PRESCALER MOVWF T2CON BANK1 MOVLW B'11100000' MOVWF VRCON ;VOLTAGEM DE REFERENCIA LIGADA COM '0'V MOVLW B'10000000' ;RB7 ENTRADA, RESTANTE SAÍDAS MOVWF TRISB MOVLW B'11100110' ;RA7 IN, RA3 E4 SAIDAS, RESTANTE ENTRADAS MOVWF TRISA MOVLW 0XFF ;ACERTA FREQUENCIA MOVWF PR2 BANK0 MOVLW B'11000000' ;MOSTRA '0' NO DISPLAY MOVWF PORTB BCF PORTA,0 MOVLW .0 MOVWF CONTL MOVWF CONTH MOVWF CCPR1L ;INICIA ZERADO O PWM BCF CCP1CON,4 BCF CCP1CON,5 LOOP BTFSS UP ;TESTA BOTÕES UP E DOWN GOTO TUP BTFSS DOWN GOTO TDOWN MOVLW VTEMP_AJ_RAP MOVWF Z1 BCF AJ_RAP GOTO LOOP ;LOOP CONTINUO TUP DECFSZ Z1,F GOTO VU78 BSF AJ_RAP VU78 INCF CONTL,F MOVLW .4 SUBWF CONTL,W BTFSS STATUS,C GOTO SAI CLRF CONTL INCFSZ CONTH,F GOTO SAI DECF CONTH,F GOTO SAI TDOWN DECFSZ Z1,F GOTO VU99 BSF AJ_RAP VU99 MOVF CONTL,W BTFSS STATUS,Z GOTO SR9 MOVLW .3 MOVWF CONTL SR9 DECFSZ CONTL,F GOTO SAI MOVLW .3 MOVWF CONTL SR7 MOVF CONTH,F ;TESTA CONTH BTFSC STATUS,Z GOTO SAI DECF CONTH,F GOTO SAI SAI BTFSS CONTL,0 ;ACERTA DUTY CICLE BCF CCP1CON,4 BTFSC CONTL,0 BSF CCP1CON,4 BTFSS CONTL,1 BCF CCP1CON,5 BTFSC CONTL,1 BSF CCP1CON,5 MOVFW CONTH MOVWF CCPR1L CALL DIV_CONTH_25 ;DIVIDE POR 25 CALL TAB_N ;BUSCA DIGITO NA TABELA MOVWF TEMP1 BTFSS TEMP1,3 ;ACERTA BIT EM OUTRA PORTA PARA SEG. 'd' BCF PORTA,0 BTFSC TEMP1,3 BSF PORTA,0 BCF TEMP1,3 ;APAFA 3º BIT MOVFW PORTB ANDLW B'00001000' ;APAGA TODOS BITS , MENOS O 3ºBIT IORWF TEMP1,W MOVWF PORTB MOVLW .10 ;TEMPO DE ACIONAMENTO BTFSC AJ_RAP MOVLW .1 CALL DELAY_W GOTO LOOP ;=============================================================== ;ROTINA QUE DIVIDE CONTH POR 25 DIV_CONTH_25 CLRF TEMP1 MOVFW CONTH MOVWF TEMP VD30 MOVLW .25 SUBWF TEMP,F BTFSS STATUS,C GOTO SAI_W INCF TEMP1,F GOTO VD30 SAI_W MOVFW TEMP1 RETURN ;============================================================== ;ROTINAS DELAY_W MOVWF DEL2 MOVLW .6 MOVWF DEL1 MOVLW .250 MOVWF DEL0 DECFSZ DEL0,F GOTO $-1 DECFSZ DEL1,F GOTO $ - 5 DECFSZ DEL2,F GOTO $ - 9 RETURN TAB_N ANDLW 0X0F ADDWF PCL,F RETLW B'11000000' ;N0 RETLW B'11111001' ;N1 RETLW B'10100100' ;N2 RETLW B'10110000' ;N3 RETLW B'10011001' ;N4 RETLW B'10010010' ;N5 RETLW B'10000010' ;N6 RETLW B'11111000' ;N7 RETLW B'10000000' ;N8 RETLW B'10010000' ;N9 RETLW B'10001001' ;NH RETLW B'10001001' ;NH RETLW B'11000000' ;N0 RETLW B'11000000' ;N0 RETLW B'11000000' ;N0 RETLW B'11000000' ;N0 RETLW B'11000000' ;N0 END