Sensor de Corriente con pic16f887
Sensor de Corriente con pic16f887 simulado en proteus
Objetivos:
Mostrar en una LCD la corriente usando un sensor corriente mcp
Diagrama de proteus

Código en Pic C
#include <16F887.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include «lcd.c»
void main()
{
int16 corrientedi; // variable donde guardo la lectura digital
float32 corriente; // varibale que voy escribir en el lcd
setup_adc_ports(sAN0|VSS_VDD); // seleccionamos rA0 con entrada analogica
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); //Seleccionar Canal 0 para sensor de Temperatura
lcd_init(); // Activa lcd
//
while(true){
corrientedi=read_adc(); //Leer ADC
corriente=(75.75*corrientedi/1024)-37.87 ; //Escalizar señal de salida temperatura 625
lcd_gotoxy(1,1); // cursor en columna 1 renglon 2
printf(lcd_putc,»Analog %2.1f A»,corriente);
lcd_gotoxy(1,2); // cursor en columna 1 renglon 2
printf(lcd_putc,»Digital %Lu»,corrientedi);
printf(«%2.1f n»,corriente);
delay_ms(100); //Periodo de actualizacion lectura
}
}
