miércoles, 2 de abril de 2025

Lección 3: Entradas y salidas en lenguaje C para microcontroladores Atmel (AVR)

 Programando Embedded System Microcontroller con Metologia interactiva.

          

GILBERTO PASCUAL, 2025 

gpascualt@gmail.com

 

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