Voltímetro en display 7 segmentos

En esta entrada vamos a realizar un voltímetro digital para aprender el manejo del conversor A/D (ADC) del LPC1347 con un sencillo programa que nos mostrará en el display de 7 segmentos, la tensión en milivoltios en el cursor de un potenciómetro.

Conectamos un potenciómetro (10K Ohm en mi caso, aunque el valor da lo mismo para comprobar el funcionamiento del voltímetro) con la patilla central (cursor) al pin del ADC_CH0. De las dos patillas restantes, una la conectamos a +3.3V y la otra a GND.

 
#include "board.h"
#include <stdio.h>
#include "delay.h"
#include "disp7seg.h"
 
#define _LPC_ADC_ID LPC_ADC
static ADC_CLOCK_SETUP_T ADCSetup;
 
/* Simple ADC resr and display loop */
static void App_Polling_Test(void)
{
   uint16_t dataADC;
   uint16_t miliVoltios;
   uint16_t i=0;
 
   while (1) {
      /* Start A/D conversion */
      Chip_ADC_SetStartMode(_LPC_ADC_ID, ADC_START_NOW, ADC_TRIGGERMODE_RISING);
 
      /* Waiting for A/D conversion complete */
      while (Chip_ADC_ReadStatus(_LPC_ADC_ID, ADC_CH0, ADC_DR_DONE_STAT) != SET) {}
 
      /* Read ADC value */
      Chip_ADC_ReadValue(_LPC_ADC_ID, ADC_CH0, &dataADC);
 
      /* conversión de las cuentas del ADC en milivoltios para hacer un voltímetro*/
 
      miliVoltios = dataADC / 1.24091;      // la resolución del ADC es de 12bits (valores de 0 a 4095). Con nuestro montaje, 3300mV corresponden a dataADC=4095.
 
      /* Print ADC value */
      for(i=0; i<10;i++){                // muestro 10 veces el valor en el display antes de volver a leer el ADC para tener un valor más estable en el display
         Imprime7segm(miliVoltios);      // Voltímetro en display 7 segmentos
         }
      Chip_GPIO_WritePortBit(LPC_GPIO_PORT, 0, 7, !Chip_GPIO_ReadPortBit(LPC_GPIO_PORT, 0, 7));       // cambio el estado del led de la placa cada vez que se hace una lectura
      }
}
 
int main(void)
{
   // Generic Initialization //
   SystemCoreClockUpdate();
   setSYSTICK();
   Board_Init();
   Board_ADC_Init();
   config7segm();
 
   /*ADC Init */
   Chip_ADC_Init(_LPC_ADC_ID, &amp;ADCSetup);
   Chip_ADC_EnableChannel(_LPC_ADC_ID, ADC_CH0, ENABLE);
   App_Polling_Test();
 
   /* Should not run to here */
   return 0;
}

¡Ya tienes tu voltímetro digital funcionando!

Como ves, la configuración del ADC requiere de varios pasos. Te recomiendo que leas detenidamente el manual de usuario del LPC1347 para ver todas las opciones de configuración que permite nuestro microcontrolador.

 

Siguiente parada… ¡termómetro digital!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *