Tabla de contenido

馃摍 Introducci贸n


En esta clase, exploraremos c贸mo utilizar un聽custom port聽en el microcontrolador聽ATmega328P聽utilizando el lenguaje de programaci贸n聽C. Un聽custom port聽es una t茅cnica que nos permite expandir la funcionalidad de los puertos de entrada/salida (I/O) cuando un puerto de 8 bits no es suficiente para manejar todas las entradas y salidas requeridas en un proyecto. Esto es especialmente 煤til en aplicaciones donde se necesita controlar un gran n煤mero de dispositivos o sensores.

馃摌 Fundamento Te贸rico


馃搫 Custom Port

Un聽custom port聽es una abstracci贸n que nos permite manejar un conjunto de pines de diferentes puertos como si fueran un solo puerto virtual. Esto es particularmente 煤til cuando necesitamos m谩s de 8 bits para controlar entradas y salidas, ya que el ATmega328P tiene puertos de 8 bits (PORTB, PORTC, PORTD, etc.). Al combinar pines de diferentes puertos, podemos crear un puerto virtual de mayor tama帽o.

Ejemplo de uso de un Custom Port

Supongamos que necesitamos controlar 10 LEDs, pero solo disponemos de puertos de 8 bits. Podemos combinar pines de dos puertos diferentes para crear un聽custom port聽de 12 bits. Por ejemplo, podr铆amos usar 8 pines de聽PORTB聽y 4 pines de聽PORTC聽para crear un puerto virtual de 12 bits.

#define CUSTOM_PORT_LOW  PORTC  //Los 6 bits bajos del custom port
#define CUSTOM_PORT_HIGH PORTB // Los 4 bits altos del custom port

void set_custom_port(uint16_t value) 
{                             //76543210
    CUSTOM_PORT_LOW = value & 0b00111111;   // Establece los 6 bits bajos
    CUSTOM_PORT_HIGH = (value >> 5) & 0b00001111; ; // Establece los 4 bits altos
}

image.png

En este ejemplo, la funci贸n聽set_custom_port聽toma un valor de 11 bits y lo divide en dos partes: los 4 bits altos se asignan a聽PORTB聽y los 6 bits bajos se asignan a聽PORTC.

馃搫 SWITCH CASE

El c贸digo presente utiliza un switch case para determinar la acci贸n a realizar seg煤n el estado de dos entradas. Esto se logra leyendo el estado de los pines de entrada y utilizando operaciones bitwise para concatenar los valores de los bits correspondientes a Input_1 e Input_0.

La concatenaci贸n de bits se realiza utilizando operaciones bitwise. Por ejemplo: