Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Carrera de Telecomunicaciones
Informe de Laboratorio de Microcontroladores
Fecha: Portoviejo, 5 de junio de 2025
Datos de los Estudiantes:
VALERIA YIRIBEL VERA
LETTY STEFANIA FLORES NAYELI ANAHI LOPEZ
MANTUANO ZAMBRANO ZAMBRANO
lflores5622@[Link]
nlopez5246@[Link]
vvera4179@[Link]
Carrera de
Carrera de
Telecomunicaciones Carrera de
Telecomunicaciones
Telecomunicaciones
Introducción
En esta práctica, se lleva a cabo la simulación de un circuito básico utilizando
Arduino UNO en la plataforma Tinkercad, cuyo propósito es encender y apagar un
LED de manera intermitente. A diferencia de los métodos convencionales que
emplean las funciones digitalWrite() y pinMode(), en esta ocasión se recurre
directamente a los registros internos del microcontrolador (DDRB y PORTB), lo que
posibilita un control más preciso y eficiente a nivel de hardware.
Objetivo General:
● Realizar la activación y desactivación de un LED externo que está conectado
al pin digital 13 del Arduino UNO, empleando programación de bajo nivel a
través de los registros DDRB y PORTB.
Objetivos específicos:
● Activar y desactivar un LED en intervalos de un segundo en el pin B5 del
microcontrolador ATmega328P.
● Establecer el pin B5 del ATmega328P como salida y su correspondiente
control mediante los registros DDRB y PORTB.
● Desarrollar el código en C++ utilizando WINAVR, junto con las bibliotecas
estándar.
Detalle de la práctica:
El código establece que el led es el bit PB5, que se asocia al pin digital 13.
Posteriormente, en la función setup(), se configura este pin como salida utilizando el
registro DDRB. En el bucle loop(), se activa el pin (cambiando su estado a alto con
PORTB |=) para encender el LED y luego se desactiva (cambiando su estado a bajo
con PORTB &=~) para apagarlo, con un intervalo de 1 segundo entre los estados.
Ejemplo de código en C++
1 #define led PB5
2
3 void setup()
4 {
//DDRB |= (1 << PB5);
5
DDRB |= (1 << led);
6
//DDRB = B00000000;
7
}
8
9
void loop()
10
{
11
//PORTB |= (1 << PB5);
12
//PORTB |= (1 << led);
13 PORTB = B00100000;
14 delay(1000);
15
16 //PORTB &= ~(1 << PB5);
17 PORTB &= ~(1 << led);
//PORTB = B00000000;
18
delay(1000);
19
}
20
21
22
Elementos utilizados:
● Fuente de poder mayor o igual a 5V (especificar cual utilizó, solo en
Tinkercad)
● Regulador de voltaje LM7805 (solo en Tinkercad)
● 1 Protoboard grande (solo en Tinkercad)
● 1 Microcontrolador ATmega328P (Arduino UNO en Tinkercad)
● 1 LED (Blanco)
● 1 Resistencia de 330Ω
● Cables de colores
Esquemático TINKERCAD:
CÓDIGO DE PROTEUS
1 // Laboratorio # 1: Control de un led colocado en el Puerto B5
2 // Parpadeando cada 1 segundo
3
4 #include <avr/io.h>
#include <util/delay.h>
5
6
int main() {
7
DDRB = 0x20; // Configura el pin 5 del puerto B como salida (0b00100000)
8
9
while (1) {
10
PORTB = 0x20; // Enciende el led en pin 5 del puerto B
11
_delay_ms(1000);
12
PORTB = 0x00; // Apaga el led en pin 5 del puerto B
13 _delay_ms(1000);
14 }
15
16 return 0;
17 }
18
19
20
Ejemplo de Esquemático PROTEUS:
Desarrollo de la práctica:
Para el desarrollo de esta práctica, se utilizó la plataforma Tinkercad para
simular el funcionamiento de un microcontrolador ATmega328P a través
de la tarjeta Arduino UNO. El objetivo fue encender y apagar un LED
conectado al pin digital 13 (PB5) utilizando programación de bajo nivel,
accediendo directamente a los registros DDRB y PORTB.
1. Configuración inicial: Se definió el pin PB5 como salida en el
registro DDRB mediante la instrucción DDRB |= (1 << led);.
2. Encendido y apagado del LED: Se utilizó el registro PORTB para
establecer el nivel alto (PORTB = B00100000;) y posteriormente el
nivel bajo (PORTB &= ~(1 << led);), con un retardo de un segundo
entre cada cambio de estado, generado con la función
delay(1000);.
3. Simulación: Se construyó el circuito en Tinkercad incluyendo una
fuente de alimentación de 5V, un regulador LM7805, un protoboard,
un LED blanco, una resistencia de 330Ω y los respectivos cables de
conexión.
4. Pruebas y validación: Se verificó que el LED encenderá y apagará
en intervalos de un segundo, confirmando el correcto
funcionamiento del código y de la configuración de registros.
ENLACE DE PRÁCTICA
[Link]
1sseHSW79f6C0hBAm3hs0YsBKw15eUw9e?usp=sharing
Preguntas de Reflexión:
a. ¿Qué ocurre si se omite la línea DDRB |= (1 << DDB5);?
Si se omite esta línea, el pin PB5 del ATmega328P no se configurará como salida, lo
cual es necesario para controlar un dispositivo como un LED.
Por defecto, los pines del microcontrolador están configurados como entradas.
Entonces, aunque el programa intente encender o apagar el LED manipulando el
registro PORTB, el pin no cambiará de estado, ya que el microcontrolador no puede
"sacar" voltaje por un pin configurado como entrada..
b. ¿Cómo cambiarías el código para que parpadee 2 veces por segundo?
Parpadear 2 veces por segundo significa que cada ciclo de encendido y apagado debe durar 0.5 segundos (500
Para lograr esto, se debe cambiar el valor del retardo en la función _delay_ms()
de esta manera:
Conclusiones:
En este laboratorio se logró comprender y aplicar los conceptos
fundamentales del manejo de los puertos GPIO en el microcontrolador
ATmega328P, utilizando el pin PB5 para controlar el encendido y apagado
de un LED. Se utilizó programación en C++ con la herramienta WINAVR,
manipulando directamente los registros DDRB y PORTB, lo que permitió
adquirir experiencia con el acceso de bajo nivel al hardware.
Además, se reforzó el uso de temporización mediante la función
_delay_ms(), comprendiendo su utilidad para generar intervalos de
tiempo precisos entre cambios de estado. La simulación del circuito en
plataformas como Tinkercad facilitó la verificación visual del
comportamiento del sistema y permitió validar el correcto funcionamiento
del código.