; PROJETO CONTROLE REMOTO A 2 FIOS ,USANDO MALHA RESISTIVA, BOTÕES E CONVERSOR AD INTERNO DO PIC ; MODO PULSO ; INICIO : 11/02/13 TERM.:12/02/13 ; AUTOR: CLÁUDIO CARMONA LÁRIOS ; PROCESSADOR: PIC 16F676 ; PROJETO DIDÁTICO APENAS. ; OBJETIVO: CONTROLAR 10 SAIDAS DE RELE, USANDO NIVÉIS DE TENSÃO GERADOS POR MALHA RESISTIVA ACOPLADA ; A 10 BOTÕES. ;___________________________________________________________________________________________________ ; #INCLUDE ; ARQUIVO PADRAO ; USE RC INTERNO NO_CLOCKOUT,WATCH DOG OFF, BROWN DETECT ON,POWER ON RESET ON __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _BODEN & _MCLRE_ON ERRORLEVEL -302 ;ELIMINA MENSAGEM DE ERRO ; 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 DEL1 ;DELAY DEL2 ;IDEM DEL3 ;IDEM DEL4 ;DELAY PARA TRANSMISSAO E AMOSTRAGEM DOS DISPLAYS DEL5 ;IDEM CONT0 CONT1 ;CONTADOR AUXILIAR PARA RESULTADO PARTE BAIXA DA CONVERSÃO CONT2 ;CONTADOR AUXILIAR PARA RESULTADO PARTE ALTA DA CONVERSÃO CNT CNT1 C1 C0 C1A C0A BR0 BR1 BR2 LC LC1 MAX_H MAX_L MIN_H MIN_L TEMP TEMP1 TMP R0 R1 R2 R3 R4 W_TEMP STATUS_TEMP TEMP_INT 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 #DEFINE S0 PORTA,5 ;PINO 2 SAIDA 0 #DEFINE S1 PORTA,4 ;PINO 3 SAIDA 1 #DEFINE S2 PORTC,5 ;PINO 5 SAIDA 5 #DEFINE S3 PORTC,4 ;PINO 6 SAIDA 3 #DEFINE S4 PORTC,3 ;PINO 7 SAIDA 4 #DEFINE S5 PORTC,2 ;PINO 8 SAIDA 5 #DEFINE S6 PORTC,1 ;PINO 9 SAIDA 6 #DEFINE S7 PORTC,0 ;PINO 10 SAIDA 7 #DEFINE S8 PORTA,2 ;PINO 11 SAIDA 8 #DEFINE S9 PORTA,1 ;PINO 12 SAIDA 9 ;*********************************************************************************************** ; CONSTANTES ; FÓRMULA: V LIMITE = BX_LIMITE X 5VOLTS / 2048 B0_LIMITE EQU 0X005D B1_LIMITE EQU 0X0110 B2_LIMITE EQU 0X01FA B3_LIMITE EQU 0X02BC B4_LIMITE EQU 0X0375 B5_LIMITE EQU 0X045D B6_LIMITE EQU 0X0516 B7_LIMITE EQU 0X05E4 B8_LIMITE EQU 0X0677 B9_LIMITE EQU 0X074B ;------------------------------------------------------------------------------------------------- ;macros COMPARAR MACRO HI, LO MOVLW LO SUBWF C0,W MOVLW HI BTFSS STATUS,C ADDLW 1 SUBWF C1,W ENDM ;................................................................................................. ; VETOR DE RESET ORG 0X00 GOTO INICIO ;................................................................................................ ; VETOR DE INTERRUPCAO ORG 0X04 RETFIE ;================================================================================= ; INICIALIZAÇÃO DO PROGRAMA - RESET ;================================================================================= ; INICIO BANK1 ;BANCO 1 CALL 0X03FF ;BUSCA CALIBRAÇÃO DO OSCILADOR MOVWF OSCCAL ;TRANSFERE PARA O REG.OSCILADOR BANK0 CLRF PORTA ;LIMPA PORTA CLRF PORTC ;CONFIGURA ENTRADAS E SAIDAS, COMPARADOR ANALÓGICO,ETC BANK1 MOVLW b'00000001' ;DEFINE ENTRADAS (1) E SAIDAS (0) NA PIO MOVWF TRISA ; MOVLW .0 MOVWF TRISC MOVLW .0 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 ;PROGRAMA PRINCIPAL MAIN CALL GET_AD ;CONVERTE MOVFW R3 MOVWF C1 MOVFW R4 MOVWF C0 COMPARAR HIGH(B9_LIMITE),LOW(B9_LIMITE);C>+ C<- BTFSC STATUS,C GOTO MAIN ;C>LIMITE ;NENHUM BOTÃO APERTADO MOVLW .8 ;DELAY PARA DEBOUNCE DA CHAVE CALL DELAY ;COMEÇA A OBTENÇÃO DO VALOR DA TENSÃO DE ENTRADA ;USA 32 CONVERSÕES . MOVLW .32 ;NUMERO DE AMOSTRAGENS MOVWF CNT CLRF C1 CLRF C0 NOVA_CV CALL GET_AD ;CONVERTE VSK1 MOVFW R4 ADDWF C0,F ;SOMA RESULTADO BAIXO COM C0 BTFSC STATUS,C INCF C1,F MOVFW R3 ADDWF C1,F DECFSZ CNT,F GOTO NOVA_CV MOVLW 0X04 ;NÚMERO DE DESLOCAMENTOS PARA DIREITA MOVWF CNT DIV_16 BCF STATUS,C ;DIVIDE POR 16 RRF C1,F RRF C0,F DECFSZ CNT,F GOTO DIV_16 ;============================================================= ;TESTA A TENSÃO DE ENTRADA E COMPARA COM OS LIMITES ;RESERVADOS PARA CADA BOTÃO, ATUANDO SOBRE A SAIDA DO RELE DE CARGA, SE NECESSÁRIO. CLRF PORTC CLRF PORTA CLRF TEMP CLRF TEMP1 COMPARAR HIGH(B9_LIMITE),LOW(B9_LIMITE);C>+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B8_LIMITE),LOW(B8_LIMITE) BTFSS STATUS,C GOTO PR1 ;C>LIMITE BSF S9 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B7_LIMITE),LOW(B7_LIMITE) BTFSS STATUS,C GOTO PR2 ;C>LIMITE BSF S8 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B6_LIMITE),LOW(B6_LIMITE) BTFSS STATUS,C GOTO PR3 ;C>LIMITE BSF S7 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B5_LIMITE),LOW(B5_LIMITE) BTFSS STATUS,C GOTO PR4 ;C>LIMITE BSF S6 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B4_LIMITE),LOW(B4_LIMITE) BTFSS STATUS,C GOTO PR5 ;C>LIMITE BSF S5 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B3_LIMITE),LOW(B3_LIMITE) BTFSS STATUS,C GOTO PR6 ;C>LIMITE BSF S4 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B2_LIMITE),LOW(B2_LIMITE) BTFSS STATUS,C GOTO PR7 ;C>LIMITE BSF S3 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B1_LIMITE),LOW(B1_LIMITE) BTFSS STATUS,C GOTO PR8 ;C>LIMITE BSF S2 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B0_LIMITE),LOW(B0_LIMITE) BTFSS STATUS,C GOTO PR9 ;C>LIMITE BSF S1 ;CLIMITE ;NENHUM BOTÃO APERTADO ;================================================================== ;ROTINA DE ATRASO ; ;================================================================== DELAYW DELAYM MOVWF TEMP CALL LcdDelay1 DECFSZ TEMP,F GOTO $-2 RETURN ;------------------------------------------------------------------- DELAY1 LcdDelay1 MOVLW .255 ;DELAY PARA VISUALIZAÇAO DELAY LcdDelay clrf LC movwf LC1 ;duas variáveis em uma LcdDelayLoop decfsz LC,F ;dec. o prim. cont. goto LcdDelayLoop decfsz LC1,F ;dec. o seg. cont. goto LcdDelayLoop return ;------------------------------------------------------------------------- ;ROTINA DE CONVERSÃO AD GET_AD 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 R3 ;SALVA BANK1 MOVFW ADRESL ;OBTEM A PARTE BAIXA DA CONVERSÃO BANK0 MOVWF R4 ;SALVA RETURN END