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 pinAlmacenamiento 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
}