;****************** PROJETO VOLTIMETRO DIGITAL INICIO : 01/06/06 TERM.:05/06/06********************************* ; AUTOR: CLÁUDIO CARMONA LÁRIOS ; PROCESSADOR: PIC 16F676 DE 14 PINOS ,8 AD ,1 COMPARADOR, 1024 K FLASH, 64BYTES RAM,128 EEPROM,12 I/O ; OBJETIVO: MOSTRAR VALOR DE UMA TENSÃO ANALOGICA NOS DIGITOS DE UM DISPLAY EXTERNO, SENDO ; ESTE POR MULTIPLEXAÇÃO. A CONVERSÃO BINARIA PARA BCD E BCD PARA 7 SEGUIMENTOS SERÁ ; FEITO PELO PROGRAMA FIRMWARE. ; USE RC INTERNO NO_CLOCKOUT,WATCH DOG OFF, BROWN DETECT ON,POWER ON RESET ON, ; PINOS:1=VDD* 2=RA5/TICK1/OSC1/CLK IN* 3=RA4/T1G-/OSC2/CLKOUT* 4=RA3IN APENAS/-MCLR/VPP* 5=RC5* 6=RC4* 7=AN7/RC3 ; 8-RC2/AN6* 9=RC1/AN5* 10=RC0/AN4* 11=RA2/C OUT/T0CK1/INT/AN2* 12=RA1/-CIN/PGD/AN1/VREF* 13=RA0/+CIN/PGD/AN0* ; 14=VSS (TERRA). ;___________________________________________________________________________________________________ ; #INCLUDE ; ARQUIVO PADRAO ; USE RC INTERNO NO_CLOCKOUT,WATCH DOG OFF, BROWN DETECT ON,POWER ON RESET ON ; PAGINACAO DE MEMORIA; #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ; VARIAVEIS CBLOCK 0X20 ;ENDERECO INICIAL DE MEMORIA DIG0 ;ACUMULADOR DOS DIGITOS DO DISPLAY ZERO (0) DIG1 ;ACUMULADOR DOS DIGITOS DO DISPLAY UM(1) DIG2 ;ACUMULADOR DOS DIGITOS DO DISPLAY DOIS (2) DIG3 ;ACUMULADOR DOS DIGITOS DO DISPLAY TREIS (3)(NÃO USADO) CENV ;CONTADOR DE ENVIO PARA MOSTRADOR EXTERNO DEL1 ;DELAY DEL2 ;IDEM DEL3 ;IDEM DEL4 ;DELAY PARA TRANSMISSAO E AMOSTRAGEM DOS DISPLAYS DEL5 ;IDEM CONT1 ;CONTADOR AUXILIAR PARA RESULTADO PARTE BAIXA DA CONVERSÃO CONT2 ;CONTADOR AUXILIAR PARA RESULTADO PARTE ALTA DA CONVERSÃO CDELAP ;DELAY PARA REDUZIR CONVERSÕES E OPERAR MULTIPLEXAÇÃO PONTK ;PONTEIRO PARA KATODOS DOS SEGUIMENTOS WAUX ;W AUXILIAR ENDC ;======================DEFINICAO DE BITS E FLAGS============================================== #DEFINE LIGAC ADCON0,1;DEFINE PALAVRA PARA LIGAR/DESLIGAR CONVERSÃO #DEFINE BIT4 VALCOM,4;BITE N.4 DO REGISTRO DE VALOR A SER COMPARADO #DEFINE BIT5 VALCOM,5 #DEFINE BIT6 VALCOM,6 #DEFINE BIT7 VALCOM,7 ;*********************************************************************************************** ; CONSTANTES VDEL1 EQU .250; 250 VALOR INICIAIS PARA DELAY VDEL2 EQU .5; 250 IDEM VDEL3 EQU .1 ; 1 IDEM VDEL4 EQU .125 ; FREQUENCIA DE APRESENTAÇÃO MULTIPLEXADA (ALTERA O ABAIXO) VDEL5 EQU .1 VDELAP EQU .40 ; VALOR DE VEZES QUE SERÁ REPETIDA A ULTIMA CONVERSÃO AD ;************************************************************************************************* ; VETOR E2PROM ; ORG H'2100' ;................................................................................................. ; VETOR DE RESET ORG 0X00 GOTO INICIO ;................................................................................................ ; VETOR DE INTERRUPCAO ORG 0X04 RETFIE ;................................................................................................ ; ; INICIO BANK1 ;BANCO 1 CALL 0X03FF ;BUSCA CALIBRAÇÃO DO OSCILADOR MOVWF OSCCAL ;TRANSFERE PARA O REG.OSCILADOR MOVLW .0 MOVWF INTCON ;DESLIGA TODAS INTERRUPCOES MOVLW b'00000001' ;DEFINE ENTRADAS (1) E SAIDAS (0) NA PIO MOVWF TRISA ; MOVLW .0 MOVWF TRISC MOVLW B'10000000' ;DESAHABILITA PULL-UP DA PIO MOVWF OPTION_REG ;IDEM MOVLW B'01010000' ; SELEÇÃO DE FREQUENCIA DE CONVERSÃO ( OSC/16=01010000) MOVWF ADCON1 ; MOVLW B'00000001' ;SELECIONA RA0 COMO ANALOGICA. - 00000001 MOVWF ANSEL MOVLW .0 MOVWF VRCON BANK0 MOVLW .7 MOVWF CMCON MOVLW B'10000001' ;LIGA CONVERSOR AN/DIG B6=1 VREF E 0 VDD PARA COMPARAR 10000001 MOVWF ADCON0 ; * ESCOLHE CANAL 0/REF AO VCC/MODO DE SAIDA PARA DIREITA CLRF PORTA ;LIMPA PORTA CLRF CONT1 CLRF CONT2 CLRF DEL1 CLRF DEL2 CLRF DEL3 CLRF PONTK MOVLW VDELAP MOVWF CDELAP MAIN NOP BSF LIGAC ;INICIA CONVERSÃO BTFSC LIGAC ;TESTA SE CHEGOU AO FIM DA CONVERSÃO GOTO $ - 1 ;SE NÃO LOOP ATÉ TERMINO DA CONVERSÃO MOVFW ADRESH MOVWF CONT2 ;CARREGA CONTADOR AUXILIAR COM RESULTADO ALTO BANK1 MOVFW ADRESL BANK0 MOVWF CONT1 ;CARREGA CONTADOR AUXILIAR 1 COM RESULTADO BAIXO MOVLW VDELAP ;VALOR DE VEZES QUE SERA AMOSTRADO O MESMO NUMERO ANTES DE CONVERSÃO MOVWF CDELAP CALL CONVDEC ;CONVERTE PARA DECIMAL OS RESULTADOS H E L CALL ACERTO ;ACERTA VALOR SOMANDO E REDUZINDO ;------------------------------------------------------------------------------------------ CD7S MOVFW DIG0 ;CONVERTE PRIMEIRO DIGITO PARA 7 SEGMENTOS CALL SEG7 MOVWF DIG0 MOVFW DIG1 ;CONVERTE SEGUNDO DIGITO PARA 7 SEGUIMENTOS CALL SEG7 MOVWF DIG1 MOVFW DIG2 ;CONVERTE TERCEIRO DIGITO PARA 7 SEGUIMENTOS CALL SEG7 MOVWF DIG2 MOVFW DIG3 ;CONVERTE QUARTO DIGITO PARA 7 SEGUIMENTOS CALL SEG7 MOVWF DIG3 ;------------------------------------------------------------------------------------------ MOSTRA MOVFW PONTK ANDLW B'00000011' ADDWF PCL,F GOTO M0 GOTO M1 GOTO M2 INCF PONTK,F GOTO MOSTRA ;__________________________________________________________________________________ SEG7 ADDWF PCL,F ;TABELA DE CONVERSÃO "CALCULO GOTO" RETORNA 7 SEGUIMENTOS RETLW B'11111100' ;RETORNA NUMERO 0 (ABCDEFGP) F C RETLW B'01100000' ;RETORNA 1 60 RETLW B'11011010' ;RETORNA 2 DA RETLW B'11110010' ;RETORNA 3 F2 RETLW B'01100110' ;RETORNA 4 66 RETLW B'10110110' ;RETORNA 5 B6 RETLW B'10111110' ;RETORNA 6 BE RETLW B'11100000' ;RETORNA 7 E0 RETLW B'11111110' ;RETORNA 8 RETLW B'11110110' ;RETORNA 9 ;------------------------------------------------------------------------------------ M0 MOVFW DIG0 MOVWF WAUX ;CARREGA CONTADOR AUXILIAR CALL COPYD BSF PORTC,2 ;SETA RC2 K0 INCF PONTK,F CALL DELAY2 GOTO MOSTRA M1 MOVFW DIG1 MOVWF WAUX CALL COPYD BSF PORTC,3 ;SETA RC3 K1 INCF PONTK,F CAll DELAY2 GOTO MOSTRA M2 MOVFW DIG2 ;TESTA SE DIG2 É ZERO XORLW 0XFC BTFSC STATUS,Z GOTO NAOMZ ;SE FOR, APAGA ZERO A ESQUERDA MOVFW DIG2 MOVWF WAUX CALL COPYD BSF PORTC,4 ;SETA RC2 K2 INCF PONTK,F CALL DELAY2 GOTO NCONV NAOMZ BCF PORTC,4 ;APAGA RC2 K2 , SE FOR ZERO (DIG2) INCF PONTK,F GOTO NCONV ;------------------------------------------------------------------------- COPYD CLRF PORTA CLRF PORTC BTFSC WAUX,1 BSF PORTA,2 ;SETA RA2 G BTFSC WAUX,2 BSF PORTA,1 ;SETA RA1 F BTFSC WAUX,3 BSF PORTC,5 ;SETA RC5 E BTFSC WAUX,4 BSF PORTA,4 ;SETA RA4 D BTFSC WAUX,5 BSF PORTA,5 ;SETA RA5 C BTFSC WAUX,6 BSF PORTC,1 ;SETA RC1 B BTFSC WAUX,7 BSF PORTC,0 ;SETA RC0 A RETURN ;------------------------------------------------------------------------- NCONV DECFSZ CDELAP,F ; CONTA QUANTAS VEZES VAI AMOSTRAR O MESMO RESULTADO GOTO MOSTRA GOTO MAIN ;-------------------------------------------------------------------------- DELAYTX MOVLW VDEL4 MOVWF DEL4 MOVLW VDEL5 MOVWF DEL5 LOOP2 DECFSZ DEL4,F GOTO LOOP2 DECFSZ DEL5,F GOTO LOOP2 RETURN ;-------------------------- ---------------- ;ROTINA DE ATRASO ENTRE AMOSTRAGENS DELAY2 MOVLW VDEL1 MOVWF DEL1 MOVLW VDEL2 MOVWF DEL2 MOVLW VDEL3 MOVWF DEL3 LOOP1 DECFSZ DEL1,F GOTO LOOP1 DECFSZ DEL2,F GOTO LOOP1 DECFSZ DEL3,F GOTO LOOP1 RETURN ;-------------------------------------------------------------------------------------- ; ROTINA DE CONVERSÃO BINÁRIA PARA BCD CONVDEC CLRF DIG0 ;LIMPA OU ZERA ACUMULADORES BCD CLRF DIG1 CLRF DIG2 CLRF DIG3 BTFSC CONT2,1 ;TESTA 10 BIT DO RESULTADO DA CONVERSÃO CALL B10 ;ROTINA DE SOMATÓRIA P/ 10B BTFSC CONT2,0 ;TESTA 9 BIT CALL B9 BTFSC CONT1,7 ;TESTA 8 BIT DO RESULTADO DA CONVERSÃO CALL B8 BTFSC CONT1,6 ;TESTA 7 BIT CALL B7 BTFSC CONT1,5 ;TESTA 6 BIT DO RESULTADO DA CONVERSÃO CALL B6 BTFSC CONT1,4 ;TESTA 5 BIT CALL B5 BTFSC CONT1,3 ;TESTA 4 BIT DO RESULTADO DA CONVERSÃO CALL B4 BTFSC CONT1,2 ;TESTA 3 BIT CALL B3 BTFSC CONT1,1 ;TESTA 2 BIT DO RESULTADO DA CONVERSÃO CALL B2 BTFSC CONT1,0 ;TESTA 1 BIT CALL B1 CALL ACERTO RETURN ;------------------------------------------------------------------------------------- B10 MOVLW .5 ;SUB-ROTINA DE SOMA RELATIVA AO EXPOENTE BINÁRIO 2 ELEVADO A BX ADDWF DIG2,F MOVLW .1 ADDWF DIG1,F MOVLW .2 ADDWF DIG0,F RETURN B9 MOVLW .2 ADDWF DIG2,F MOVLW .5 ADDWF DIG1,F MOVLW .6 ADDWF DIG0,F RETURN B8 MOVLW .1 ADDWF DIG2,F MOVLW .2 ADDWF DIG1,F MOVLW .8 ADDWF DIG0,F RETURN B7 MOVLW .6 ADDWF DIG1,F MOVLW .4 ADDWF DIG0,F RETURN B6 MOVLW .3 ADDWF DIG1,F MOVLW .2 ADDWF DIG0,F RETURN B5 MOVLW .1 ADDWF DIG1,F MOVLW .6 ADDWF DIG0,F RETURN B4 MOVLW .8 ADDWF DIG0,F RETURN B3 MOVLW .4 ADDWF DIG0,F RETURN B2 MOVLW .2 ADDWF DIG0,F RETURN B1 MOVLW .1 ADDWF DIG0,F RETURN ;-------------------------------------------------------------------------------- ;ROTINA DE REDUÇAO PARA MAXIMO 9 EM CADA DIGITO APOS SOMATORIA POR PESO. ACERTO MOVLW .10 SUBWF DIG0,W BTFSC STATUS,C ;SE CARRY É ZERO NUMERO NEGATIVO CALL REDUZ0 ;/PULA E MANTEM VALOR ORIGINAL DO MOVLW .10 ;/ DIG0 SUBWF DIG1,W BTFSC STATUS,C CALL REDUZ1 MOVLW .10 SUBWF DIG2,W BTFSC STATUS,C CALL REDUZ2 RETURN ;------------------------------------------------------------------------------ REDUZ0 INCF DIG1,F MOVWF DIG0 MOVLW .10 SUBWF DIG0,W BTFSS STATUS,C RETURN INCF DIG1,F MOVWF DIG0 GOTO $-6 REDUZ1 INCF DIG2,F MOVWF DIG1 MOVLW .10 SUBWF DIG1,W BTFSS STATUS,C RETURN INCF DIG2,F MOVWF DIG1 GOTO $-6 REDUZ2 INCF DIG3,F MOVWF DIG2 MOVLW .10 SUBWF DIG2,W BTFSS STATUS,C RETURN INCF DIG3,F MOVWF DIG2 GOTO $-6 ;------------------------------------------------------------------ END