; PROJETO CONTROLE REMOTO A 2 FIOS ,USANDO MALHA RESISTIVA, BOTÕES E CONVERSOR AD INTERNO DO PIC ; VERSÃO: MODO RETENÇÃO (ON/OFF) ; INICIO : 11/02/13 TERM.:13/02/13 ; AUTOR: CLÁUDIO CARMONA LÁRIOS ; PROCESSADOR: PIC 16F676 ; PROJETO DIDÁTICO APENAS. ; OBJETIVO: CONTROLAR 10 RELES, USANDO NIVÉIS DE TENSÃO GERADOS POR MALHA RESISTIVA ACOPLADA ; A 10 BOTÕES. ; USE RESISTOR DE 4K7 DO VCC AO PINO 13 E DAI IRÁ A RESISTORES COM CHAVES DACTILAR EM SÉRIE LIGADOS AO GND, ; SENDO ESTES PARES DE RESISTORES/CHAVES LIGADOS EM PARALELO ENTRE SÍ. ; VALORES: 0,470,1K,1K8,2K7,4K7,6K8,10K,18K,33K (2% TOLERÂNCIA) ;___________________________________________________________________________________________________ ; #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 FLAGS ;FLAGS CONT2 ;CONTADOR AUXILIAR PARA RESULTADO PARTE ALTA DA CONVERSÃO CNT ;GERAL Z1 C1 C0 C1A C0A LC LC1 TEMP R0 R1 R2 R3 R4 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 #DEFINE TRAVA1 FLAGS,0 ;TRAVA PARA ON/OFF ;*********************************************************************************************** ; CONSTANTES CARGA_Z1 EQU 0XFF ;TEMPO MINIMO COM BOTÕES SOLTOS ; 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 ;------------------------------------------------------------------------------------------------- ;MACRO FACILITADOR ;COMPARA NIVÉIS DE TENSÃO COM LIMITES PRÉ_ESTABELECIDOS 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 ;NÃO USADO ;================================================================================= ; 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 CLRF FLAGS MOVLW CARGA_Z1 MOVWF Z1 CLRF PORTC CLRF PORTA ;PROGRAMA PRINCIPAL MAIN CALL GET_AD ;CONVERTE MOVFW R3 MOVWF C1 MOVFW R4 MOVWF C0 COMPARAR HIGH(B9_LIMITE/2),LOW(B9_LIMITE/2) ;C>+ C<- BTFSC STATUS,C GOTO V_MAIN ;C>LIMITE ;NENHUM BOTÃO APERTADO MOVLW .8 ;DELAY PARA DEBOUNCE DA CHAVE CALL DELAY GOTO TESTAR_B V_MAIN ;ROTINA QUE AGUARDA POR UM TEMPO COM OS BOTÕES SOLTOS ; PARA PERMITIR NOVO ACIONAMENTO EM ALGUM BOTÃO DECFSZ Z1,F ;DECREMENTA TEMPO MINIMO SOLTO GOTO MAIN BCF TRAVA1 ;DESTRAVA BOTÃO PARA MUDANÇAS MOVLW CARGA_Z1 MOVWF Z1 ;NOVA CARGA DE TEMPO GOTO MAIN ;VAI PARA ROTINA PRINCIPAL ;COMEÇA A OBTENÇÃO DO VALOR DA TENSÃO DE ENTRADA ;USA 32 CONVERSÕES . TESTAR_B 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. 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 BTFSC TRAVA1 ;TESTA SE ESTÁ TRAVADO GOTO SAIR ;TRAVADO, SAI BSF TRAVA1 ;NÃO ESTÁ, MAS AGORA TRAVA BTFSS S9 ;TESTA ESTADO DA SAIDA GOTO BSFS91 ;SE '0' LIGA, SE '1' DESLIGA BCF S9 ;DESLIGA GOTO SAIR ;SAIR BSFS91 BSF S9 ;ACIONA GOTO SAIR ;SAIR PR1 COMPARAR HIGH(B8_LIMITE),LOW(B8_LIMITE);C>+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B7_LIMITE),LOW(B7_LIMITE) BTFSS STATUS,C GOTO PR2 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S8 GOTO BSFS92 BCF S8 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B6_LIMITE),LOW(B6_LIMITE) BTFSS STATUS,C GOTO PR3 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S7 GOTO BSFS93 BCF S7 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B5_LIMITE),LOW(B5_LIMITE) BTFSS STATUS,C GOTO PR4 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S6 GOTO BSFS94 BCF S6 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B4_LIMITE),LOW(B4_LIMITE) BTFSS STATUS,C GOTO PR5 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S5 GOTO BSFS95 BCF S5 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B3_LIMITE),LOW(B3_LIMITE) BTFSS STATUS,C GOTO PR6 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S4 GOTO BSFS96 BCF S4 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B2_LIMITE),LOW(B2_LIMITE) BTFSS STATUS,C GOTO PR7 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S3 GOTO BSFS97 BCF S3 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B1_LIMITE),LOW(B1_LIMITE) BTFSS STATUS,C GOTO PR8 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S2 GOTO BSFS98 BCF S2 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR HIGH(B0_LIMITE),LOW(B0_LIMITE) BTFSS STATUS,C GOTO PR9 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S1 GOTO BSFS99 BCF S1 ;C+ C<- BTFSC STATUS,C GOTO SAIR ;C>LIMITE COMPARAR 0,0 BTFSS STATUS,C GOTO PR10 ;C>LIMITE BTFSC TRAVA1 GOTO SAIR BSF TRAVA1 BTFSS S0 GOTO BSFS910 BCF S0 ;C