Conversor A/D

Hi Hjmhardsoft, nombre muy raro, esta es la primera vez que te escribo y espero una ayuda pronta y positiva, bueno al grano, estoy trabajando con el conversor A/D del PIC16F877, lo que necesito realizar es la conversión de un potenciómetro que esta conectado
de +5V en un extremo y a tierra en el otro y la variación de Voltaje la toma el canal 0 del PIC, bueno esta parte esta bien pero lo que realmente necesito hacer es visualizar el
valor de voltaje que captura el PIC en un display de 7 segmentos, es decir
si en la entrada hay 2,5V entonces en el display visualice 2,5
pero no se como hacerlo he intentado pero sale garabatos, ¿No sé?
Te agradezco cualquier explicación y/o aclaración.
Stravos
[email protected]

1 Respuesta

Respuesta
1
Lo que estás necesitando para efectuar esa conversión radiométrica entre 0 y 5 volts es un par de algoritmos que están en varias de las notas de aplicación de microchip (Embedeed Databook).
En particular hay un ejemplo de un voltímetro digital como el que mencionas que te resuelve el tema de programación.
Vos con el conversor lees un valor entre 0 y 255 que corresponde a 0 y 5 V respectivamente, suponiendo que uses esas referencias de tensión.
Ese valor lo tendrás que ingresar a una palabra de 16 bits, multiplicarla por un factor de escala (algoritmo 1 que necesitas) y luego convertirla de binario 16 bits a bcd (algoritmo 2). En bcd, lo que haces es descomponer los bytes de la palabra en nibbles (grupos de 4 bits), que representan un dígito bcd de 0 a 9.
El dígito 0 a 9 luego debes convertirlo de bcd a 7 segmentos mediante una tabla (o sea traducir de 4 bits a 7 bits visualizables) y este es el 3er algoritmo que necesitas, pero es una simple consulta a tabla.
Ejemplo:
El registro del adc lee 255 que corresponde a 5,0 volts y debería mostrarse 5.0.
si calculas V=L*100/51 donde L es el byte leido y V es un valor de 16bits tenes.
V=255*100/51=500, el 500 es el numero que tienes que mostrar multiplicado por 100, pero no importa porque lo importante es trabajar con enteros que maneja el micro y luego encender el punto donde corresponde.
Entonces V=500 y con la rutina que convierte un numero de 16 bits a BCD vas a obtener
nibble1=5
nibble2=0
nibble3=0
luego convertis cada nibble a binario 7 segmentos y tenes
digito1=101011100
digito2=001111111
digito3=001111111
Te doy un ejemplo así nomas, no digo que sean esas las traducciones a bcd, pero deberían representar el 5, el 0 y otro 0 más.
Para mostrar 5.00
O sea, creo que te lo he explicado, ahora queda que busques en www.microchip.com una nota de aplicación que use conversores para voltimetros de 3 dígitos y ya tienes el código listo probado y explicado (en ingles) que no hace ni más ni menos que lo que te explique, aunque hay varias alternativas a la hora de visualizar, multiplexado etc etc, pero esto es lo básico.
Digo llevarlo a 16 bits eligiendo un múltiplo de 8 bits que se trabaje con facilidad en el micro y que permita almacenar el valor producto de la escala (luego de multiplicarlo), ya que si lees 255 correspondiente a 5 volts y lo quieres multiplicar por 100 te da 25500 y esto cabe bien en 16bits, y para el ejemplo es el valor más grande que necesitas, si quisieras mostrar 3 decimales tendrías que multiplicar por 1000 y 255000 te requiere de al menos 18 bits (numero mínimo de bits=log(255000)/log(2)+1)
O sea un registro lo suficientemente grande como para guardar el mayor valor a trabajar, así de simple, así de necesario.
Para trabajar con 0 a 8 volts, tendrías que acondicionar la señal con por ejemplo un divisor resistivo y un amplificador operacional con baja deriva y bajo offset. Lo mismo para medir tensiones negativas, deberias sumarle 3 volts y escalarlo 5/6 o sea para -3volts (3+3)*5/6=0 y para 3volts (3+3)*5/6=5votls que ingresarian al conversor.
O sea es cuestión de jugar con el offset (lo que sumas o restas) y el factor de escala para adecuarlo a 0-5 volts o un rango como para convertirlo.
Bueno.
Hi Hjmhardsoft, muy interesante tu explicación tengo algunas dudas debido a tu repuesta,
primero: ¿El valor de la conversión llevarlo a una palabra de 16 bits?, tengo
entendido que el PIC16F877 tiene un conversor A/D de 10 Bits, pero lo puedo trabajar
a 8 Bits, entonces porque 16 Bits y ahí si me confundí, por el resto lo entendí, la
decodificación a BCD, la Visualización 7 Segmentos esa parte bien pero quisiera que
me despejaras la duda de los 16Bits. Por otra parte si quisiera subir el voltaje de
entrada por decirlo de 0V a 8V, o incluso de -3V a 3V, ¿Aquí cómo se haría? ¿De la
misma manera u otra? Espero no ser "pesado" pero esta vaina me "mama gallo" y no
tengo mucha experiencia con los PIC. De todas maneras gracias por la explicación
Espero tu respuesta.
Stravos
[email protected]
Gracias por la info y la aclaración, tienes bastante experiencia, quisiera que enviaras una dirección de E-mail, si se presenta problemas
Por el portal.
Te lo agradezco.
Stravos
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas