sábado, 19 de novembro de 2011

Utilizando o Comparador Analógico do PIC18

Pessoal vamos aprender como utilizar o comparador analógico do PIC18F4XXX, junto com a aplicação para acionamento de uma carga.

Projeto:  Ligar e desligar uma lâmpada quando anoitecer e amanhecer automaticamente.

Descrição: O projeto  liga e desliga uma lâmpada automaticamente através de um sensor de luminosidade (LDR). Quando anoitece o sensor detecta a falta de luz solar e aciona a lâmpada, quando amanhece o sensor detecta a presença de luz solar e desliga a lâmpada.

Vantagem: Economizar energia de ambientes abertos, como garagens postes e até simulação de tráfego de pessoas dentro de uma casa.

Resumo de funcionamento de um comparador analógico.



Quando a tensão na porta não inversora é maior que a tensão na porta inversora a saída do comparador é a tensão +V, quando a tensão na porta inversora é maior que a tensão na porta não inversora a saída do comparador é a tensão -V.

Como a tensão do comparador interno do microcontrolador é a tensão de alimentação, sendo assim a tensão -V é igual a GND e a tensão +V é igual a VCC.




O microcontrolador que utilizaremos é o PIC18F4520, o comparador analógico ou "AMPOP" pode ser utilizado em diversas configurações, a configuração de trabalho neste microcontrolador é a comparador analógico.



Na figura acima podemos identificar dois comparadores, que exitem neste microcontrolador podendo formar diversas configurações de trabalho, a configuração que iremos utilizar é a de dois comparadores independentes.

Note que os pinos RA0,RA3 e RA1,RA2 formam as entradas, analisando o comparador 1 (C1) quando a tensão no pino RA3 for maior que a tensão no pino RA0 a saída será 5V, assim podemos acionar um driver para ligar uma lâmpada.

O circuito abaixo mostra a configuração de hardware para o projeto:




Código Fonte: O código fonte foi escrito na linguagem C, para o compilador C18 da microchip.
Segue o código.



/*********************************************************************
              PROJETO CORUJA ELETRÔNICA Hi-Z Vale

Autor: Rodrigo Mira
                e-mail: hizvale@hizvale.com.br
                www.hizvale.com.br

       Comparador Analógico
**********************************************************************/

#include <P18F4520.h> // biblioteca do PIC

#include <ancomp.h> // biblioteca do comparador analógico


        #pragma config OSC     = HS  
        #pragma config FCMEN    = OFF
        #pragma config IESO     = OFF
        #pragma config PWRT     = OFF
        #pragma config BORV     = 3
        #pragma config WDT      = OFF
        #pragma config WDTPS    = 32768
        #pragma config MCLRE    = ON
        #pragma config LPT1OSC  = OFF
        #pragma config PBADEN   = OFF
        #pragma config STVREN   = ON
        #pragma config LVP      = OFF
        #pragma config XINST    = OFF       // Extended Instruction Set
        #pragma config CP0      = OFF
        #pragma config CP1      = OFF
        #pragma config CPB      = OFF
        #pragma config WRT0     = OFF
        #pragma config WRT1     = OFF
        #pragma config WRTB     = ON       // Boot Block Write Protection
        #pragma config WRTC     = OFF
        #pragma config EBTR0    = OFF
        #pragma config EBTR1    = OFF


void main (void)
{
 
   ADCON1 = 0x0F; // desliga conversosr A/D
   TRISD = 0x00;       // configura PORTD como saída
   TRISA = 0xFF;      // configura os PORTA como entrada  

/**************************************************************
  Configuração do Comparador
 A função abaixo configura o comparador analógico
 com as saída 1 e 2 invertidas, 2 comparadores independentes
 e interrupção desabilitada.

 Open_ancomp(COMP_1_2_OP_INV&
            COMP_1_2_INDP&
            COMP_INT_DIS );
         
 Para maiores informações abra o arquivo PIC18 Peripheral Libraries
 no caminho C:/MCC18/doc/periph-lib/ANCOMP.htm          
 **************************************************************/
Open_ancomp(COMP_OP_INV_NONE&
            COMP_1_2_INDP&
            COMP_INT_DIS);

for(;;){

if(CMCONbits.C1OUT == 1){ // testa o bit que sinaliza a saida do comparador 1

PORTDbits.RD0 = 1;
       
}
else PORTDbits.RD0 = 0;


}
}

Utilize o kit Easy 18F da Hi-Z Vale para esta aplicação!



Nenhum comentário:

Postar um comentário