Autor Tema: Mostrar el resultado de la lectura de un adc a un valor ente 0-5v  (Leído 168 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pedriviris

  • PIC10
  • *
  • Mensajes: 1
Hola, soy nuevo en el foro y en la programación de pics, estoy haciendo una simulación de comunicación spi entre dos pics con el virtual terminal de proteus, el pic slave mide el valor de un voltaje que se cambia mediante un potenciómetro y en la terminal me muestra el resultado en hexadecimal, es decir, la medida es 2.5v y muestra 7F si es 5v muestra FF. Mi pregunta es como hago para que ese valor me lo muestre como el voltaje que quiero?

Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 300
Re:Mostrar el resultado de la lectura de un adc a un valor ente 0-5v
« Respuesta #1 en: 13 de Enero de 2020, 09:47:30 »
Primero hay que ver en qué modo está configurado el ADC, si es 8 bits, su resolución es de 0 a 255. ( 0 para 0 voltios (vss) y 255 para 5v (vdd) )  Siempre que no uses vref+ y/o vref- específicos..

  Si el adc está en modo 10 bits, variará de 0 para 0 voltios (vss),  a 1023 para 5 voltios (vdd).

  La forma de hacerlo es: 
- Aplicas el voltaje a medir al terminal ADC correspondiente.
- Tomas la lectura y aplicas regla de tres:

(Si es para 8 bits)  int8 resultado = (5 * adc) / 256;   // Sustituye "adc" por tu funcion de lectura del adc, si es CCS sería "read_adc()"
( Si es para 10 bits) int8 resultado = (5 * adc) / 1024;   // como solo quieres interpretar de 0 a 5 entero (sin decimales) te sigue valiendo una variable de tipo entero de 8 bits para almacenar el resultado de esta operación aunque lleve cifras por encima de 255.

Con lo anterior puedes conseguir mas precisión, por ejemplo, en vez de 0 a 5v podrías representar desde 0,0 hasta 5,0 voltios.  (Un decimal), para ello, en vez de poner (5 * adc) / 256; pones (50 * adc) / 256; tanto para 8 como para 10 bits, de esa forma, por ejemplo, para un valor adc = 700 eso sería (50 * 700) / 1024 = 34.   Y eso serían 3,4 voltios. no 34 voltios.

- Envías el resultado a la terminal

  Te va a seguir apareciendo un valor en hexadecimal (Supongo que la terminal se puede configurar para que te lo dé en decimal), pero si lo conviertes a decimal verás que es un valor de 0 a 5 correspondiente al voltaje aplicado al adc.

  Ya luego el pic master será el que sepa que 34 no es 34 sino 3,4.

  Si quieres aun mas precisión ya se complica, hay que trabajar con 16 bits y necesitarás dos transacciones spi y algunas operaciones mas en el master.

  Un saludo.