Programando Embedded System Microcontroller con Metologia interactiva.
GILBERTO PASCUAL, 2025
Lenguaje C
y el Microcontrolador AVR
Lección 3:
Entradas y salidas en
lenguaje C para microcontroladores Atmel (AVR)
Passive Avr Programmer
Figura1
Figura2
“Ahora usted puede
aprender a Programar Microcontroladores de forma muy fácil”.
1. Introducción:
Empezaremos con esta lección
indicando que todos los puertos de los registros del microcontrolador AVR puede
accederse considerándose como byte o se puede acceder como un bit. En esta
lección nosotros programaremos los puertos del microcontrolador como entrada o
salida y se pondrá ejemplos para manejarlo como un byte o como un bit.
Es decir, podremos controlar todo
el puerto como byte o los pines podremos manejarlos como un bit.
Esta lección se explica cómo se
configura y se hace uso de un puerto del microcontrolador configurado como
salida o entrada de datos, todo ello lo programaremos en lenguaje C y compilar
el programa en AVR Studio.
2. Entrada y salida de datos
en byte:
Se accede al registro PORT como
byte, nosotros usaremos la nomenclatura PORTx, donde “x”, nos indicara el
nombre del puerto que se usara, por ejemplo, PORTB, hace referencia al registro
PORT del puerto B.
De manera similar podremos
acceder a la dirección de datos del registro usando DDRx que indica la
dirección de datos del puerto “x”. Para acceder al registro PIN como byte,
usaremos PINx, donde “x”, indica el nombre del puerto que se usara. En la
siguiente tabla se menciona los puerto y registros usando comúnmente.
Puerto |
Registro |
Dirección de datos |
A |
PORTA |
DDRA |
B |
PORTB |
DDRB |
C |
PORTC |
DDRC |
D |
PORTD |
DDRD |
E |
PORTE |
DDRE |
En resumen, la nomenclatura PORTx, DDRx y PINx, en donde “x” representara el nombre del puerto (ejemplo: PORTB, DDRB, PINB).
Ejemplo 1: “Los LEDs están
conectados en los pines del PUERTO B del microcontrolador. Escribir un programa
que muestre el conteo desde 0 hasta FFH (0000 0000 hasta 1111 1111 en binario) en
los LEDs”.
Solución:
Figura3. Código en lenguaje C para configurar
y enviar valores en byte por el puerto B del microcontrolador atmega 16.
Ejemplo 2: “Escribir un
programa en lenguaje C para recibir datos en byte por el Puerto B y enviarlos
por el Puerto C del microcontrolador”.
Solución:
Figura4. Código en lenguaje C para configurar
entrada y salida de datos de tipo byte en el microcontrolador atmega 16.
Ejemplo 3: “Escribir un
programa en lenguaje C para recibir datos en byte por el Puerto C y si es menor
que 100, enviar este valor por el puerto B, en caso contrario enviarlo por el
puerto D del microcontrolador”.
Solución:
Figura5. Código en lenguaje C para configurar
entrada y salida de datos de tipo byte y reenvió del dato con condicional en el
microcontrolador atmega 16.
3. Entrada y salida de datos
en bit
Las entradas y salidas de puertos
en Atmega32 pueden accederse por medio de bit, pero en algunos compiladores en
C para AVR no soportan esta funcionalidad y en otros compiladores no tienen el estándar
aun diseñado. Por ejemplo, la siguiente línea de código puede ser usado en
CodeVision para acceder a un pin del puerto B:
PORTB.0 = 1;
Pero en otros compiladores como
WinAVR no es posible esta codificación.
Para poder escribir un código que
sea compatible para diferentes compiladores deberemos hacer uso de operadores
de bit como AND y OR y poder acceder a un solo bit del registro. Esto lo
veremos en nuestra siguiente lección, donde explicaremos como haremos para acceder
a un bit del puerto y registro del microcontrolador.
4. Resumen:
Resumen de la Lección 3: En esta lección, Aprendimos a configurar los pines de un microcontrolador AVR como entradas o salidas a nivel de byte, usando registros adecuados. Se introdujeron ejemplos de uso con condiciones y tipos de datos.
Espero haber
podido ser lo mas claro posible en la descripción, configuración y uso de
entradas y salidas del presentados en esta lección.
5. Descargar el paper de la
lección 3: Entradas y salidas de datos en lenguaje C para microcontroladores
Atmel (AVR).
Descarga la Lección Completa: puedes
descargar el paper de la Lección 3 sobre la programación en lenguaje C de
microcontroladores AVR directamente desde Google Drive aquí.
6. Preguntas frecuentes:
¿Cuál es la diferencia entre PORTx, DDRx y PINx?
- PORTx: Controla el estado de salida del puerto.
- DDRx: Configura los pines como entrada o salida.
- PINx: Lee el estado de los pines de entrada.
¿Por qué se usa “unsigned char” en el microcontrolador AVR?
- Porque ocupa 8 bits, optimizando el uso de memoria y evitando el desperdicio de bits adicionales.
¿Qué ocurre si configuro como entrada sin activar pull-up?
- Puede quedar en estado flotante y captar interferencias, generando lecturas incorrectas.
¿Es posible escribir directamente en un bit de un puerto en todos los compiladores?
- No. Algunos compiladores como CodeVision lo permiten, pero otros como WinAVR requieren el uso de operaciones adicionales.
7.
Enlaces:
- “Tipos de datos en lenguaje C para microcontroladores Atmel”
- "Tipos de Lenguajes de Programación"
- “Parpadeo de Leds en un Atmega”
- “Programando un Atmel: Mi primer programa”
“Comparte este conocimiento”
“Si te ha sido útil este artículo, compártelo en tus redes sociales y
ayuda a otros a mejorar sus habilidades de programación de microcontroladores.
¡Tus comentarios también son bienvenidos!
¡Gracias!
Atte.
Gilberto Pascual
No hay comentarios:
Publicar un comentario