Vous êtes sur la page 1sur 6

MICROCONTROLADORES

PROYECTO N° 01

JUEGO DE TIRO A CANASTA CON


INDICADOR DE PUNTOS

FASE 2: Programación básica con bucles


de control.

Alumno(s) Nota

Grupo
Ciclo 4C5 Electrónica y Automatización – Microcontroladores
Fecha de entrega

ELECTRONICA Y AUTOMATIZACION INDUSTRIAL


PROGRAMA DE FORMACIÓN REGULAR
Nro.
LABORATORIO MICROCONTROLADORES Página 1 de 5

I. CAPACIDAD TERMINAL
 Utilizar al microcontrolador en aplicaciones de control electrónico.
 Desarrollar y ejecutar programas en un microcontrolador PIC
 Programar y configurar interfaces básicas del microcontrolador.

II. COMPETENCIA ESPECIFICA DE LA SESION


 Manejo de puertos de forma grupal e independiente para manejo de luces
 Programación de sonidos mediante subrutinas.
 Creación de Subrutinas mediante funciones.
 Declaración de variables enteras.

III. CONTENIDOS A TRATAR


 Control de puertos como entradas y/o salidas
 Generación de salida pulsante
 Bucles de control

IV. RESULTADOS
 Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y
gestionando adecuadamente los recursos materiales y humanos.

V. MATERIALES Y EQUIPO
 CCS Compiler instalado.
 Entrenador de PICS
 Pantalla LCD
 PIC16F877A
 Motor DC
 Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
 PC con Software de simulación.

VI. REPASO DEL LABORATORIO ANTERIOR


 Herramientas de Programación en Hardware y Software

VII. FUNDAMENTO TEÓRICO


 Estructuras y Bucles de control.
 Ingresar a la página www.coursera.org , logearse y buscar el curso “¡A Programar! Una
introducción a la programación”, inscribirse en el mismo.
 Las notas obtenidas en dicho curso serán parte de las evaluaciones de este proyecto.

VIII. SEGURIDAD EN LA EJECUCIÓN DEL LABORATORIO

Tener cuidado con el tipo y niveles de voltaje con


los que trabaja.

Antes de utilizar el multímetro, asegurarse que


esta en el rango y magnitud eléctrica adecuada.

Tener cuidado en la conexión y en la desconexión


de los equipos utilizados
Nro.
LABORATORIO MICROCONTROLADORES Página 2 de 5

DISPLAY CATODO COMUN

ENTRENADOR HFK-010U PICS


PULSADORES

1 A5
U2
20MHz PIC16F877A
1 D0
RV1 X1 U1 A1
1 D1 CRYSTAL13 33 U3
OSC1/CLKIN RB0/INT
14 34 NOT
OSC2/CLKOUT RB1
1 E2 35 A2
50%

RB2 U4
2 36
RA0/AN0 RB3/PGM
A1 3 37 NOT
RA1/AN1 RB4
POTENCIOMETRO A2 4
RA2/AN2/VREF-/CVREF RB5
38 A3
10k A3 5 39
RA3/AN3/VREF+ RB6/PGC
6 40 NOT
RA4/T0CKI/C1OUT RB7/PGD
7
SENSOR TEMP. A5 RA5/AN4/SS/C2OUT

LEDS INDICADORES
15
U5 8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16 ? C0
9 17
27.0
VCC
3
2 E2
10
RE1/AN6/WR
RE2/AN7/CS
RC2/CCP1
RC3/SCK/SCL
18 ? C1
DQ 23
GND
1
1
MCLR/Vpp/THV
RC4/SDI/SDA
RC5/SDO
24 ? C2
25
DS18B20 RC6/TX/CK
RC7/RX/DT
26 ? C3

RD0/PSP0
19 D0
? C4
20
RD1/PSP1
21
D1 ? C5
1

RECEPTOR IR RD2/PSP2
22
IRL1 RD3/PSP3
27
RD4/PSP4
RESET RD5/PSP5
28 RXD
29
RD6/PSP6
Demodulator 30 TXD
RD7/PSP7
PIC16F877A RTS
IRLINK PANTALLA LCD
CTS
LS1 LCD1
LM016L
PUERTO SERIAL PC
PIEZO
VDD
VSS

VEE

RW

SOUNDER
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14

IX. TAREAS GUIADAS DENTRO DEL LABORATORIO:

1. Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe


funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas.

#include <16f877a.h> // Incluimos archivo con PIC a utilizar


#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles

int salida=1; // Declaramos variable "salida" como entera y valor UNO


int variable=0;

void main () // FUNCION PRINCIPAL del programa, indispensable


