No tengo CCS como para probarlo, y mucho menos algun simulador.
Te diria que pruebes lo siguiente para determinar donde esta el error.
En ves de guardarlo en un float, guardalo en un entero, los valores que vas a tener van de 0 al 5.
Asi sin tocar la parte de la formula, y cambiando la muestra:
int8 v;
v=(5.0*(float)q)/1024.0; // leemos el voltage del ADC.
printf(lcd_putc
, "\fADC: %4ld", q
); printf(lcd_putc
, "\nV: %u V", v
);
Si esta bien la formula de arriba te va a dar entre 0 y 4, correctamente con 512, te deberia dar 2.
Si lo muestra correctamente al 2, entonces iria pensando que es tema del printf. Y si es tema del prinf, espero que sea el formato que le diste, sino usa %f, y proba.
Si no es asi entonces sera la formula. algun problema de casteo de que los trnasforma a enteros etc.. Si es la formula podes probar con otros:
v=((float)(5.0*q))/1024.0;
v=(float)(5.0*q)/1024.0;
v=(float)q*0.004882812;
v=(float)(q*0.004882812);