Saludos
compañeros estoy realizando un prototipo para mi tesis de grado referido a un sistema de control de medicion de corriente en las viviendas en bajo consumo de 110v monofasico, con un sensor de corriente bajo de efecto hall que es capaz de soprtar 2.1kvrms en sus entradas y su respuesta es proporcional al consumo de corriente con una salida de (0 - 5)dc es el ACS712 viene en variadas presentaciones de 5amp, 20 amp, 30 amp etc. esta salida la voy a convertir A/D a traves del PIC18f4550 entonces internamente debo multiplicar 110v * 5amp max que me va a permitir como maximo una potencia de 500w(analogico) logicamente debo buscar a traves de la conversion cual seria este valor en digitalya que a hacer mi referencia porque al alcanzar dicho valor el va desactivar una salida que me corta la corriente en la vivienda a traves de un opto-acoplador que desinhibe a un tiristor (circuito de potencia).
anexo lo que llevo en la programacion ya que tengo error al momento de utilizar an3/+vref no me lo acepta el compilador CCS, este circuito lo tengo en proteus 7.6 ya montado pero me faltan algunos detalles si alguien puede intercambiar informacion o que me quiera ayudar se lo agradesco.
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,XT,NOMCLR,
#device adc=10
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use delay(clock=4000000)
#INCLUDE "lcd_c.c"
FLOAT VALOR;
FLOAT X;
VOID MAIN(VOID)
{
SET_TRIS_A(0XFF); // Puerto A como entrada
SET_TRIS_B(0X00); // Puerto B como salida
OUTPUT_A(0X00); // Limpio el puerto A
SETUP_PORT_A(AN0_ANALOG_AN3_REF); // UTILIZA CONV AN0 Y COLOCO AN3 COMO REFERENCIA (ERROR)
SETUP_ADC(ADC_CLOCK_INTERNAL);
lcd_init(); // Inicializa la rutina lcd
while(true)
{
set_adc_channel(0); // Especifica el canal de lectura
delay_us(10); // retardo de 10 us
valor=read_adc(); // Valor lee lo que esta en el canal seleccionado
X=(valor*5)/1023; // Multiplica valor por 5v / 1024 conversor de 10 bits
delay_ms(500); // retardo de 500 ms
printf(lcd_putc,"\f"); // indica que envia un valor float
printf(lcd_putc," P=%2.3g volt",X); // Indica que envia X 2 enteros, 3 decimales volt
delay_ms(1000); // retardo de 1000 seg
}
}