You are on page 1of 8

MANUAL DE

CARRERA: INGENIERIA ELECTRNICA

RESPONSABLE /EQUIPO:
Ivn Pesantez
Vernica Vicua
ACCESORIOS:
Pickit 3
Protoboard.
PIC18F4550.

DOCENTE:
Ing. Luis Serpa.

PROCEDIMIENTO

2. VISUALIZACIN EN DISPLAY

CTEDRA O MATERIA
RELACIONADA
SISTEMAS
MICROPROCESADOS II

REVISIN N: 1
EDICIN: 1

NMERO DE
ESTUDIANTES POR
EQUIPO O PRCTICA:
10 puestos de trabajo
2 estudiantes por
puesto

Fecha:
20-OCTUBRE-2015

Objetivo General:
Mostrar en un display de siete segmentos una secuencia ascendente y
descendente con tres pulsantes, uno para cada serie y otro de paro
respectivamente.
Objetivos Especficos:
Simular en software Proteus para comprobar el funcionamiento.
Realizar una gua de los procedimientos utilizados

Sustento terico

1 Pic18F4550
Este es un micro controlador que cuenta con diversos perifricos y un procesador
de 8 bits, esto quiere decir que es capaz de manejar datos compuestos por ocho bits que
equivalen a un byte. Este microcontrolador o uC tiene una hoja de datos (datasheet) en
donde se encuentran cada uno de los nombres de sus registros, ubicaciones de los
mismos, funcionalidades y usos de todos los registros que son capaces de controlar a
este uC. Antes de adentrarnos a hablar de sus registros y lo que hace cada uno, es
necesario conocer que es un registro [1], [2]. A continuacin se ilustra en la figura (1) el
diagrama de pines del microcontrolador.

Figura 1. Microcontrolador PIC18F4550.

2 Registros
Un registro es simplemente un espacio de la memoria interna del uC dispuestos en
bancos o bloques, que obviamente ya tiene un destino pre-definido. Existen registros de
propsito general y Registros de configuracin. Los de propsito general son aquellos en
los
que
el
programador
puede
acceder
y
modificar a su gusto, es precisamente una memoria que almacena informacin a manera
de una repisa con diferentes niveles, cada nivel, es un registro, y cada uno est
conformado por 8 cajones, los cajones que no se usan, simplemente son sustituidos por
un cero. Estos registros pueden ser expresados, llamados o llenados de forma: decimal,
hexadecimal o binaria.
Los registros de configuracin son precisamente eso, espacios de memoria que el
programador no puede simplemente borrar sin obtener una repercusin en la
configuracin o el funcionamiento del uC (no de su programa). Estos funcionan de la
misma
manera,
son
niveles
de
repisa
que
poseen
8
cajones cada uno, pero cada cajn tiene un significado, y dos estados, 1 o 0 que
pueden tambin, si son cajones en los que se puede receptar valores externos al uC,
valores de voltaje lgico (5 voltios para un 1 lgico o 0 voltios para un 0 lgico) [3].

3 Display 7 segmentos nodo comn


Un

display

es

un

visualizador

que

permite

realizar

diferentes

figuras

dependiendo del valor hexadecimal que se le otorgue, a continuacin en la figura (2)


se muestra una representacin grfica del mismo.

Figura 2. Display 7 segmentos nodo comn.

Procedimiento:
A partir del diagrama de bloque bsico realizado en el programa de simulacin
Proteus se puede ver que la conexin realizada es bsica. Vase la figura (3).

Fig. 3. Diagrama de programacin en Proteus 8.

En donde el puerto A se define como entrada, en donde se colocan los tres


pulsantes necesarios, el de serie ascendente, descendente y paro; el puerto B se
configura como la salida en donde se observan 3 leds de identificacin.
En el puerto D se ha colocado el display de 7 segmentos, en donde se visualizarn
los nmeros correspondientes.
En el Anexo, se adjunta la programacin realizada en el PIC, en donde se definen
las entradas y salidas y los valores iniciales de los puertos, se procede a realizar un
vector con los nmeros que se mostraran en el display en formato hexadecimal,
partiendo de esto se define un contador que simplemente vaya aumentando o
disminuyendo cuando se presione el botn seleccionado, adicionalmente se utiliza la
funcin break, para saltar de un proceso cuando se presione el pulsante de paro.

