Hola a todos!
Probando las entradas analógicas del PIC16f887 me salió una duda, que quizá es muy facil resolverla, pero.. ¡la verdad que no me puedo dar cuenta!
La programación es en C con el PIC C. La idea es simple, usar la entrada analógica y que se muestre en una pantalla lcd el valor de 8 bits leido y el voltaje calculado (que acá creo que esta el problema) con la formula. voltaje= 5 * valor/2^8 = 5 * valor/256 ;
Lo que quiero es que el voltaje mostrado en pantalla sea como el de un voltimetro con 3 decimales. A voltaje lo definí como flotante, pero igual asi no me da ninguna decimal en el lcd.
Quiero saber donde esta error.Si es que definí mal las variables o lo que sea.
Add programa:
#include <16F887.h>
#FUSES NOWDT
#FUSES NOBROWNOUT
#FUSES NOLVP
#fuses NOMCLR,INTRC
#use delay(internal=4MHz)
// CAMBIE LOS PINES QUE SIEMPRE USABA EN EL PUERTO B
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D1
#define LCD_E PIN_D0
#include <lcdazul.c>
void main()
{
long valor;
float voltaje;
setup_comparator(NC_NC_NC_NC);
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0);
delay_ms(20);
lcd_init();
lcd_putc("\f ");
while(TRUE)
{
valor=read_adc();
delay_ms(20);
voltaje= 5 * valor/256 ;
printf(lcd_putc,"\f Volt:%0.3f \n Valor:%Lu", voltaje,valor);
output_b(0b00000000);
if(voltaje>=0 && voltaje<1)
{
Output_High (PIN_B0);
}
if(voltaje>=1 && voltaje<2)
{
Output_High (PIN_B1);
}
if(voltaje>=2 && voltaje<3)
{
Output_High (PIN_B2);
}
if(voltaje>=3 && voltaje<=4)
{
Output_High (PIN_B3);
}
if(voltaje>4)
{
output_d(0b00001111);
}
}
}
Tambien quería saber como puedo configurar el conversor ad a 10 bits, ya que programandolo como #device adc= valor (8 o 10) me sale error.
Espero su ayuda, gracias!