Utilizando o Comparador do PIC
Os comparadores são usados para fazer a interface de circuitos analógicos para um
circuito digital, comparando duas tensões analógicas e fornecendo uma indicação numérica das suas magnitudes relativas.
PIC16F877A
A Interrupção é habilitado pelo registro PIE2.CMIE. Sua flag é PIE2.CMIF.
C2OUT: Bit de saída do Comparador 2
Caso C2INV = 0:
1 - C2Vin+ maior que C2Vin-
0 - C2Vin+ menor que C2Vin-
Caso C2INV = 1:
1 - C2Vin+ menor que C2Vin-
0 - C2Vin+ maior que C2Vin-
C1OUT: Bit de saída do Comparador 1
Caso C1INV = 0:
1 - C1Vin+ maior que C1Vin-
0 - C1Vin+ menor que C1Vin-
Caso C1INV = 1:
1 - C1Vin+ menor que C1Vin-
0 - C1Vin+ maior que C1Vin-
1 - C1Vin+ maior que C1Vin-
0 - C1Vin+ menor que C1Vin-
Caso C1INV = 1:
1 - C1Vin+ menor que C1Vin-
0 - C1Vin+ maior que C1Vin-
C2INV: Inversão da saída do comparador 2
1 - Invertido
0 - Não Invertido
0 - Não Invertido
C1INV: Inversão da saída do comparador 1
1 - Invertido
0 - Não-Invertido
0 - Não-Invertido
CIS: Pino de entrada do comparador
O Registro CVRCON é usado quando a tensão de referência for interna ( CM2:CM0 = 110 ) usando o Módulo de Tensão de Referência do Comparador.
CVREN: Habilita Tensão de referência do comparador
1 - Habilitado
0 - Desabilitado
0 - Desabilitado
CVROE: Bit de saída do Comparador 1
1 - CVREF é conectado ao pino RA2
0 - CVREF é desconectado
0 - CVREF é desconectado
CVRR: Seleção da gama de tensão de Referência CVref
1 - gama baixa
0 - gama alta
0 - gama alta
CVR3:CVR0: Valor da tensão VREF(0 a 15)
Caso CM2:CM0 = 110:
Caso CM2:CM0 = 110:
1 - C1Vin - Pino RA3
C2Vin - Pino RA2
0 - C1Vin - Pino RA0
C2Vin - Pino RA1
C2Vin - Pino RA2
0 - C1Vin - Pino RA0
C2Vin - Pino RA1
EXEMPLO:
void interrupt() { PORTB.F0 = CMCON.C1OUT; PIR2.CMIF = 0; } void main() { INTCON.GIE; //habilita interrupção global INTCON.PEIE=1; //habilita interrupção periféricos PIE2.CMIE=1; //habilita interrupção do comparador CMCON=0b00000011; //modo 011(dois comparadores independentes com saída) TRISA=0b00001111; //pinos RA5/RA4 output; RA3/RA2/RA1/RA0 input TRISB=0; }
PIC16F887
O módulo de comparação do PIC16F887 posui as seguintes características:
- Controle de comparação Independente;
- Seleção de entrada programável;
- Saída do comparador está disponível internamente / externamente;
- Polaridade de saída programável;
- Interrupção por mudança;
- Wake-up de suspensão;
- Desligamento do PWM;
- Porta Timer1 (habilitação da contagem);
- Sincronização de saída para Timer1 entrada de clock;
- Latch SR;
- Referência de tensão programável e fixo.
COMPARADOR C1
C1ON: Habilita Comparador C1
1 - Habilitado
0 - Desabilitado
C1OUT: Bit de saída do Comparador 1
Caso C1POL = 0:
1 - C1Vin+ maior que C1Vin-
0 - C1Vin+ menor que C1Vin-
Caso C1POL = 1:
1 - C1Vin+ menor que C1Vin-
0 - C1Vin+ maior que C1Vin-
1 - C1Vin+ maior que C1Vin-
0 - C1Vin+ menor que C1Vin-
Caso C1POL = 1:
1 - C1Vin+ menor que C1Vin-
0 - C1Vin+ maior que C1Vin-
C1OE: Ativação da saída do Comparador C1
1 - Ativada
0 - Desativada
0 - Desativada
C1POL: Inversão da saída do Comparador C1
1 - Invertida
0 - Não-Invertida
0 - Não-Invertida
C1R: Seleção da referência do Comparador C1
1 - A entrada C1Vin+ é ligada a tensão de referência C1Vref
0 - A entrada C1Vin+ é ligado ao pino C1IN+
0 - A entrada C1Vin+ é ligado ao pino C1IN+
C1CH1:C1CH0: Seleção do pino de entrada para C1Vin- do comparador C1
00 - C1Vin- é ligado ao pino C12IN0-
01 - C1Vin- é ligado ao pino C12IN1-
10 - C1Vin- é ligado ao pino C12IN2-
11 - C1Vin- é ligado ao pino C12IN3-
01 - C1Vin- é ligado ao pino C12IN1-
10 - C1Vin- é ligado ao pino C12IN2-
11 - C1Vin- é ligado ao pino C12IN3-
COMPARADOR 2
C2ON: Habilita Comparador C2
1 - Habilitado
0 - Desabilitado
C2OUT: Bit de saída do Comparador C2
Caso C2POL = 0:
1 - C2Vin+ maior que C1Vin-
0 - C2Vin+ menor que C1Vin-
Caso C2POL = 1:
1 - C2Vin+ menor que C2Vin-
0 - C2Vin+ maior que C2Vin-
1 - C2Vin+ maior que C1Vin-
0 - C2Vin+ menor que C1Vin-
Caso C2POL = 1:
1 - C2Vin+ menor que C2Vin-
0 - C2Vin+ maior que C2Vin-
C2OE: Ativação da saída do Comparador C2
1 - Ativada
0 - Desativada
0 - Desativada
C2POL: Inversão da saída do Comparador C2
1 - Invertida
0 - Não-Invertida
0 - Não-Invertida
C2R: Seleção da referência do Comparador C2
1 - A entrada C2Vin+ é ligada a tensão de referência C2Vref
0 - A entrada C2Vin+ é ligado ao pino C2IN+
0 - A entrada C2Vin+ é ligado ao pino C2IN+
C2CH1:C2CH0: Seleção do pino de entrada para C2Vin- do comparador C2
00 - C2Vin- é ligado ao pino C12IN0-
01 - C2Vin- é ligado ao pino C12IN1-
10 - C2Vin- é ligado ao pino C12IN2-
11 - C2Vin- é ligado ao pino C12IN3-
01 - C2Vin- é ligado ao pino C12IN1-
10 - C2Vin- é ligado ao pino C12IN2-
11 - C2Vin- é ligado ao pino C12IN3-
OUTRO REGISTRO
MC1OUT: Cópia do bit C1OUT
MC2OUT: Cópia do bit C2OUT
C1RSEL: Seleção da referência do Comparador C1
1 - CVref é usado como referência para Comparador C1
0 - Tensão fixa de 0.6V é usado como referência para Comparador C1
C2RSEL: Seleção da referência do Comparador C2
1 - CVref é usado como referência para Comparador C2
0 - Tensão fixa de 0.6V é usado como referência para Comparador C2
T1GSS: Seleção da porta do temporizador TMR1
1 - A porta do gate de TMR1 é T1G
0 - A porta do gate de TMR é SYNC2OUT
C2SYNC: Sincronização da saída do Comparador C2
1 - A saída de C2 é sincronizada no flanco descendente do clock de TMR1
0 - A saída de C2 é assincrona
TENSÃO DE REFERÊNCIA
Módulo Fonte de Tensão de Referência
VREN: Ativação da tensão de referência de C1
1 - CVref ligado
0 - CVref desligado
VROE: Ativação da tensão de referência de C2
1 - CVref conectado ao pino RA2/AN2/VREF-/CVREF/C2IN+
0 - CVref desconectado do pino RA2/AN2/VREF-/CVREF/C2IN+
VRR: Seleção de Faixa
1 - gama alta
0 - gama baixa
VRSS: Seleção de Faixa de VRef do comparador
1 - CVRSRC = (VREF +) - (VREF-)
0 - CVRSRC = VDD - VSS
0 - CVRSRC = VDD - VSS
VR3:VR0: Seleção de valor para CVref (0 < VR < 15)
Caso VRR=1
CVREF = (VR(3:0)/24) * VDD
CVREF = (VR(3:0)/24) * VDD
Caso VRR=0
CVREF = VDD/4 + (VR(3:0)/32) * VDD
ola poderia mostra o codigo como e feito noccs pois ja tentei de todas as formas que imaginei
ResponderExcluirmais isso nao compila
tambem tento fazer no pic 16f68a
ResponderExcluirmas nao cosigo...se puder dar uma força agradeço
Olá!! Não estou acostumado a utilizar o CCS, mas acho q o código ficaria desse jeito:
ResponderExcluirvoid isr(){
//código
}
void main(){
setup_comparator(A0_A3_A1_A2);//dois comp. independentes(A0-A3 e A1-A2)
setup_vref(FALSE);//desliga tensao de referencia
enable_interrupts(INT_COMP);//ativa interrupcao do comparador
enable_interrupts(GLOBAL);//ativa interrupcao global
while(TRUE){
//codigo
}
}
Olá! você poderia dar uma dica de como obter o sinal de saída?
ResponderExcluirGrato
Francisco
Oi Tiago, bom dia
ResponderExcluirTenho o seguinte problema em um programa de leitura analógica com o PIC 16f877, estou tentando realizar a leitura simultânea de dois canais (RA01 e RA02), porém, quando chega a leitura para mim o valor do canal 01 oscila com a do canal 02, ou seja, ora lê o valor de um, ora lê o valor do outro no no mesmo label, nao estou conseguindo separar os valores em label distintos para leitura no c++ buider 6, pode me ajudar aonde estou errando?