Recursos (Accesorios y Material fungible):

Datasheet del PIC18F4550.

Computador con software MpLab.

Pickit 3.

Conclusiones

Como se puede observar en esta prctica, el uso de vectores disminuye


notablemente el cdigo de programacin, puesto que solamente se necesita una
variable para poder almacenar algunos datos.
Se recomienda no configurar un mismo Puerto para entrada y salida ya que
pueden producirse errores al momento de compilar el programa.

Bibliografa:
[1]
Fernando
E.
Valds
Prez,
Ramn
Palls
Areny.
Microcontroladores:
Fundamentos
y
Aplicaciones
con
PIC.
Espaa.
ISBN:
84267-14XX.
Disponible
en:
https://books.google.com.ec/books?id=
Vm3LzebPliIC&printsec=frontcover&dq=microcontroladores&hl=es&
sa=X&ei=GN0qVZDdEu3gsAS134DYBA&redir_esc=y#v=onepage&q=
microcontroladores&f=false
[2]
Ordua
Huertas,
Juan
Manuel.
Arnau
Llombart,
Vivente.
Arquitectura
y
Programacin
de
Microcontroladores.
Espaa.
ISBN:
84-3702347-5.
Disponible
en:
https://books.google.com.ec/books?id=
Vm3LzebPliIC&printsec=frontcover&dq=microcontroladores&hl=es&
sa=X&ei=GN0qVZDdEu3gsAS134DYBA&redir_esc=y#v=onepage&q=
microcontroladores&f=false
[3] MpLab XC8 C compiler, user guide.

Anexos:
#include
#include
#include
#include

<xc.h>
//Libreria del compulador XC8
<stdio.h>
//Archivos de cabecera
<stdlib.h>
<plib/delays.h>

#pragma config PLLDIV = 1


// PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL
directly))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96
MHz PLL Src: /2])
#pragma config USBDIV = 1
// USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN =
1) (USB clock source comes directly from the primary oscillator block with no postscale)
// CONFIG1H
#pragma config FOSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
disabled)
// CONFIG2L
#pragma config
#pragma config
software)
#pragma config
#pragma config

PWRT = OFF
BOR = OFF

// Oscillator Selection bits (HS oscillator (HS))


// Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
// Internal/External Oscillator Switchover bit (Oscillator Switchover mode

// Power-up Timer Enable bit (PWRT disabled)


// Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and

BORV = 3
// Brown-out Reset Voltage bits (Minimum setting)
VREGEN = OFF
// USB Voltage Regulator Enable bit (USB voltage regulator disabled)

// CONFIG2H
#pragma config WDT = OFF
// Watchdog Timer Enable bit (WDT disabled (control is placed on the
SWDTEN bit))
#pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits (1:32768)
// CONFIG3H
#pragma config CCP2MX = ON
// CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON
// PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input
channels on Reset)
#pragma config LPT1OSC = OFF // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher
power operation)
#pragma config MCLRE = ON
// MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
// CONFIG4L
#pragma config STVREN = ON
// Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause
Reset)
#pragma config LVP = ON
// Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
#pragma config ICPRT = OFF
// Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT
disabled)
#pragma config XINST = OFF
// Extended Instruction Set Enable bit (Instruction set extension and Indexed
Addressing mode disabled (Legacy mode))
// CONFIG5L
#pragma config
#pragma config
#pragma config
#pragma config

CP0
CP1
CP2
CP3

=
=
=
=

OFF
OFF
OFF
OFF

// CONFIG5H
#pragma config CPB = OFF
protected)
#pragma config CPD = OFF
// CONFIG6L
#pragma config
#pragma config
#pragma config
#pragma config
// CONFIG6H

WRT0
WRT1
WRT2
WRT3

=
=
=
=

OFF
OFF
OFF
OFF

//
//
//
//

Code
Code
Code
Code

Protection
Protection
Protection
Protection

bit
bit
bit
bit

