Está en la página 1de 9

Aprendizaje Práctico – MANUAL DE PROCEDIMIENTO

PRÁCTICA #1: Secuencias de Visualización


CARRERA: Electrónica y Automatizacíon.
Led

Equipo Responsable CÁTEDRA O MATERIA REVISIÓN N°: 1


--------- RELACIONADA
Accesorios:
SISTEMAS MICROPROCESADOS
------- EDICIÓN: 1
DOCENTE: # ESTUDIANTES/ PRÁCTICA: Fecha:
Ing. Pablo Cevallos L. Msc Santiago Vizhñay 6/23/2020
Tema: Secuencias de visualización Led
Objetivo General: Diseñar un sistema electrónico para la visualización de caracteres en un display 7
segmentos con capacidad de variación de la secuencia de visualización y de la velocidad de presentación.

Especificaciones:
✓ El sistema debe poseer 3 secuencias de visualización en un display de 7 segmentos. El
display debe estar conectado a un único puerto del microcontrolador.
✓ La selección de las distintas secuencias de visualización debe ser realizada por medio de
micro interruptores (microswitch).
✓ El sistema debe poseer controles para regular la velocidad de exhibición (temporización)
de las distintas secuencias por medio de pulsadores de Incremento y Decremento. La
atención a los eventos de los pulsantes debe ser realizado por interrupción externa.

Competencias asociadas al manejo de uC


• Programación del Microcontrolador en Lenguaje C
• Configuración de los puertos E/S digitales.
• Lectura de pulsadores
• Rutinas de tiempo con ciclos de máquina y timers
• Manejo Básico de Interrupciones Externas.

Sustento teórico:
➢ Microcontroladores de 8 bits
La gama PIC16F de microcontroladores de Microchip son MCU de 8 bits que incorporan la arquitectura
PIC® de Microchip de una gran variedad de opciones de encapsulado y contactos.

Los microcontroladores PIC16F1885x/1887xx se basan en el núcleo de gama media mejorado de


Microchip y son los primeros en incluir varias funciones nuevas de baja potencia. Se han añadido modos
de REPOSO y RETARDO junto con la desactivación de módulo periférico para poder extraer los periféricos
del carril de alimentación y el árbol de relojes para ausencia de fugas de energía.

Además, estos dispositivos son las primeras MCU PIC de Microchip en incorporar un convertidor analógico
a digital con cálculo (ADC2). Las funciones como cálculo de acumulación, promedio y filtro de paso bajo
se completan en el hardware del ADC en lugar del software de la MCU, liberando a la CPU para hibernar
o completar otras tareas.

Características del microcontrolador

• Velocidad de CPU máx. de 32 MHz


• 49 instrucciones
• Pila de hardware de 16 niveles
• Oscilador interno
• 25 o 36 contactos de E/S
• Reset de encendido (POR)
• Temporizador de arranque (PWRTE) configurable
• Reinicio de caída de tensión (BOR) y reinicio de caída de tensión de baja potencia (LPBOR)
• Temporizador Watchdog con ventanas (WWDT)
• Programación serie en circuito (ICSP)
• Depuración en circuito (ICD)
• Programación de baja tensión (LVP)
• Selección de contactos periféricos (PPS

➢ Interrupciones.

Los microcontroladores PIC se programan para que realicen tareas de acuerdo a lo que interese,
normalmente realizarán esas tareas en forma ordenada una tras otra en forma cíclica, a esto se le conoce
como el programa principal; las interrupciones microcontroladores con el PIC son eventos que hacen
que el programa principal se detenga, para que el microcontrolador PIC se dedique ha realizar otras
tareas, mientras no ocurra una interrupción el microcontrolador solo realizará las tareas indicadas dentro
del programa principal.

Cada modelo de microcontrolador PIC tendrá una serie de interrupciones que podrá detectar, para que
se detecten las interrupciones con el PIC, es necesario programar algunos registros dependiendo de cual
se quiere que sea la causa de las interrupciones, se tienen registros para habilitar las interrupciones con
el PIC y registros para detectar cuando se han producido interrupciones.

Para la programación de los microcontroladores PIC y por tanto de las interrupciones con el PIC, se
utilizará el XC8 en el MPLABX, con el cual se programa en C/C++, se utilizará este programa porque
fácilita mucho la comprención de la forma de utilizar los registros involucrados en el uso de las
interrupciones con el PIC, una vez que se comprenda el uso de las interrupciones con el PIC es fácil
hacer lo mismo con otros programas dedicados a los microcontroladores PIC.

Para habilitar el uso de las interrupciones con el PIC se utiliza el registro INTCON, cada microntrolador
PIC tiene su registro INTCON, algunos tendrán mas de uno, es necesario revisar su hoja de datos para
verificar para que se utilizan cada uno de sus bits, pero lo que si es común en ellos es el bit7 o bit GIE.[2]

Anexos: Esquemas, Diagramas de Flujo, Código de programación.


Esquema:
Diagramas de Flujo
➢ Programa Principal (Diagrama).
➢ Secuecuencias, Delay (Diagramas Subprogramas).
➢ Interrupción (Diagrama)

Codigo de Programacion

// PIC16F18875 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1
#pragma config FEXTOSC = HS // External Oscillator mode selection bits (XT (crystal oscillator) above
500kHz, below 4MHz; PFM set to medium power)
#pragma config RSTOSC = EXT1X // Power-up default value for COSC bits (EXTOSC operating per
FEXTOSC bits)
#pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled; i/o or oscillator
function on OSC2)
#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 (FSCM timer enabled)

// CONFIG2
#pragma config MCLRE = ON // Master Clear Enable bit (MCLR pin is Master Clear function)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config LPBOREN = OFF // Low-Power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = ON // Brown-out reset enable bits (Brown-out Reset Enabled, SBOREN
bit is ignored)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (VBOR)
set to 1.9V on LF, and 2.45V on F Devices)
#pragma config ZCD = OFF // Zero-cross detect disable (Zero-cross detect circuit is disabled at
POR.)
#pragma config PPS1WAY = ON // Peripheral Pin Select one-way control (The PPSLOCK bit can be
cleared and set only once in software)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or
Underflow will cause a reset)

// CONFIG3
#pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software
control of WDTPS)
#pragma config WDTE = OFF // WDT operating mode (WDT Disabled, SWDTEN is ignored)
#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)

// CONFIG4
#pragma config WRT = OFF // UserNVM self-write protection bits (Write protection off)
#pragma config SCANE = available// Scanner Enable bit (Scanner module is available for use)
#pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming
enabled. MCLR/Vpp pin function is MCLR.)

// CONFIG5
#pragma config CP = OFF // UserNVM Program memory code protection bit (Program Memory
code protection disabled)
#pragma config CPD = OFF // DataNVM code protection bit (Data EEPROM code protection disabled)

// #pragma config statements should precede project file includes.


// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <pic16f18875.h>
#define _XTAL_FREQ 4000000

unsigned int cont1 = 100;


unsigned int cont = 500;

// Prototipos de Funciones
void Secuencia1();
void Secuencia2();
void Secuencia3();
void Delay();

void main()
{
// Configuracion de Puertos

TRISD = 0b00000000; // Configuracion del Puerto D como salida(Display).


ANSELD = 0b00000000; // Configuracion del Puerto D como salidas digitales.
TRISB = 0b11111111; // Configuracion del Puerto B como entradas (P1, P2, Microswitch).
ANSELB = 0b00000000; // Configuracion del Puerto B como entradas digitales.
LATD = 0b00000000; // Inicializo el Puerto D en 0.

// Configuracion de Interrupciones

INTCONbits.GIE = 1; // Habilitacion del bit de Interrupciones Globales (GIE = 1).


PIE0bits.IOCIE = 1; // Habilitacion del Modulo de Interrupcion al Cambio.
IOCBPbits.IOCBP0 = 1; // Habilitacion de la Interrupcion en el pin RB0. Flanco Positivo
IOCBPbits.IOCBP1 = 1; // Habilitacion de la Interrupcion en el pin RB1. Flanco Positivo

while(1) // Funcion Principal


{
if(PORTBbits.RB2 == 0 && PORTBbits.RB3 == 0)
{
LATD = 0x3F; // Se visualiza Numero 0
__delay_ms(800);
LATD = 0x77;
__delay_ms(800); // Se visualiza Letra A
}
if(PORTBbits.RB2 == 1 && PORTBbits.RB3 == 0)
{
Secuencia1(); // Numeros 1-9.
}
if(PORTBbits.RB2 == 0 && PORTBbits.RB3 == 1)
{
Secuencia2(); // Letras A-I.
}
if(PORTBbits.RB2 == 1 && PORTBbits.RB3 == 1)
{
Secuencia3(); // Numeros - Letras.
}
}

void __interrupt() Interrupcion ()


{
if(IOCBFbits.IOCBF0 == 1) // Detecta la Interrupcion, se levanta la bandera
{
if(PORTBbits.RB0 == 1) // Actividad del Pulsante 1
__delay_ms(100); // Anti-Rebote
{
if(cont <= 1000 )
{
cont = cont + cont1; // Decrementa la velocidad
}
}
IOCBFbits.IOCBF0 = 0; // Baja la bandera
}

else if(IOCBFbits.IOCBF1 == 1) // Detecta la Interrupcion, se levanta la banderaRB


{
if(PORTBbits.RB1 == 1) // Actividad del Pulsante 2
__delay_ms(100); // Anti-Rebote.
{
if(cont >= 100)
{
cont = cont - cont1; // Incrementa la velocidad.
}
}
IOCBFbits.IOCBF1 = 0; // Baja la bandera
}

PIR0bits.IOCIF = 0;
}

void Delay()
{
int i;
for(int i = 0; i < cont; i ++)
{
__delay_ms(1);
}
}

void Secuencia1() // Numeros 1-9


{
LATD = 0x06; // 1
Delay();
LATD = 0x5B; // 2
Delay();
LATD = 0x4F; // 3
Delay();
LATD = 0x66; // 4
Delay();
LATD = 0x6D; // 5
Delay();
LATD = 0x7D; // 6
Delay();
LATD = 0x07; // 7
Delay();
LATD = 0x7F; // 8
Delay();
LATD = 0x6F; // 9
Delay();
}

void Secuencia2() // Letras A-I


{
LATD = 0x77; // A
Delay();
LATD = 0x7F; // B
Delay();
LATD = 0x39; // C
Delay();
LATD = 0x3F; // D
Delay();
LATD = 0x79; // E
Delay();
LATD = 0x71; // F
Delay();
LATD = 0x7D; // G
Delay();
LATD = 0x76; // H
Delay();
LATD = 0x30; // I
Delay();
}

void Secuencia3() // Numeros - Letras


{
LATD = 0x06; // 1
Delay();
LATD = 0x77; // A
Delay();
LATD = 0x5B; // 2
Delay();
LATD = 0x7F; // B
Delay();
LATD = 0x4F; // 3
Delay();
LATD = 0x39; // C
Delay();
LATD = 0x66; // 4
Delay();
LATD = 0x3F; // D
Delay();
LATD = 0x6D; // 5
Delay();
LATD = 0x79; // E
Delay();
}
Conclusiones:
Una herramienta esencial para poder programar y comprender el funcionamiento del microcontrolador
PIC16F1885x/1887xx es el datasheet ya que con la hoja de datos podremos analizar las distintas
configuraciones de los diferentes Regitros, Interrupciones, Perifericos, etc que necesitamos para realizar
la practica de acuerdo al funcionamiento que queremos para el microcontroaldor.

Debemos configurar de manera correcta ya sean Entradas y/o Salidas los diferentes puertos que se van
a utilizar, de igual manera debemos configurar si los puertos que usamos van a ser Digitales y/o
Analogicos.

De igual manera debemos configurar de manera adecuada las interrupciones, teniendo en cuenta el tipo
de interrupción a usar, en este caso las interrupciones al cambio.}}
Bibliografía:

[1] “PIC16F18875 - Microcontroladores de 8 bits.” [Online]. Available:


https://www.microchip.com/wwwproducts/en/PIC16F18875.
[2] “Interrupciones con el PIC - MICROCONTROLADORES.” [Online]. Available:
http://microcontroladores-mrelberni.com/interrupciones-con-el-pic/.

También podría gustarte