Hola!!! tengo problemas con la lectura de voltaje en adc del micro, la lectura varia demasiado sin variar la entrada
, esto solo se da en el hardware por que en la simulacion todo anda excelente!!!
Mi pregunta es ¿Que estoy haciendo mal?
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