Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semestre 2023-I
Índice
Introducción.............................................................................................................................. 2
Objetivos....................................................................................................................................2
Materiales.................................................................................................................................. 3
Desarrollo.................................................................................................................................. 3
I. Diseño de hardware...........................................................................................................3
II. Desarrollo del algoritmo en diagrama de flujo.................................................................. 5
III. Codificación del diagrama de flujo en lenguaje de programación XC8........................... 7
IV. Pruebas de validación....................................................................................................11
Conclusiones...........................................................................................................................11
Recomendaciones y comentarios finales............................................................................ 12
Referencias bibliográficas..................................................................................................... 12
1
Introducción
Objetivos
2. Utilizar de manera efectiva las interrupciones externas INT0, INT1 e INT2 disponibles
en el microcontrolador PIC18F57Q43 con vectores de interrupción para gestionar
eventos múltiples y realizar acciones específicas en respuesta a ellos.
2
Materiales
Nombre Cantidad Observación
Desarrollo
I. Diseño de hardware
Para el diseño de hardware se ha seleccionado el microcontrolador
PIC18F57Q43. Además, se han incluido tres pulsadores normalmente abiertos (NA)
con sus correspondientes capacitores de 0.1 uF para evitar el rebote. Estos pulsadores
están conectados entre los puertos de interrupción externa INT0 - INT2 y tierra. Se ha
utilizado un módulo de display rojo de cuatro dígitos con ánodo común. Para la
conexión de los segmentos del display, se han empleado siete resistencias de 330 ohm
que actúan como intermediarias entre los pines RF0 - RB6 y los segmentos. Asimismo,
se han utilizado cuatro transistores PNP 2N3906 para habilitar los cuatro dígitos del
display, conectando el colector del transistor con el ánodo del display. Para la conexión
de los transistores, se han utilizado cuatro resistencias de 1K ohm. Estas resistencias
actúan como intermediarias entre los pines RA0 - RA3 y la base de los transistores para
limitar la corriente, mientras que el emisor se conecta a 3.3 V.
3
Diagrama esquemático del circuito
Implementación: Completo
4
Implementación: Pulsadores
Implementación: Display
5
Diagrama de flujo de la aplicación
6
III. Codificación del diagrama de flujo en lenguaje de programación XC8
Descripción general del código
En la función configuro(), se configuran los registros y los pines del
microcontrolador para establecer las direcciones de entrada/salida, los niveles de
prioridad de las interrupciones y las configuraciones específicas del hardware.
Bits de configuración.-
// CONFIG1
#pragma config FEXTOSC = OFF // External Oscillator Selection (Oscillator not enabled)
#pragma config RSTOSC = EXTOSC // Reset Oscillator Selection (EXTOSC operating per FEXTOSC bits (device
manufacturing default))
// CONFIG2
#pragma config CLKOUTEN = OFF // Clock out Enable bit (CLKOUT function is disabled)
#pragma config PR1WAY = ON // PRLOCKED One-Way Set Enable bit (PRLOCKED bit can be cleared and set
only once)
#pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
// CONFIG3
#pragma config MCLRE = EXTMCLR // MCLR Enable bit (If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin
function is MCLR )
7
#pragma config PWRTS = PWRT_16 // Power-up timer selection bits (PWRT set at 16ms)
#pragma config MVECEN = ON // Multi-vector enable bit (Multi-vector enabled, Vector table used for
interrupts)
#pragma config IVT1WAY = ON // IVTLOCK bit One-way set enable bit (IVTLOCKED bit can be cleared and
set only once)
#pragma config LPBOREN = OFF // Low Power BOR Enable bit (Low-Power BOR disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled)
// CONFIG4
#pragma config BORV = VBOR_1P9 // Brown-out Reset Voltage Selection bits (Brown-out Reset Voltage (VBOR)
set to 1.9V)
#pragma config ZCD = OFF // ZCD Disable bit (ZCD module is disabled. ZCD can be enabled by setting the
ZCDSEN bit of ZCDCON)
#pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (PPSLOCKED bit can be cleared and
set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF // Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for
programming)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed
Addressing Mode disabled)
// CONFIG5
#pragma config WDTCPS = WDTCPS_31// WDT Period selection bits (Divider ratio 1:65536; software control of
WDTPS)
#pragma config WDTE = OFF // WDT operating mode (WDT Disabled; SWDTEN is ignored)
// CONFIG6
#pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software
control; keyed access not required)
#pragma config WDTCCS = SC // WDT input clock selector (Software Control)
// CONFIG7
#pragma config BBSIZE = BBSIZE_512// Boot Block Size selection bits (Boot Block size is 512 words)
#pragma config BBEN = OFF // Boot Block enable bit (Boot block disabled)
#pragma config SAFEN = OFF // Storage Area Flash enable bit (SAF disabled)
#pragma config DEBUG = OFF // Background Debugger (Background Debugger disabled)
// CONFIG8
#pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block not Write protected)
#pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers not Write
protected)
#pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not Write protected)
#pragma config WRTSAF = OFF // SAF Write protection bit (SAF not Write Protected)
#pragma config WRTAPP = OFF // Application Block write protection bit (Application Block not write protected)
// CONFIG10
#pragma config CP = OFF // PFM and Data EEPROM Code Protection bit (PFM and Data EEPROM code
protection disabled)
Main.-
#include <xc.h>
#include <pic18f57q43.h>
#include "cabecera.h"
#define _XTAL_FREQ 4000000UL
8
};
void incrementar_cuenta(int pos){ // Función para incrementar una cifra de la cuenta, con variable local de la cifra a
aumentar
9
cuenta[pos] = 0; // Reinicia a 0 el valor de la cifra
incrementar_cuenta(pos + 1); // Llamada recursiva para incrementar la cifra siguiente
}
}
void decrementar_cuenta(int pos){ // Función para decrementar una cifra de la cuenta, con variable local de la cifra a
aumentar
void main(void) {
while(1){
multiplex(); // Multiplexa el display con la función multiplex()
}
}
10
IV. Pruebas de validación
Para las pruebas se tomaron imágenes en diferentes valores de la cuenta. Estos
son el valor máximo (9999), el valor mínimo (0000) y un valor entre los posibles de la
cuenta (0240).
Conclusiones
1. Se diseñó e implementó de manera física un contador utilizando el microcontrolador
PIC18F57Q43 que permite la visualización de valores de 0000 a 9999 en un display de
7 segmentos multiplexado.
11
Recomendaciones y comentarios finales
1. Las tablas de conversión y la elección de materiales, como los transistores, están
específicamente diseñados para su compatibilidad con el tipo de display seleccionado,
en este caso, un display de ánodo común. Si se decide utilizar otro tipo de display, se
requerirán modificaciones tanto en el código como en la implementación para
garantizar la compatibilidad y el correcto funcionamiento.
Referencias bibliográficas
1. Microchip Technology Inc. (2022). MPLAB XC8 C Compiler User's Guide for PIC MCU
(DS50002737G). Recuperado de
https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/Us
erGuides/MPLAB-XC8-C-Compiler-Users-Guide-for-PIC-DS50002737.pdf
3. Microchip Technology Inc. (2020). PIC18F57Q43 Curiosity Nano Hardware User Guide
(DS40002186B). Recuperado de
https://ww1.microchip.com/downloads/en/DeviceDoc/PIC18F57Q43-Curiosity-Nano-HW-User
Guide-DS40002186B.pdf
12