You are on page 1of 9

APLICACIONES DE CONTADORES CON EL PIC16F877A

Integrante 1 (Caccapa Vilca Yeral Emerson)


Integrante 2 (Apaza Sejje Noe Saul)
Integrante 3 (Turpo Yampara Yen Carlos)
Docente: Ing. Javier Jorge Mendoza Montoya

RESUMEN:

El presente informe tiene la finalidad de explicar la


aplicación de un contador ascendente y descendente
con dos pulsadores(SET,INICIO) que se visualiza en un
display de 7 segmentos (4 digitos), usando un buffer
invertido como decodificador, el código fue desarrollado
en el software MPLAB y la simulación en PROTEUS
para grabación del software PICKIT3.

PALABRAS CLAVE: Contador digital, pic, cristal,


display, buffer.

1 INTRODUCCIÓN
Un contador es básicamente un circuito que consta de
una entrada de impulsos (pulsador) y estos impulsos son
acumulados en un contador propiamente dicho cuyo
resultado, presenta mediante un visor que está
constituido por una serie de sencillos dígitos de siete
segmentos (display).

2 MARCO TEORICO

Los puertos del micro controlador PIC16F877A son el


medio de comunicación con el mundo exterior, en ellos
podremos conectar los periféricos o circuitos necesarios
como por ejemplo los módulos LCD, motores eléctricos, Las entradas de control son siempre digitales, mientras
etc.; pero estas conexiones no se podrán realizar que las entradas y salidas pueden ser tanto digitales
arbitrariamente. Existen unas reglas básicas que como analógicas dependiendo del circuito integrado en
deberán cumplirse para que el microcontrolador no sufra cuestión
daños o se destruya. Para ello es necesario conocer los
límites de corriente que puede manejar el
microcontrolador.

1
3 MATERIALES - Software MPLAB X.
- Micro controlador PIC 16F877A
- Condensadores: 22pF (2)
- Resistencias: 2200 Ω, 10KΩ
- Cristal Oscilador de 8MHz.
- Pulsador Normalmente abierto
- Display de 7 segmentos cátodo común
- Fuente de alimentación: 0V - 5V.

1 CARACTERISTICAS GENERALES Figura 2 condensador


4.2 Condensador
1.1 Pic 16F877A
Condensador cerámico 22pF de alta calidad ideal
El PIC 16F877 es un micro controlador de Microchip para proyectos con microcontroladores ya que es
Technology fabricado en tecnología CMOS, su consumo muy utilizado junto con cristales de cuarzo.
de potencia es muy bajo y además es completamente
estático (esto quiere decir que el reloj puede detenerse y
los datos de la memoria no se pierden). Tiene una 4.3 Cristal Oscilador
memoria memoria de programa tipo FLASH,
El oscilador de cristal se caracteriza por su estabilidad
de frecuencia y pureza de fase, dada por el resonador.
Especificaciones La frecuencia es estable frente a variaciones de la
tensión de alimentación. La dependencia con la
 Memoria de programa: FLASH de 8K de
temperatura depende del resonador, pero un valor típico
instrucciones de 14 bits
para cristales de cuarzo es de 0' 005% del valor a 25 °C,
 Memorias de datos: SRAM de 512 bytes,
en el margen de 0 a 70 °C.
EEPROM de 256 bytes
 Pines I/O (Input/Output) : 6 del puerto A, 8 del
puerto B, 8 del puerto C, 8 del puerto D y 3 del Especificaciones
puerto E, además de 8 entradas analógicas.
 Pila (Stack): 8 niveles (14 bits) - Reloj/Oscilador
 Fuentes de interrupción: 14 - 8 Mhz
 Instrucciones: 35
- Temperatura de funcionamiento
 Compatible modo SLEEP
- -20°C ~ 70°C
 Frecuencia máxima del oscilador de 20MHz
- Número de pines 2
 Conversor Analógico/Digital de 10 bits
multicanal (8 canales de entrada)
 Corriente máxima absorbida/suministrada
(sink/source) por pin: 25 mA
 Voltaje nominal: 3 a 5.5V DC (CMOS)
 Power On Reset
 Power Up Timer (PWRT)
 Oscilador Start Up Timer (OST)

Figura 3 crystal

Si tenemos un oscilador que nos controla el encendido y


el apagado de un led creando una intermitencia en
el momento que esta sea lo suficientemente rápida
ya no apreciaremos que el led llega a pagarse sino
nos dará la sensación que está permanentemente
encendido prácticamente a frecuencia superior a
30Hz ya no apreciamos el parpade
Figura 1 pic16F84A 4.4 Display

2
Es una forma de representar números en equipos temperatura de funcionamiento: -55 ° C a +125
electrónicos. Está compuesto de siete segmentos que °C
Se pueden encender o apagar individualmente. Cada - Encapsulado DIP
segmento tiene la forma de una pequeña línea. Es un - 16 pines
componente que se utiliza para la representación de
números en muchos dispositivos electrónicos debido en
gran medida a su simplicidad. Aunque
Externamente su forma difiere considerablemente de un
diodo LED (diodos emisores de luz) típico, internamente
están constituidos por una serie de diodos LED con unas
determinadas conexiones internas, estratégicamente
ubicados de tal forma que forme un numero 8. A cada
uno de los segmentos que forman el display se les
denomina a, b, c, d, e, f y g y están ensamblados de
forma que se permita activar cada segmento por
separado consiguiendo formar cualquier dígito numérico

Figura 5 CI 4049

2 FUNCIONAMIENTO

Consta de varios procesos con el fin de contar objetos


según al tamaño (grande, mediano, pequeño) Para su
funcionamiento primero pasa un objeto por el sensor,
haciendo que el fotodiodo envié un voltaje positivo, lo
cual cambia de estado de 5v a 0v enviando así un pulso
que acciona a la etapa del contador que por medio de un
Figura 4 display
3 CONCLUSION
4.5 CI 4049

El CD4049UBD es un inversor CMOS Hex Buffer / El laboratorio pudimos ver cómo funciona un pic y
Converter que cuenta con conversión de nivel lógico que puede cumplir diferentes funciones de acuerdo
usando solo un voltaje de suministro (VCC). El nivel alto a las necesidades del programador.
de señal de entrada (VIH) puede exceder el voltaje de
suministro de VCC cuando este dispositivo se usa para 4 RECOMENDACIONES
conversiones de nivel lógico. Este dispositivo está
diseñado para usar como CMOS a un convertidor DTL / 1. Se recomienda tener todos los materiales
TTL y puede conducir directamente dos cargas DTL / previstos y materiales extras, porque en el
TTL. El CD4049UB se designa como reemplazos para proceso de armando siempre encontramos
CD4009UB, respectivamente. Debido a que el fallas q pueden quemar nuestros materiales
CD4049UB requiere solo una fuente de alimentación, es 2. Se recomienda primeramente realizar el circuito
preferible a CD4009UB y debe usarse en lugar del en un simulador y seguidamente en físico para
CD4009UB en todas las aplicaciones de conversión de no errar en la implementación del circuito.
inversor, controlador actual o nivel lógico.

Especificaciones 5 REFERENCIAS
- Tipo: CMOS
- Familia: CD4000 [1]http://www.alldatasheet.com/view.jsp?
- Tipo dispositivo lógico: Buffer, Invertido Searchword=LM324&gclid=CjwKCAiA693RBRAwEiwALCc3
u-ipDC_KwUUu3Ge76RVvx2mt-
- Tensión de alimentación mínima: 3 V 67vujdBsoVvTfTZFo6tkIqZJbnZrRoCef0QAvD_BwE
- Tensión de alimentación máxima: 18 V [2] https://www.freepik.es/fotos-vectores-gratis/circuitos-
- Rang integrados [3]
o de [3] https://es.wikipedia.org/wiki/PIC16F84

3
6 ANEXO

6.1 SIMULACION (proteus)

A B C D E F G H J K

0 0

1 SET R1
1

10k

R2
2 2
10k
INIT

3 U1 3
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
4 5
RA3/AN3/VREF+ RB6/PGC
39 U2:D 4
6 40
RA4/T0CKI/C1OUT RB7/PGD
7 9 10
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8
RE0/AN5/RD RC1/T1OSI/CCP2
16 U2:C4049
9 17
RE1/AN6/WR RC2/CCP1
10 18 7 6
RE2/AN7/CS RC3/SCK/SCL
5 R3 23 U2:A 5
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO 4049
10k 25 3 2
RC6/TX/CK
26
RC7/RX/DT
U2:B
4049
19
RD0/PSP0
20 5 4
6 RD1/PSP1 6
21
RD2/PSP2
22
RD3/PSP3 4049
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
7 PIC16F877A
7

8 8

FILE NAME: Conta877a.pdsprj DATE:

22/10/2018
DESIGN TITLE: Conta877a.pdsprj
PAGE:
9 PATH: E:\SISTEMAS\4DIG.X\Conta877a.pdsprj 1 of 1 9

BY: @AUTHOR REV:@REV TIME: 03:37:05 p.m.


A B C D E F G H J K
4
A B C D E F G H J K

0 0

1 SET R1
1

10k

R2
2 2
10k
INIT

3
U1 3
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
4 5
RA3/AN3/VREF+ RB6/PGC
39 U2:D 4
6 40
RA4/T0CKI/C1OUT RB7/PGD
7 9 10
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8
RE0/AN5/RD RC1/T1OSI/CCP2
16 U2:C4049
9 17
RE1/AN6/WR RC2/CCP1
10 18 7 6
RE2/AN7/CS RC3/SCK/SCL
5 R3 23 U2:A 5
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO 4049
10k 25 3 2
RC6/TX/CK
26
RC7/RX/DT
U2:B
4049
19
RD0/PSP0
20 5 4
6 RD1/PSP1 6
21
RD2/PSP2
22
RD3/PSP3 4049
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
7 PIC16F877A
7

8 8

FILE NAME: Conta877a.pdsprj DATE:

22/10/2018
DESIGN TITLE: Conta877a.pdsprj
PAGE:
9 PATH: E:\SISTEMAS\4DIG.X\Conta877a.pdsprj 1 of 1 9
5
BY: @AUTHOR REV:@REV TIME: 03:37:05 p.m.
A B C D E F G H J K
9.2RESULTADOS DE LABORATORIO

6
6.1
DIAGRAMA
DE FUJO

7
[27] int sw;
[28] c=1;
[29] num=dd;
[30] while(1)
[31] {
[32] disp_2df(num);
[33] if(SET==0)
[34] {
[35] c++;
[36] while(SET !=1);
[37] if(c%2 ==0)
[38] num = AA;
[39] else if(c%2 !=0)
[40] num=dd;
[41] disp_2df(num);
[42] }
[43] else if(INI==0)
[44] {
[45] while(INI !=1);
[46] if(num==AA)
[47] cont_AA();
[48] else
[49] cont_dd();
[50] }
[51] }
[52] return;
[53] }
[54] void cont_AA(void)
[55] {
[56] for (j=0;j<10000;j++) //mil
[57] disp_2d(j);
[58] }
[59] void cont_dd(void)
[60] {
[61] for (j=9999;j>-1;j--) //nueve m
[62] disp_2d(j);
[63] }
[64] void disp_2d(int c)
[65] {
[66] int j;
6.2 CODIGO FUENTE [67] if(c== -1)
[68] {
[69] millar=10;
[1] #include <xc.h> [70] centena=10;
[2] #pragma config FOSC = HS,WDTE = OFF,PWRTE = [71] decena=10;
OFF,CP = OFF,LVP=OFF,BOREN=OFF [72] unidad=10;
[3] #define _XTAL_FREQ 8000000 [73] }
[4] #define b1 PORTDbits.RD0 [74] else if(c == -2)
[5] #define b2 PORTDbits.RD1 [75] {
[6] #define b3 PORTDbits.RD2 [76] millar=11;
[7] #define b4 PORTDbits.RD3 [77] centena=11;
[8] #define SET PORTDbits.RD4 [78] decena=11;
[9] #define INI PORTDbits.RD5 [79] unidad=11;
[10] int [80] }
bcd[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0xfc,0x07,0xff,0x [81] else if(c>=0)
67,0x77,0x5e}; [82] {
[11] int unidad,decena,centena,millar,a,s,d,c,j; [83]
[12] int num; [84] unidad=c%10; // modulo o resto de una div.
[13] int AA=-1; [85] a=c/10;
[14] int dd=-2; [86] decena=a%10;
[15] void disp_2d(int c); [87] s=a/10;
[16] void disp_2df(int c); [88] centena=s%10;
[17] void cont_AA(void); [89] d=s/10;
[18] void cont_dd(void); [90] millar=d;
[19] //--- Main Program --- [91] }
[20] void main(void) [92] else
[21] { [93] {}
[22] TRISA=0; [94] for (j=0;j<20;j++)
[23] TRISB=0; [95] {
[24] TRISD=0; [96] PORTB=bcd[unidad];
[25] TRISE=0X80; [97] b1=1;
[26] ADCON1=0X06; // puertos digitales [98] __delay_ms(5);

8
[99] b1=0;
[100] PORTB=bcd[decena];
[101] b2=1;
[102] __delay_ms(5);
[103] b2=0;
[104] PORTB=bcd[centena];
[105] b3=1;
[106] __delay_ms(5);
[107] b3=0;
[108] PORTB=bcd[millar];
[109] b4=1;
[110] __delay_ms(5);
[111] b4=0;
[112]
[113] }
[114]}
[115]void disp_2df(int c)
[116]{
[117] int j;
[118] if(c== -1)
[119] {
[120]
[121] millar=10;
[122] centena=10;
[123] decena=10;
[124] unidad=10;
[125] }
[126] else if(c == -2)
[127] {
[128] millar=11;
[129] centena=11;
[130] decena=11;
[131] unidad=11;
[132] }
[133] else if(c>=0)
[134] {
[135] decena=c/10; // división entera
[136] unidad=c%10; // modulo o resto de una div.
[137] }
[138] else
[139] {}
[140] for (j=0;j<2;j++)
[141] {
[142] PORTB=bcd[unidad];
[143] b1=1;
[144] __delay_ms(5);
[145] b1=0;
[146] PORTB=bcd[decena];
[147] b2=1;
[148] __delay_ms(5);
[149] b2=0;
[150] PORTB=bcd[centena];
[151] b3=1;
[152] __delay_ms(5);
[153] b3=0;
[154] PORTB=bcd[millar];
[155] b4=1;
[156] __delay_ms(5);
[157] b4=0;
[158]
[159] }
[160]}

You might also like