Holaaa!!!aqui el programita que usaremos con la "mini-libreria" pcf8591 pero esta vez configurada como A/D, este programa es el tipico del voltimetro digital!:
////////////////////////////////////////////////////////////////////////////////////
// VsZeNeR"06
// 13/Marzo/06
//
vszener@gmail.com//
// Programa: Manejo del dispositivo PCF8591 en modo A/D
// Version: 0.0
//
// Dispositivo: PIC 16F648A Compilador: CCS vs3.242
// Entorno IDE: MPLAB IDE v7.31 Simulador: Proteus 6.7sp3
//
// Notas: Este programa muestra el voltaje de entrada por el AIN0 en formato simple
// de un potenciometro.
// La Vref es de 2,5v por lo tanto la resolucion del conversor es 10mV.
// Se configura el dispositivo con 4 entradas analogicas simples y no hay
// auotincremento. La lectura se realiza mediante el desbordamiento del timer0
// aproximadamente cada 65.5ms. Al ser la resolucion 2,5v, el voltaje maximo
// puede medir es de 2,5v. Mediante software se intenta mejorar la aproximacion
// de la señal obtenida, se multiplica por 0.009803 para mostrar el dato en su
// forma decimal y mejorar su resolucion, tener en cuenta que el dato leido
// por el pcf8591 es el voltaje de un potenciometro y su valor oscila entre
// 0-2.5v. Para su representacion en forma decimal debemos efectuar la operacion
// anteriormente mencionada ya que si no lo hicieramos se mostraria por pantalla
// un numero entero(para 2,5v se mostraria 255).
//
// Conexiones: A1 -> SDA pcf8591
// A0 -> SCL pcf8591
// B0 -> E LCD
// B1 -> RS LCD
// B2 -> RW LCD
// B4 -> D4 LCD
// B5 -> D5 LCD
// B6 -> D6 LCD
// B7 -> D7 LCD
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#fuses INTRC //oscilador interno
#use delay (clock=4000000) //Fosc=4Mhz
#define use_portb_lcd TRUE
#include <lcd.c> //libreria para lcd
#define PCF8591_SCL PIN_A0 //definicion de pines...
#define PCF8591_SDA PIN_A1 //...de manejo del pcf8591
#include <vs_pcf8591.c> //libreria pcf8591
///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion( )
{
int dato; //almacena lectura del pcf8591
float variable; //tratamiento de la informacion a representar
dato=read_adc_value( ); //lee del pcf8591
variable=(float)dato*0.009803; //se procesa la señal para su representacion
printf(lcd_putc,"fTension: %1.2f V",variable); //muestra por lcd
lcd_putc("
VsZeNeR"06" );
set_timer0(0 ); //carga TMR0
}
///PROGRAMA
void main(void)
{
setup_oscillator(OSC_4MHZ); //configuracion del oscilador interno a 4MHz
enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
lcd_init( ); //inicializamos lcd
set_timer0(0 ); //carga TMR0 -> temporizacion maxima aprox 65.5ms
enable_interrupts(GLOBAL); //activadas interrupciones
pcf8591_adc_init(0b00000000); //inicializamos pcf8591 en modo D/A con entradas
//entradas analog. simples
while(TRUE){ } //bucle infinito
}
Bueno ya podemos con nuestro pic usar los convertidores!!!hasta otra!!!
