TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: underwol2 en 24 de Enero de 2011, 20:48:56
-
mi tema se basa en la conversión análogo digital baje un código de un voltímetro de Internet escrito en pcw estoy envolatado en la parte de como hace la conversión desde que recibe la lectura hasta que la muestra por pantalla
la conversión que llo se es la siguiente es para temperatura
resolución de bit
5 / 1023 = 0.0048875
= 0.0048875 * 100= 0.48875
resolucion 0.48875
entrada por el puerto analógico y lectura que tomara
0.25 (equivale a 25grados)
0.25 *1024 = 256
=256 / 5v = 51.2
=51.2 (redondeo a 52)
52 * 0.48875 = 25
=25 (25 grados mostrados por pantalla )
de esta manera saco la conversión interna del pic hasta que la muestra por pantalla
en el siguiente código no logro encontrar como hace la conversión hasta que la muestra por pantalla
es el siguiente del voltímetro
#include <18F4550.h>
#device ADC = 10
#include <math.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=20000000)
#include <lcd.c>
#include <stdlib.h>
Float V;
Void Lectura() {
set_adc_channel(0);
delay_us(25);
V=read_adc(); //Lectura del conversor
Delay_us(50);
V=V*100/1023;
lcd_gotoxy(1,1);
printf(lcd_putc,"V:%02.1f",V);
}
Void main() {
lcd_init(); //inicializacion de la LCD
setup_adc(ADC_CLOCK_DIV_8);
setup_adc_ports(AN0); //Configuracion del conversor A/D
lcd_gotoxy(4,1);
printf(lcd_putc,"Voltimetro");
lcd_gotoxy(5,0);
printf(lcd_putc,"Digital");
delay_ms(3000);
lcd_send_byte(0,1); // Borrar pantalla LCD
while (true) {
Lectura ();
}
}
gracias por la colaboracion
-
mira esta linea...#device ADC = 10
esta le indica al pic que la entrada sea AD pero con una resolucion de 10bits...
valor maximo 1023
de ahi....
V=V*100/1023;
V es un valor float... imagina que el votaje de entrada por el pin AD son 2.5V
V= 512*100/1023 osea que te da 50V
en la entrada debe de haber un divisor de tension seguro.... si no el valor no seria correcto en ese voltimetro y deberias de cambiar la formula
-
el circuito que an elaborado si tiene un divisor de tencion
voltje del potenciometro 0.95
0.95
del divisor de tencion da
0.04
y muestra por pantalla
v:0.93
a este proceso merrefiero en cuanto la conversion
tu ejemplo es
V= 512*100/1023 osea que te da 50V
v=512
si ago la misma formula
v=0.04*100/1023 =0.0039 como ves poraqui me pierdo
osea 0.0039 seria lo que mostraria por pantalla
y lo que la pantalla de la imajen muestra
v:0.93
los resultados no me considen
gracias por la respuesta
-
la entrada digital va linealmente el máximo valor a 10 bits corresponde,en este programa, a un voltaje de entrada igual a vcc osea que para e valor máximo en la entrada deberías de tener 5v y para el valor mínimo 0v así para saber cuanto da el valor de entrada es fácil una regla de 3
Valor digital =voltaje entrada * 1024 / Vcc
-
lo saque de otra forma
voltios que regulo con el potenciomtro que simula el voltage amedir
1.82 (voltios a medir)
0.09 (voltios del divisor de tencion)
convercion
0.09*1024/5*100=1.84v
1.84v(este sera el voltage que me mostrara por pantalla)
tengo al guna variaciones en el calculo pero son menores tendria que correjirlas pa hacerlo mas exacto
gracias por las respuestas