Hola!!! tengo problemas con la lectura de voltaje en adc del micro, la lectura varia demasiado sin variar la entrada
![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
, esto solo se da en el hardware por que en la simulacion todo anda excelente!!!
Mi pregunta es ¿Que estoy haciendo mal?
![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
les dejo el programa que hice para ver que error encuentran.
de antemano gracias!!!
// =============== Programa ==============
#include <16F688.h> // busca en el directorio include del compilador
// ========================= CONFIGURACION DEL PIC (BK0) =======================
#device ADC=10 //conversor A/D 8 ó 10 bits (no mover de este sitio)
#FUSES INTRC_IO, NOPROTECT, NOBROWNOUT, MCLR, NOCPD, PUT, NOWDT
#use delay(clock=4M)
// ======= DECLARACION DE PUERTOS Y REGISTROS ESPECIALES DEL PIC (BK5) ========
#BYTE pta = 0x5 // dirección en RAM
#BYTE ptc = 0x7 // dirección en RAM
#BYTE trisa = 0x85 // dirección en RAM
#BYTE trisc = 0x87 // dirección en RAM
#BYTE cmcon0 = 0x19 // dirección en RAM
#BYTE option = 0x81 // dirección en RAM
#BYTE intcon = 0x0B // dirección en RAM
#BYTE pir1 = 0x0C // dirección en RAM
//===== DECLARACION GLOBAL DE VARIABLES, VECTORES Y MATRICES EN RAM (BK3) ======
float Out_Current, power, adc, vol;
//int1 cont=0;
// ========================= DEFINICION DE CONSTANTES (BK4) ====================
// ================= DEFINICION DE BANDERAS (BK4) EN RAM (BK4) =================
// ================ NOMINACION DE PINES DEL HARDWARE (BK2) ==============
#BIT led_state = pta.0 // Led de estado del micro
#BIT sw_selector = pta.1 // Selecciona la frecuencia de salida del sistema
#BIT pin1 = pta.4 // Indicador de corto, envia un 1 cuando no hay corto
#BIT pin2 = pta.5
// ================= INCLUSION DE LIBRERIAS EXTRAS .c =========================
#include <libreria_lcd.c> //lcd 2x16 en pines personalizados
// ========= INICIO FUNCION PRINCIPAL MAIN (BK5 A BK7) ============
void main()
{
init_lcd(); // inicializacion de LCD
// =============== Configurando puertos ====================
output_low(pin_a0); // pta0 como salida e inicializa en 0
output_float(pin_a1); // pta1 como entrada
output_low(pin_a4); // pta4 como salida e inicializa en 0
output_high(pin_a5); // pta5 como salida e inicializa en 0
// ------------ configuracion CAD -------------------
setup_adc(ADC_CLOCK_INTERNAL); //enables the a/d module
setup_adc_ports(sAN2); //sets AN2 the adc pins to analog
enable_interrupts(INT_AD);
if (sw_selector)
{
pin2=1; // Frecuencia de 60Hz seleccionada
lcd_gotoxy(1,1); //salto a columna 5, fila 2
printf(lcd_putc," ELECTRIC_POWER");
lcd_gotoxy(2,2); //salto a columna 5, fila 2
printf(lcd_putc," F_SELEC=60Hz");
delay_ms(500);
}
else
{
pin2=0; // Frecuencia de 50Hz seleccionada
lcd_gotoxy(1,1); //salto a columna 5, fila 2
printf(lcd_putc," ELECTRIC_POWER");
lcd_gotoxy(2,2); //salto a columna 5, fila 2
printf(lcd_putc," F_SELEC= 50Hz");
delay_ms(500);
}
blink_lcd(3);
clear_lcd();*/
// ======================= MAIN PROG (BK7) ====================================
do{
// === Configuracion ADC =====
set_adc_channel(2); //the next read_adc call will read channel 0
delay_us(10); //a small delay is required after setting the channel and before read
adc=read_adc(); //starts the conversion and reads the result and store it in value
vol=adc*0.00489;//82812;
Out_Current=(15*vol)-75/2-0.48;
power=Out_Current*120-0.22;
if (Out_Current<=5)
{
pin1=1;
lcd_gotoxy(1,1);
printf(lcd_putc,"L_Current:%fA\r",Out_Current);
lcd_gotoxy(1,2);
printf(lcd_putc,"L_Power:%fW\r",power);
delay_ms(1000);
}
else
{
pin1=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"POTENCIA EXEDIDA");
lcd_gotoxy(1,2) ;
printf(lcd_putc,"L_Power:%fW\r",power);
}
led_state=!led_state;
}while (TRUE);
} //Fin Del Programa!!!
A otra cosita, lo de la lcd es una funcion que hice y funciona 100%, no he tenido errores en ella