Fundamentos de Programación en C para Microcontroladores: Vectores, ADC y Timers

Clasificado en Informática

Escrito el en español con un tamaño de 3,11 KB

Vectores en Programación

Un vector es una estructura de datos que consiste en una variable con múltiples posiciones, donde cada una de ellas puede almacenar un valor distinto de manera independiente.

Definición y Asignación

Para definir un vector en C, se especifica el tipo de dato y el tamaño entre corchetes. Por ejemplo:

// Se define un vector con 4 posiciones: la posición 0, la 1, la 2 y la 3
int maxiputo[4]; 

// Asignación de valor: hacemos que la posición 0 valga 52
maxiputo[0] = 52;

Configuración del ADC (Conversor Analógico-Digital)

El ADC permite transformar señales analógicas en valores digitales procesables por el microcontrolador. Puedes consultar material adicional en el siguiente enlace: Apunte sobre ADC.

Configuración de Registros

Para configurar el ADC, es necesario definir los registros dentro de la función main, pero fuera del bucle infinito (for o while):

  • ADCCFG: Determina la resolución de la conversión (8 bits o 10 bits).
  • ADCSC2: Generalmente se inicializa en 0.
  • ADCSC1: Define el canal o pin de entrada que se desea utilizar.
  • APCTL1: Habilita el control de los pines correspondientes.
ADCCFG = 0b00001000;   // Configuración de bits (8 o 10 bits)
ADCSC2 = 0;            // Valor por defecto
ADCSC1 = 0b00100000;   // Selección del pin de entrada
APCTL1 = 0b00001011;   // Habilitación del pin

Almacenamiento y Conversión de Datos

Para capturar el valor de la conversión, se utiliza la siguiente lógica:

// Se detecta cuando el ADC terminó de convertir mediante la bandera COCO
if (ADCSC1_COCO == 1) {
    valor = ADCR; // Se iguala el valor de la conversión a la variable "valor"
}

// Cálculo de la tensión (ADCR es el valor de la conversión)
tension = (valor * 5) / 1024;

Uso de Timers en Microcontroladores

Los Timers son periféricos esenciales para el control del tiempo y la generación de eventos periódicos. Más información aquí: Apunte sobre Timers.

Configuración de Tiempos

Al igual que con el ADC, los registros se definen dentro del main pero fuera del bucle infinito:

// Configuración del Timer 1 para contar cada 1 segundo
TPM1MOD = 62499;
TPM1SC = 0b01001111;

// Configuración del Timer 2 para contar cada 1 ms
TPM2SC = 0b01001011;
TPM2MOD = 999;

Detección de Finalización del Conteo

Para identificar cuándo el temporizador ha alcanzado su valor máximo, se utiliza la bandera de desbordamiento (Timer Overflow Flag):

if (TPM1SC_TOF == 1) { 
    // Aquí se inserta el código de la acción deseada
    TPM1SC_TOF = 0; // Se limpia el TOF para reiniciar el ciclo de conteo
}

Entradas relacionadas: