0% encontró este documento útil (0 votos)
3 vistas13 páginas

PRACTICA_1_SISTEMAS_EMBEBIDOS

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 13

UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE

SEDE LATACUNGA

ENERGÍA Y MÉCANICA

SISTEMAS EMBEBIDOS 1872

ING. ANDRÉS MARCELO GORDÓN GARCÉS

TEMA:

MANEJO DE ENTRADAS Y SALIDAS DIGITALES CON PIC16F877A

INTEGRANTES

 HERRERA MARIO

 PILLAJO ARACELY

 QUINATONA BRYAN

 RAZA KEVIN

FECHA DE ENTREGA

22 DE ENERO DEL 2025

1
INDICE

1. OBJETIVO GENERAL ..................................................................................................... 3

2. OBJETIVOS ESPECIFICOS ............................................................................................. 3

3. MATERIALES UTILIZADOS .......................................................................................... 3

4. TRABAJO PREVIO ........................................................................................................... 4

ENTRADAS Y SALIDAS DIGITALES............................................................................... 4

REGISTRO DE CONFIGURACIÓN DE PUERTOS (TRIS) CON MPLAB ...................... 5

5. DESARROLLO DE LA PRÁCTICA ................................................................................ 6

CÓDIGO ................................................................................................................................ 6

6. RESULTADOS OBTENIDOS......................................................................................... 11

7. CONCLUSIONES ............................................................................................................ 12

8. RECOMENDACIONES .................................................................................................. 12

9. REFERENCIAS BIBLIOGRÁFICAS ............................................................................. 13

2
1. OBJETIVO GENERAL
Aprender a reconocer, manejar y configurar las entradas y salidas digitales del PIC16F877a,
mediante programación que permita controlar dispositivos externos como leds de forma
eficiente.

2. OBJETIVOS ESPECIFICOS
 Identificar las características principales del microcontrolador PIC16F877a, con énfasis
en los pines digitales de entrada y salida.
 Armar un circuito que permita interactuar con leds utilizando las entradas y salidas
digitales.
 Programar el microcontrolador utilizando MPLAB para lograr trabajar según las
funcionalidades requeridas en la práctica.
 Verificar el correcto funcionamiento del circuito y el código, identificando posibles
errores o ajustes necesarios.

3. MATERIALES UTILIZADOS

En este proyecto se utilizaron los siguientes materiales para el desarrollo y ensamblaje del
sistema:

Tabla 1 Materiales Utilizados

3
Este conjunto de materiales permitió la realización de las conexiones, programación y pruebas
del sistema, garantizando su correcto funcionamiento.

4. TRABAJO PREVIO
ENTRADAS Y SALIDAS DIGITALES
La operación de los puertos de entrada/salida (I/O) en microcontroladores, como el
PIC16F877A, desempeña un papel crucial en la transferencia de datos entre el microprocesador
y dispositivos externos. Estos puertos, esenciales para cualquier aplicación de sistemas
digitales basados en microcontroladores, pueden operar en dos modos principales: aislados y
mapeados a memoria. En su forma más simple, un puerto de entrada consta de un buffer de
tercer estado y, comúnmente, un registro de almacenamiento (latch). El buffer controla el flujo
de información entre el puerto y el bus de datos del microprocesador, mientras que el registro
temporiza la información de dispositivos periféricos de entrada hasta que el microprocesador
la lee. El modo aislado requiere señales de control específicas y ofrece la ventaja de un espacio
de direcciones independiente para los puertos de I/O, mientras que el modo mapeado a memoria
trata los puertos de I/O como registros externos en el espacio de direccionamiento de memoria,
permitiendo operaciones de entrada/salida mediante instrucciones de memoria estándar. Estos
modos proporcionan flexibilidad para gestionar eficazmente las operaciones de entrada y
salida, permitiendo una interacción versátil entre el microcontrolador y dispositivos externos.
(Pratt, 2019)

Ilustración 1 Microcontrolador PIC16F874A

4
REGISTRO DE CONFIGURACIÓN DE PUERTOS (TRIS) CON MPLAB
Los registros TRIS del PIC16F877A son elementos fundamentales en la configuración de los
puertos de entrada/salida (I/O). Ejemplificados por TRISA, TRISB, TRISC, TRISD y TRISE,
estos registros controlan la dirección de los pines en los puertos A, B, C, D y E,
respectivamente. Al asignar un valor de "0" a un bit correspondiente, se establece el pin como
salida, mientras que un valor de "1" lo configura como entrada. Estos registros son esenciales
para adecuar los puertos a las necesidades específicas de la aplicación, permitiendo funciones
como la configuración de pines como entradas analógicas para el convertidor analógico-digital
interno del PIC16F877A, a través de TRISA y TRISE. TRISB y TRISC, por otro lado, facilitan
la configuración de funciones alternativas y modos de operación para los pines
correspondientes, proporcionando versatilidad en el diseño y la interacción con dispositivos
externos. Estos registros son cruciales para personalizar la operación del microcontrolador
según los requisitos específicos de la aplicación y optimizar su rendimiento. (Pérez, 2019)

Ilustración 2 Estructura del microcontrolador

5
5. DESARROLLO DE LA PRÁCTICA
Desarrollo de código para controlar LEDs en un microcontrolador:

CÓDIGO

#include <xc.h>

// Configuración de los fusibles

#pragma config FOSC = XT // Configura el oscilador en modo XT

#pragma config WDTE = OFF // Desactiva el temporizador Watchdog

#pragma config PWRTE = OFF // Desactiva el temporizador de encendido

#pragma config BOREN = ON // Habilita el reinicio por bajo voltaje

#pragma config LVP = OFF // Desactiva la programación en baja tensión

#pragma config CPD = OFF // Desactiva la protección de datos EEPROM

#pragma config WRT = OFF // Desactiva la protección de escritura de memoria Flash

#pragma config CP = OFF // Desactiva la protección del código

#define _XTAL_FREQ 4000000 // Define la frecuencia del oscilador como 4 MHz

// Función para secuencia de encendido de LEDs de derecha a izquierda

void derecha_a_izquierda(void) {

for (int i = 7; i >= 0; i--) {

PORTB = (1 << i); // Activa el LED correspondiente desplazando el bit

__delay_ms(200); // Pausa de 200 ms entre activaciones

PORTB = 0x00; // Apaga todos los LEDs al finalizar la secuencia

6
}

// Función para secuencia de encendido de LEDs de izquierda a derecha

void izquierda_a_derecha(void) {

for (int i = 0; i < 8; i++) {

PORTB = (1 << i); // Activa el LED correspondiente desplazando el bit

__delay_ms(200); // Pausa de 200 ms entre activaciones

PORTB = 0x00; // Apaga todos los LEDs al finalizar la secuencia

void main(void) {

// Configuración de los puertos

TRISB = 0x00; // Configura el puerto B como salida

TRISA = 0x03; // Configura RA0 y RA1 como entradas para los pulsadores

PORTB = 0x00; // Asegura que todos los LEDs estén apagados al iniciar

PORTA = 0x00; // Limpia los pines de entrada al inicio

while (1) {

// Espera que RA0 sea presionado para iniciar la secuencia de derecha a izquierda

if (RA0 == 0) {

__delay_ms(50); // Introduce un retardo para evitar el rebote

if (RA0 == 0) { // Verifica que el pulsador sigue presionado

derecha_a_izquierda(); // Ejecuta la secuencia de derecha a izquierda

7
// Espera a que RA1 sea presionado para ejecutar la secuencia inversa

while (RA1 != 0); // Mantiene la espera hasta que se presione RA1

__delay_ms(50); // Introduce un retardo para evitar el rebote

if (RA1 == 0) { // Verifica que RA1 sigue presionado

izquierda_a_derecha(); // Ejecuta la secuencia de izquierda a derecha

Este programa, desarrollado en MPLAB para un microcontrolador PIC, está diseñado para
controlar el encendido secuencial de LEDs conectados al puerto B mediante dos pulsadores
ubicados en el puerto A. Los fusibles se configuran para habilitar el oscilador externo en modo
XT, desactivar el Watchdog Timer y las protecciones de memoria, y establecer una frecuencia
de trabajo de 20 MHz (_XTAL_FREQ).

El código implementa dos funciones principales:

1. derecha_a_izquierda: Realiza el encendido secuencial de los LEDs desde el bit más


significativo al menos significativo, con un retardo de 200 ms entre cada activación.
2. izquierda_a_derecha: Ejecuta la secuencia inversa, encendiendo los LEDs desde el bit
menos significativo al más significativo, manteniendo las mismas características de
retardo.

En el bucle principal (while (1)), se supervisan continuamente los pulsadores conectados a RA0
y RA1. Cuando se detecta una pulsación en RA0, el sistema inicia la secuencia de encendido
de derecha a izquierda; posteriormente, al presionar RA1, se ejecuta la secuencia inversa. Para
garantizar una operación confiable, se incorpora un retardo anti-rebote de 50 ms que previene
lecturas incorrectas de los pulsadores.

8
El puerto B se configura como salida (TRISB = 0x00) para el control de los LEDs, mientras
que el puerto A se configura como entrada (TRISA = 0x03) para recibir las señales de los
pulsadores. Al iniciar el programa, ambos puertos son inicializados en 0 para asegurar un
estado inicial estable.

Este programa se caracteriza por su modularidad, facilidad de adaptación y capacidad para


ajustar la velocidad de las secuencias mediante la modificación de los retardos (__delay_ms).
Su diseño lo convierte en una base versátil para proyectos que involucren patrones de
iluminación o el control de dispositivos electrónicos.

Ilustración 3 Simulacion en Proteous

El circuito controla el encendido secuencial de 8 LEDs utilizando un microcontrolador


PIC16F877A y dos pulsadores. La frecuencia de operación del microcontrolador está
determinada por un cristal de 20 MHz junto con los capacitores asociados.

Características principales:

 Control de LEDs: Los LEDs (D1 a D8) están conectados al puerto B (RB0-RB7) y se
protegen con resistencias limitadoras de corriente.
 Pulsadores: El pulsador RA0 activa la secuencia de encendido de los LEDs de derecha
a izquierda, mientras que RA1 inicia la secuencia inversa. Ambos pulsadores están
equipados con resistencias pull-down para garantizar un estado lógico bajo cuando no
están presionados.
 Alimentación: El circuito incluye un capacitor de desacoplo para estabilizar el voltaje
y mejorar la confiabilidad del sistema.

9
El funcionamiento del sistema se basa en la lectura de los pulsadores y la ejecución de
secuencias programadas con retardos específicos. Además, se han implementado medidas para
prevenir el rebote mecánico de los pulsadores, asegurando un rendimiento estable.

Este diseño es ideal para aplicaciones que requieran iluminación secuencial o como
herramienta educativa para aprender sobre microcontroladores y sistemas electrónicos.

Fig 4. Implementación del circuito.

Pasos para montar el circuito físico:

1. Colocar el PIC16F877A en el protoboard:


Inserta el microcontrolador en el protoboard y conecta los pines VDD (11 y 32) a 5V,
mientras que los pines VSS (12 y 31) se conectan a tierra.
2. Configurar el oscilador:
Conecta un cristal de 4 MHz entre los pines OSC1 (13) y OSC2 (14). Añade un
capacitor de 1 µF entre cada uno de estos pines y tierra para estabilizar la señal.
3. Conectar los LEDs:
Une los ánodos de 8 LEDs a los pines RB0-RB7 (33 al 40). Coloca una resistencia de
330 Ω entre el cátodo de cada LED y tierra para limitar la corriente.
4. Instalar los pulsadores:
Conecta un pulsador entre el pin RA0 (2) y 5V, y coloca una resistencia de 10 kΩ

10
entre RA0 y tierra para asegurar un estado bajo cuando el pulsador no esté
presionado. Repite el mismo proceso para RA1 (pin 3).
5. Alimentar el circuito y programar:
Conecta una fuente de 5V al circuito para su alimentación. Carga el código al
microcontrolador usando un programador compatible con el PIC16F877A.
6. Probar el circuito:
Verifica el funcionamiento presionando el pulsador conectado a RA0 para activar la
secuencia de LEDs de derecha a izquierda. Luego, presiona el pulsador conectado a
RA1 para ejecutar la secuencia inversa.

6. RESULTADOS OBTENIDOS

El programa desarrollado en MPLAB cumplió con los objetivos planteados, logrando el control
secuencial de los LEDs mediante los pulsadores conectados al microcontrolador PIC16F877A.
La estructura modular del código facilitó su comprensión y permitió la ejecución eficiente de
las secuencias, evitando redundancias gracias al uso de funciones específicas como
derecha_a_izquierda e izquierda_a_derecha, que aportaron claridad y orden al programa.

 Validación en simulación: La simulación realizada en Proteus fue una herramienta


fundamental para verificar tanto las conexiones como el comportamiento del circuito
antes de proceder a la implementación física. Este proceso permitió detectar posibles
errores en etapas iniciales, lo que optimizó el tiempo invertido en el desarrollo práctico.
 Construcción del circuito físico: El ensamblaje del circuito se llevó a cabo sin
inconvenientes, obteniendo resultados consistentes con los observados durante la
simulación. La correcta configuración de los pines y el uso de componentes en buen
estado resultaron esenciales para el éxito del diseño. Elementos clave, como el cristal
de 20 MHz y los pulsadores, funcionaron de manera adecuada, mientras que las
resistencias pull-down garantizaron la estabilidad de los pulsadores, eliminando señales
indeseadas.
 Programación y flexibilidad: La programación fue precisa, permitiendo ajustes
sencillos en los retardos, lo que demuestra la versatilidad del código. Esta flexibilidad
hace que pueda adaptarse fácilmente a otras aplicaciones o requerimientos. La
coincidencia entre los resultados obtenidos en la simulación y los obtenidos en el
circuito físico confirmó tanto la calidad del diseño como la correcta implementación
del código.

11
7. CONCLUSIONES
 Se logró reconocer y manejar las entradas y salidas digitales del microcontrolador
PIC16F877a, comprendiendo sus características principales y la importancia de su
configuración adecuada.
 El montaje del circuito permitió interactuar de manera práctica con dispositivos
externos, como leds, evidenciando la utilidad de los pinos digitales en aplicaciones
reales.
 La programación en MPLAB demostró ser una herramienta efectiva para implementar
las funcionalidades requeridas, resaltando la necesidad de estructurar correctamente el
código para evitar errores.

8. RECOMENDACIONES
 Antes de iniciar la práctica consulte y estudie el datasheet del microcontrolador
PIC16F877a para comprender la configuración de pines y registros.
 Asegúrese que los componentes del circuito funcionen y realice correctamente las
conexiones en el protoboard para evitar problemas en el circuito.
 Verifique el código antes de cargarlo al microcontrolador especialmente en la
configuración de pines.
 Utilizar software de simulación como Proteous antes de realizar el montaje físico para
poder identificar posibles errores previos.
 Documentar cada paso del proceso, incluyendo configuraciones y ajustes realizados,
para facilitar la replicación de la práctica en el futuro.

12
9. REFERENCIAS BIBLIOGRÁFICAS
 Microchip Technology Inc. (sin fecha). Hoja de datos del PIC16F877A . Recuperado
de https://www.microchip.com
 Mazidi, MA, McKinlay, RD y Causey, D. (2008). Microcontrolador PIC y sistemas
integrados: uso de ensamblaje y C para PIC18. Pearson Education.
 Microchip Technology Inc. (sf). MPLABX IDE. Recuperado de
https://www.microchip.com/mplab/mplab-x-ide
 Pérez, C. (2019). El microcontrolador PIC16F877A. Obtenido de El microcontrolador
PIC16F877A:
https://latecnicalf.com.ar/descargas/material/electronicadigital/PIC16F877%20
apunte.pdf
 Pratt, H. (26 de 03 de 2019). Sistemas digitales. Obtenido de Sistemas digitales:
https://www.academia.edu/43658729/CAPITULO_2_PARTE_I_PUERTOS_Y
_M%C3%93DULOS_DE_ENTRADA_SALIDA

13

También podría gustarte