{
output_c(0b00000000); // Sacamos por el puerto C el valor de salida (00000000)
// Este comando se realiza por única vez
while (true) // Bucle de REPETICION infinita por valer "true"
{
IF (!input(PIN_A5)) // SI detectamos 0 voltios en PIN A5 (presionando pulsador)
{
output_c(salida); // Sacamos por el puerto C el valor de salida (00000001)
delay_ms(500); // "Congela el tiempo" durante 500 ms para evitar falsos disparos
}

IF (!input(PIN_D0)) // SI detectamos 0 voltios en PIN D0 (presionando pulsador)


{
output_high(PIN_C5); // Pone a "1" el pin C5 (envía 5 voltios)
output_bit(PIN_C4, 1); // Pone a "1" el pin C4 (envía 5 voltios)
output_toggle (PIN_C1); // Invierte el valor del PIN C1 (si estaba en 0, pasa a 1 y viceversa)
delay_ms(500); // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
}

IF (!input(PIN_D1)) // SI detectamos 0 voltios en PIN A5 (presionando pulsador)


{
Nro.
LABORATORIO MICROCONTROLADORES Página 3 de 5

salida = salida << 1; // Recorremos el contenido de "salida" una posición a la izquierda


variable = 1; // asignamos el valor "1" a variable
delay_ms(500); // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
}

IF (!input(PIN_E2) && (variable == 1)) // SI detectamos 0 voltios en PIN E2 variable vale 1....
{
output_bit(PIN_C5,0); // Pone a "0" el pin C0 (envía cero voltios o GND)
variable = 0; // asignamos el valor "0" a variable
delay_ms(500); // "Congela el tiempo" durante 500 ms para evitar falsas pulsaciones
}

}
}

2. Preguntas:
a. ¿Para qué sirve el símbolo “!” antes del comando “input”?
b. ¿Qué valores acepta el tipo de variable ENTERO?
c. ¿con qué comando introduzco retardos del orden de micro segundos?

3. Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe


funcionamiento en Tarjeta Entrenadora. Responda a las preguntas planteadas

#include <16f877a.h> // Incluimos archivo con PIC a utilizar


#use delay (clock=20M) // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles

int salida=1; // Declaramos variable "salida" como entera y valor UNO


int variable=0; // Declaramos variable "variable" como entera y valor CERO
int i=0; // Declaramos variable "i" como entera y valor CERO

void BIP(); // Declaro la funcion "BIP" que está detalla al final del código

void main () // FUNCION PRINCIPAL del programa, indispensable


{
output_c(0b00000000); // Sacamos por el puerto C el valor de salida (00000000)
// Este comando se realiza por única vez por estar fuera del bucle WHILE
while (true) // Bucle de REPETICION, si es "true", significa repetición infinita
{
IF (!input(PIN_D0)) // SI detectamos 0 voltios en PIN D0 (presionando pulsador)
{
output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)
delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


Nro.
LABORATORIO MICROCONTROLADORES Página 4 de 5

delay_ms(1); // "Congela el tiempo" durante 1ms


output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)


delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms

IF (!input(PIN_D1)) // SI detectamos 0 voltios en PIN A5 (presionando pulsador)


{
FOR (i=0;i<=10;++i) // Se repetirá 10 veces los comandos siguientes entre llaves
{
output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)
delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms
}
}

IF (!input(PIN_A5)) // SI detectamos 0 voltios en PIN A5


{
BIP(); // Se ejecuta la función "BIP" declarada previamente
}

}
}

void BIP()
{
FOR (i=0;i<=10;++i)
{
output_high(PIN_E1); // Pone a "1" el pin E1 (envía 5 voltios)
delay_ms(1); // "Congela el tiempo" durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante 1ms
}
}

1. Preguntas:
a. ¿Cuál sería el código más eficiente para emitir un sonido “bip” cada vez que se pulse una
tecla cualquiera?
b. Modifique y optimice el programa para emitir un sonido bip durante 100 ms aunque la
tecla se mantenga pulsada.
Nro.
LABORATORIO MICROCONTROLADORES Página 5 de 5

X. CONTENIDO DEL INFORME EN EL BLOG:

1. Descripción de los principales BUCLES DE CONTROL: while, if, if-else, for.


2. Elaborar un programa que encienda un led a la vez cada vez que se presione un pulsador y al
llegar al sexto pulso, que emita 3 bips y el programa se detenga allí hasta que se reinicie dicho
programa presionando RESET. Muestre la simulación de dicho programa.
3. Video mostrando las tareas realizadas en laboratorio.
4. Video mostrando en SIMULACION el programa solicitado.
5. Nombre de los integrantes durante todo el video, en la pantalla de simulación y un “selfie” al
principio de la explicación de los videos. La explicación de los videos será repartido entre los
integrantes del grupo.
6. Incluir OBSERVACIONES Y RECOMENDACIONES en modo texto al final del BLOG.

XI. RECOMENDACIONES
1. Documentar el avance del proyecto con capturas de pantalla, videos, observaciones y
conclusiones. Cree un BLOG y suba dicha información al mismo.

XII. RESÚMEN
 Programación de los puertos como Entradas y/o salidas
 Prueba y uso de buzzer, pulsadores y leds
 Simulación paso a paso en PROTEUS

XIII. PROXIMO LABORATORIO:


 Fase 3: Display de 7 segmentos y Temporizadores.

XIV. BIBLIOGRAFIA Y WEBGRAFIA RECOMENDADA


 Marin, Francisco (2007) Diseño basado en microcontroladores. Málaga: Universidad de
Málaga. (004.16/M26D)
 Pereira, Fabio (2007) Microcontroladores PIC. Sao Paulo:s.n. (005.13/P43)
 José María Angulo Usátegui [y otros]. (2007) Electrónica digital y microprogramable
.Madrid: Thomson. (621.381/A37/I)