Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Práctica 5 Miuva Pro: Convertidor Analógico a Digital

En esta práctica utilizaremos otro recurso del PIC; el convertidor analógico a digital (ADC), este recurso es sumamente útil ya que nuestra tarjeta trabaja internamente con información digital, sin embargo casi todo en el mundo real tiene información analógica. El ADC puede configurarse hasta para 10 bits.

Miuva Pro recibirá un voltaje que puede estar entre 0 y 3.3V, y lo convertirá a un valor entre 0 y 1023 (10 bits). Por ejemplo:

0V -> 0

3.3V -> 1023

Para configurar el ADC de Miuva Pro, utilizamos las siguientes líneas:

#device ADC = 10           //ADC de 10 bits

Definimos de cuantos bits será el ADC, esta línea tiene que estar después de la primer línea (donde definimos el PIC que vamos a utilizar).

setup_adc_ports(sAN0);   //Configuración de puertos analógicos
setup_adc(ADC_CLOCK_INTERNAL);    //Sincronizado con el reloj interno

Definimos cuales puertos de Miuva Pro serán analógicos (ya que por defecto son digitales), la información que se utiliza en esta función para definir los puertos está se puede encontrar en la librería del PIC, y es la siguiente:

// Constants used in SETUP_ADC_PORTS() are:
// First argument:
// OR together desired pins
#define sAN15            0x80     //| H7  
#define sAN14            0x40     //| H6  
#define sAN13            0x20     //| H5  
#define sAN12            0x10     //| H4  
#define sAN11            0x8      //| F6
#define sAN10            0x4      //| F5
#define sAN7             0x800000 //| F2
#define sAN4             0x100000 //| A5
#define sAN3             0x80000  //| A3
#define sAN2             0x40000  //| A2
#define sAN1             0x20000  //| A1
#define sAN0             0x10000  //| A0
#define NO_ANALOGS       0x0      // None
#define ALL_ANALOG       0xdf00ff // A0 A1 A2 A3 A5 F1 F2 F3 F4 F5 F6 H4 H5 H6 H7

Por lo tanto de acuerdo a la información anterior y la línea que se describió se estaría habilitando el pin A0 como entrada analógica.

Para la lectura del ADC utilizamos lo siguiente:

set_adc_channel(0);  //Canal del ADC que se va a 
delay_us(50);        //Retardo de 50 microsegundos
q = read_adc();      //Leemos el valor del ADC

El retardo de 20 microsegundos es necesario cada vez que configuramos el canal que se va a leer del ADC, es importante recordar que si estamos trabajando con el ADC de 10 bits, la variable donde se almacena el valor leído del ADC (en este caso q) deberá ser un entero de 16 bits.

Para convertir este valor almacenado en voltaje necesitaremos realizar una regla de 3 como se muestra a continuación:

3.3 -> 1023

voltaje -> valor_digital

voltaje = valor_digital * 3.3 / 1023.0

Voltaje deberá ser una variable de tipo flotante para que almacene el valor exacto de la conversión.

Con esto podemos crear el siguiente código:

#include <18F87J50.h>
#device adc = 10  //Definimos un ADC de 10 bits
#fuses HSPLL, NOWDT, NOPROTECT, NODEBUG, PLL2
#use delay (clock=24M)
#include<MPLCD.c>
unsigned int16 adc_lectura;   //Variable para almacenar valor del ADC
float voltaje;                //Variable para convertir valor a Voltaje
void main(){
   setup_adc_ports(sAN0);  //Configuramos AN0 como analógico
   setup_adc(ADC_CLOCK_INTERNAL);   //Configuramos la velocidad del ADC
   set_tris_a(0xFF);       //Puerto A como entrada
   set_tris_f(0x00);       //Puerto F como salida (Paso de Miuva Pro Rev B)
   lcd_init();             //Inicializamos la LCD
   set_adc_channel(0);     //Definimos el canal a leer del ADC
   delay_us(50);           //Retardo de 50 microsegundos 
   set_tris_j(0x00);       //Puerto J como salida
   while(true){            //Bucle infinito
      adc_lectura = read_adc();  //Leemos el valor del ADC
      voltaje = adc_lectura*3.3/1023.0;   //Lo convertimos a voltaje
      output_j(adc_lectura);     //Mostramos el valor del ADC en los leds
      lcd_gotoxy(2,1);           //Vamos a la posición (2,1) de la LCD
      printf(lcd_putc, "INTESC Miuva");      //Escribimos
      printf(lcd_putc, "nV = %2.3f V", voltaje);  //Escribimos en la LCD el Voltaje
      delay_ms(50);        //Tiempo entre mediciones
   }
}

NOTA: En la revisión B de Miuva Pro (esta información la puedes encontrar en la parte posterior de tu tarjeta), es necesario colocar el puerto F como salida al utilizar el ADC, ya que por las conexiones del acelerómetro, éste causa un offset al valor leído por el convertidor. Si tienes la revisión C entonces no será necesario este paso.

Imagen 1. Revisiones de Miuva Pro

 

Funcionamiento