Voltímetro con el ADC del PIC

Estado
Cerrado para nuevas respuestas.
ahora me pasaron este código pero no me funciona si me pueden dar una mano, gracias
 

Adjuntos

  • Nueva carpeta.rar
    15.2 KB · Visitas: 42
Mira este sencillo programa que puede leer hasta 60V usando el PIC16F676 (Sólo dos dígitos y un 74LS47)
Es que con ese PIC es algo complicado usar más dígitos porque cuenta con pocos pines.
Si usaras otro PIC como el PIC16F88 sería más fácil agregar más dígitos.

El código que adjunto es muy sencillo y fácil de entender, lo comenté para que entiendas lo que hace.
Tal vez te sirva o al menos te dará una idea de como hacerlo con displays de 7 segmentos.

Nota:
Los programas que has subido contienen varios errores y el código se me hace muy extenso para el fin que se le va a dar.
 

Adjuntos

  • 16F676 Voltímetro.rar
    25.4 KB · Visitas: 95
Última edición:
ok gracias voy a intentar hacerlo, estoy tratando de aprender y quiero ver distintas opciones , saludos



te consulto ya que no me encienden los display que puede ser estoy usando tu código y ejemplo
 
Última edición:
Como decías, este pic es muy chico. Lo voy intentar hacer con el 16F883 con tres display de 7 segmentos.
Voy a empezar el código basado al que me pasaste y lo subo. Saludos.

---------- Actualizado ----------

Consulta: ¿Cómo puedo acomodar este código para tener un voltímetro con este pic y los display de 7 segmentos?
Ya intenté de todas formas y no me anda.
 

Adjuntos

  • voltimetro display 7 segmentos.rar
    7.5 KB · Visitas: 59
  • Voltímetro.rar
    748 bytes · Visitas: 66
Última edición por un moderador:
Consulta: ¿Cómo puedo acomodar este código para tener un voltímetro con este pic y los display de 7 segmentos?
Ya intenté de todas formas y no me anda.
Ya que cambiaste de PIC por uno con más pines, ahora es más sencillo aumentar los dígitos.
Entonces mira ahora este otro ejemplo con 3 displays de 7 segmentos de cátodo común.
Obviamente la lectura ahora puede llegar hasta 999 pero la dejé en 350 para no arriesgarse tanto.
De todas formas, manejar 350V ya es peligroso y ten en cuenta que este ejemplo es tan solo didáctico.

Ahora se controlan los displays directamente y ya no se hace uso del decodificador 74LS47.
 

Adjuntos

  • 16F883 Voltímetro 7 segmentos.rar
    27.9 KB · Visitas: 96
Última edición:
voy a ver si le puedo adaptar un display de estos pero no encuentro la hoja de datos , dicen que son igual al display de 7 segmentos
 

Adjuntos

  • 1507121_880185318698585_3758976984595922565_n.jpg
    1507121_880185318698585_3758976984595922565_n.jpg
    23 KB · Visitas: 31
  • 10426108_880185275365256_8821362097466393620_n.jpg
    10426108_880185275365256_8821362097466393620_n.jpg
    22.2 KB · Visitas: 29
voy a ver si le puedo adaptar un display de estos pero no encuentro la hoja de datos. Dicen que son igual al display de 7 segmentos
Sin la hoja de datos va a ser algo complicado averiguar cómo funciona esa pantalla.

Por otro lado, la idea era hacerlo con displays LED de 7 segmentos.
De usar un display LCD, pues mejor usar uno estándar 16x2 y hasta el código es más sencillo.
Aparte, con LCD no se verá tan bonito como con displays LED de 7 segmentos.

En fin, si lo piensas hacer con esa pantalla, ya tienes tarea para rato. :LOL:

Suerte.
 
Última edición:
// Fórmulas de conversión.
voltaje = valor_adc;
voltaje *=400 ; // Voltaje requerido
voltaje /= 1023; // División entre los bits del conversor


modificando y poniendo el punto puedo modificar el voltaje ?
cambiando el divisor resistivo , ahí lo puse para 40 volt con un divisor de 100 k y 10 k estaría bien asi??
 
// Fórmulas de conversión.
voltaje = valor_adc;
voltaje *=400 ; // Voltaje requerido
voltaje /= 1023; // División entre los bits del conversor
¿Modificando y poniendo el punto puedo modificar el voltaje?
Si quieres medir 40 voltios, entonces puedes usar el ejemplo anterior.
Y si es para el ejemplo reciente, puedes usar esta fórmula:
voltaje = (valor_adc * 40 / 1023);
Ya se puede hacer así porque ya no existirá desborde y también puedes cambiar la variable "voltaje" a int16.
Pero te sobrará un dígito y deberás acortar el programa y modificar el diseño para eliminarlo.
Cambiando el divisor resistivo, ahí lo puse para 40 voltios con un divisor de 100 k y 10 k. ¿Estaría bien así?
No. Debes calcular el divisor de tensión para que en su punto medio entregue 5V máximo con 40V de entrada.
Por ejemplo: Cambia R1 por una resistencia de 68K, R2 por 8.2K y RV2 por 3.3K
RV2 lo debes ajustar para obtener una tensión de salida lo más próxima a 5.0 voltios y sin que exceda este valor.
También para eso está el diodo Zener que evita que la tensión supere los 5.1V y así proteger al PIC.

