segunda-feira, 4 de março de 2013

usando os comparadores internos do pic

Neste exemplo vou demontrar como configurar os comparadores internos para reconhecer 2 valores de tensão, veja que em uma das saidas(RB4) é preciso colocar um resitor de pull-up:



O código fonte:

/*
 *                               usando o modo comparador de tensão no MPlab XC8
 *
 * Compilador : MPlabXC8
 * Microcontrolador: 16F628A
 * Autor: aguivone
 * Versão: 1
 * Data :  01 de março de 2013
 * compara 2 valores de tensão.
 *
 */
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 20000000    // cristal de 20 Mhz
#include <xc.h>

#define delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))


/////////////////////////////////////////////////////////configuraçôes//////////////////////////////////////////////////


#define led RB0

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

//////////////////////////////////////////////funçoes auxiliares////////////////////////////////////////////////////////

void inicializa_comparador(int modo)
{
    /*
     * 0  ligado mas com saidas desligadas
     * 1  3 entradas,sendo uma selecionavel o pino(entrada não inversora comum )
     * 2  2 entradas,sendo duas entradas ligadas a referencia de tensão interna(entrada não inversora comum)
     * 3  3 entradas(entrada não inversora comum )
     * 4  2 comparadores independentes
     * 5  habilita apenas 1 comparador (C2)
     * 6  3 entradas(entrada não inversora comum ) e saidas independentes
     * 7  os dois comparadores desligados
     */
    CMCON  = modo;//saidas não invertidas
    VRCON = 0;//por garantia desliga-se o modulo de referencia de tensão
}

//////////////////////////////////////////////////////Rotina principal///////////////////////////////////////////////////////////////

void main(void) {
    TRISA = 0X07;
    PORTA = 0;  // limpar as portas que estão configuradas como saidas
    TRISB = 0X00;
    PORTB = 0;  // limpar as portas que estão configuradas como saidas
    inicializa_comparador(6);//lembre se que deve ser colocado um resistor de pull up no pino ra4,pois ele é dreno aberto 
    led = 0;//desliga led
    for(;;)
    {
                                led = 1;
                                delay_ms(100);
                                led = 0;
                                delay_ms(100);

    }//loop infinito

}

Nenhum comentário :

Postar um comentário

olá,digite aqui seu comentário!