(Block
(Block
(Block
(Block

0
1
2
3

(000800-001FFFh)
(002000-003FFFh)
(004000-005FFFh)
(006000-007FFFh)

is
is
is
is

not
not
not
not

code-protected)
code-protected)
code-protected)
code-protected)

// Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code// Data EEPROM Code Protection bit (Data EEPROM is not code-protected)
//
//
//
//

Write
Write
Write
Write

Protection
Protection
Protection
Protection

bit
bit
bit
bit

(Block
(Block
(Block
(Block

0
1
2
3

(000800-001FFFh)
(002000-003FFFh)
(004000-005FFFh)
(006000-007FFFh)

is
is
is
is

not
not
not
not

write-protected)
write-protected)
write-protected)
write-protected)

#pragma config WRTC = OFF


// Configuration Register Write Protection bit (Configuration registers
(300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF
// Boot Block Write Protection bit (Boot block (000000-0007FFh) is not writeprotected)
#pragma config WRTD = OFF
// Data EEPROM Write Protection bit (Data EEPROM is not write-protected)
// CONFIG7L
#pragma config EBTR0 = OFF
// Table
table reads executed in other blocks)
#pragma config EBTR1 = OFF
// Table
table reads executed in other blocks)
#pragma config EBTR2 = OFF
// Table
table reads executed in other blocks)
#pragma config EBTR3 = OFF
// Table
table reads executed in other blocks)

Read Protection bit (Block 0 (000800-001FFFh) is not protected from


Read Protection bit (Block 1 (002000-003FFFh) is not protected from
Read Protection bit (Block 2 (004000-005FFFh) is not protected from
Read Protection bit (Block 3 (006000-007FFFh) is not protected from

// CONFIG7H
#pragma config EBTRB = OFF
// Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not
protected from table reads executed in other blocks)
#define _XTAL_FREQ 20000000

//Definimos un cristal de 20Mhz

char datos[] = {192,249,164,176,153,146,130,248,128,152};


unsigned short int contador = 0;
char a = 0;
char b = 0;
void configuracion(void){
ADCON1 = 0b00001111;
TRISB=0;
//Configurando el puerto B como salida
TRISA=255;
//Configurando el puerto A como entrada
//los puertos empiezan con cero
PORTB=0;
PORTA=0;
TRISD = 0;
//Configura todo el puerto B como salida
LATD = 192; //el puerto D empieza con 0 en el display
Delay10KTCYx(100);
}
void contadora (void){
if(PORTAbits.RA0 == 0 || a == 1){
Delay10KTCYx(10);
while(PORTAbits.RA0 == 0)Delay10KTCYx(2);
Delay10KTCYx(10);
//Se define el procedimiento para el botn de ascendente
while (PORTAbits.RA2 == 1){
PORTBbits.RB3 = 1;
PORTBbits.RB4 = 0;
PORTBbits.RB5 = 1;
Delay10TCYx(100);
PORTBbits.RB5 = 0;
contador ++;
Delay10KTCYx(1000);
if(contador == 10)
contador = 0;
LATD = datos[contador];
if(PORTAbits.RA1 == 0){
b = 1;
a = 0;
break;
}
if(PORTAbits.RA2 == 0){
b = 0;
a = 0;
break;

}
}
}
if(PORTAbits.RA1 == 0 || b == 1){
Delay10KTCYx(10);
while(PORTAbits.RA1 == 0)Delay10KTCYx(2);
Delay10KTCYx(10);
//Se define el procedimiento para el botn de descendente
while (PORTAbits.RA2 == 1){
PORTBbits.RB3 = 0;
PORTBbits.RB4 = 1;
// PORTBbits.RB5 = 1;
//Delay10TCYx(1000);
//PORTBbits.RB5 = 0;
LATD = datos[contador];
Delay10KTCYx(1000);
if(contador == 0)contador = 10;
contador --;
if(PORTAbits.RA0 == 0){
a = 1;
b = 0;
break;
}
if(PORTAbits.RA2 == 0){
a = 0;
b = 0;
break;
}

}
}
}

void main(void) {
configuracion();
while(1){
contadora();
}
}

You might also like