PD: Yo veo 400 :eek:

Busca sobre divisores de tensión para que lo entiendas.
 
Última edición:
No es dividido 1023, es 1024 que es la cantidad de niveles.

No confundir con el nivel máximo que si es 1023, pensá que no estás incluyendo el nivel 0.
 
Lo importante es el nivel de cuantificación, no el nivel máximo.

Fijate, esta fórmula la saqué de la hoja de datos de un atmega8 (obviamente es universal):

xldFnTT.png


Si despejás, obtenés que:

[LATEX]V_{in}=\frac{V_{Ref}.Lectura_{ADC}}{1024}[/LATEX]

Entonces si usamos una tensión de referencia de 5V, la máxima lectura que podremos hacer será:

[LATEX]V_{in}=\frac{5v.1023}{1024} \approx 4,99v[/LATEX]

Y la resolución será:

[LATEX]V_{RES}=\frac{V_{Ref}}{1024}= \frac{5v}{1024} \approx 4,88mV[/LATEX]
 
Última edición:
Lo importante es el nivel de cuantificación, no el nivel máximo.
Comprendo, pero al utilizar la fórmula expuesta con el divisor 1023, se obtiene el valor deseado.
Sé que al usar la división por 1023 se obtiene un rango incompleto, pero no altera el resultado esperado. ADC_2.gif ADC_3.gif
Ahora, me gustaría saber una cosa:
¿Utilizando el factor 1024, qué fórmula se debe usar para mostrar el valor correcto, supongamos VCC = 20V y que el resultado no muestre 1 voltio menos?
 
Comprendo, pero al utilizar la fórmula expuesta con el divisor 1023, se obtiene el valor deseado.

Se obtiene el valor "deseado" mintiendo un poco la escala. :D

El ADC es capaz de medir hasta (2^(N)-1)*Vres, siempre el último escalón se le escapa.

Sé que al usar la división por 1023 se obtiene un rango incompleto, pero no altera el resultado esperado.

En realidad lo alterás un poco modificando la resolución.

Pero por ej. si pretendés calcular el error de cuantización y agregarle tooodos los errores que tenés en la medición, haciendo eso, estás aumentando el error de cuantización y por ende vas a obtener un equipo que mide peor.

Ahora, me gustaría saber una cosa:
¿Utilizando el factor 1024, qué fórmula se debe usar para mostrar el valor correcto, supongamos VCC = 20V y que el resultado no muestre 1 voltio menos?

No, si por ej. tomamos a 20V como referencia mediante un divisor de tensión a por ej. 5v, la resolución será la siguiente:

[LATEX]V_{RES}=\frac{Att_{divisor}.V_{ref}}{1024}=\frac{4.5v}{1024} \approx 19,53 mV[/LATEX]

Entonces:

[LATEX]V_{in-max}=V_{RES}.V_{Lectura-max}\approx 19,53 mV.1023 = 19,97 V[/LATEX]

En realidad sin redondear dá 19,98...V, es decir justo el valor de la tensión de resolución, como modificaste un poco la escala, esa diferencia de tensión la tapás.
 
Última edición:
OK. También comprendo ese planteamiento, pero lo que se pretende es obtener el valor exacto.
Es decir; si hay 20.0 V a medir, yo quiero obtener esa lectura, o sea, los mismos 20.0V
Entonces, si el ADC a 10 bits me entrega 1023 como máximo:
20 * 1023 = 20460
20460 / 1024 = 19.98046875
Pero: 20460 / 1023 = 20
Y ese error de 0.01953125 al usar 1024 como divisor, es lo que no me agrada. :rolleyes:
 
La diferencia entre 20/1024 V y 20/1023 V es de 19 millonésimas de V, lo cual es asumible para la mayor parte de aplicaciones.

Entonces, si quieres que te dé 20 V al recibir un valor de 1023, debes partir de un valor de nivel de 20/1023 V.
 
Última edición por un moderador:
Lo que debe quedar claro es que no vas a obtener el valor real en toda la escala y si vas a poder informar sobre esa tension final.

Y empeorás un poco la calidad de la medición aumentando el error de cuantización en una cuenta.

Por ej es como los multímetros y su fondo de escala, los que tienen por decir algo... 2000 cuentas, solo son capaces de medir hasta 1999 antes de pasar a otra escala, es decir a fondo de escala te informa por ej. 1,999 v.

Una cosa que se me pasó, está mal decir que "esta es la medición correcta" (o real como puse antes) como si fuera la definitiva, en realidad se debería hablar de "la medición más probable".
 
Última edición:
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba