jueves, 28 de marzo de 2019

Laboratorio N° 04


MICROCONTROLADORES

Laboratorio N° 04

JUEGO DE TIRO A CANASTA CON
 INDICAR DE PUNTOS

1. CAPACIDAD TERMINA
* 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.

2. COMPETENCIA ESPECIFICA DE LA SESIÓN
* Conocer el uso de las subrutinas.
* Conocer las técnicas de elaboración de programas a través de algoritmos.
* Programación de un proyecto real.

2. MARCO TEORICO
     Pseudocódigo
El pseudocódigo (o falso lenguaje) es comúnmente utilizado por los programadores para omitir secciones de código o para dar una explicación del paradigma que tomó el mismo programador para hacer sus códigos, esto quiere decir que el pseudocódigo no es programable sino facilita la programación.
El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se utilizará para la codificación del mismo.
El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas en inglés (similares a sus homónimos en los lenguajes de programación), tales como star,begin, end, stop, if-then-else, while, repeat-until….etc

Es un lenguaje de especificación de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de programación) relativamente fácil.
El pseudocódigo nació como un lenguaje similar al inglés y era un medio representar básicamente las estructuras de control de programación estructurada. Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación. Cabe señalar que el pseudocódigo no puede ser ejecutado por una computadora.

3. EVIDENCIAS
a) Programación
#include <16f877a.h> // Incluimos archivo con PIC a utilizar
#use delay (clock=20M) // Indicamos que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT // Configuración básica de los fusibles
int variable = 0;
int tabBCD[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,
 0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
int delay=5; // Completar con valor de retardo adecuado en ms
int16 dato=0; // Declaramos una variable ENTERA de 16 bits
int16 unidades=0, decenas=0, centenas=0;
/******************************************************/
// Funcion que descompone un número Entero de 4 cifras
/******************************************************/
void descomp_entero(int16 valor)
{
 centenas = (int16) valor / 100; // 1er Dígito o Centenas
 valor -= centenas * 100; // y se lo resto al valor
 decenas = (int16) valor / 10; // 2do Dígito o Decenas
 valor -= decenas * 10; // y también se lo resto
 unidades = (int16) valor; // y por último solo me quedan las unidades
}
/*************************************************/
// Funcion para displayar en forma multiplexada
/************************************************/
void visualizar(void)
{
output_b(tabBCD[centenas]);
 output_a(0b00001000);
 delay_ms(delay);

 output_b(tabBCD[decenas]);
 output_a(0b00000100);
 delay_ms(delay);

 output_b(tabBCD[unidades]);
 output_a(0b00000010);
 delay_ms(delay);
}
/*************************************************/
// Funcion para emitir un pitido
/************************************************/
void BIP()
{
 FOR (int i= 0;i<=100;++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(01); // "Congela el tiempo" durante 1ms
 }
}

void SUM()
{
 FOR (int a= 0;a<=100;++a)
 {
 output_high(PIN_A1); // Pone a "1" el pin E1 (envía 5 voltios)
 delay_ms(1); // "Congela el tiempo" durante 1ms
 output_low(PIN_A1); // Pone a "0" el pin E1
 delay_ms(01); // "Congela el tiempo" durante 1ms
 }
 FOR (int s= 0;s<=100;++s)
 {
 output_high(PIN_A2); // Pone a "1" el pin E1 (envía 5 voltios)
 delay_ms(1); // "Congela el tiempo" durante 1ms
 output_low(PIN_A2); // Pone a "0" el pin E1
 delay_ms(01); // "Congela el tiempo" durante 1ms
 }
 FOR (int d= 0;d<=100;++d)
 {
 output_high(PIN_A3); // Pone a "1" el pin E1 (envía 5 voltios)
 delay_ms(1); // "Congela el tiempo" durante 1ms
 output_low(PIN_A3); // Pone a "0" el pin E1
 delay_ms(01); // "Congela el tiempo" durante 1ms
 }
}

/*************************************************/
// FUNCION PRINCIPAL VOID (MAIN)
/************************************************/
void main ()
{
 dato = 000; // ingrese numero inicial a visualizar
 descomp_entero(dato);
 visualizar(); // mostramos el valor de "dato" en displays
 while(1)
 {
 IF (!input(PIN_D0)) // SI INGRESA MONEDA
 {
 BIP();
 delay_ms(500);
 BIP();
 delay_ms(500);
 }
 visualizar(); // mostramos el valor de "dato" en displays

 IF (!input(PIN_D1) && (variable == 0)) // si ENCESTA CANASTA
 {
  dato = dato + 7; 
  descomp_entero(dato); 
  BIP();
  delay_ms(500);
  output_high(PIN_C0);
  variable = 1;
 }
  visualizar(); 
 IF (!input(PIN_D1) && (variable == 1)) // si ENCESTA CANASTA
 {
 dato = dato + 7; 
 descomp_entero(dato); 
 BIP();
 delay_ms(500);
 output_high(PIN_C1);
 variable = 2;
 }
 visualizar(); 

 IF (!input(PIN_D1) && (variable == 2)) // si ENCESTA CANASTA
 {
 dato = dato + 7; 
 descomp_entero(dato); 
 BIP();
 delay_ms(500);
 output_high(PIN_C2);
 variable = 3;
 }
 visualizar(); 

 IF (!input(PIN_D1) && (variable == 3)) // si ENCESTA CANASTA
 {
 dato = dato + 7; 
 descomp_entero(dato); 
 BIP();
 delay_ms(500);
 output_high(PIN_C3);
 variable = 4;
 }
 visualizar(); 

 IF (!input(PIN_D1) && (variable == 4)) // si ENCESTA CANASTA
 {
 dato = dato + 7; 
 descomp_entero(dato); 
 BIP();
 delay_ms(500);
 output_high(PIN_C4);
 variable = 0;
 visualizar(); 

 IF (!input(PIN_D1) && dato == 35)
 { 
 BIP();
 delay_ms(100);
 SUM();
 delay_ms(100);
 BIP();
 delay_ms(100);
 SUM();
 delay_ms(100);
 BIP();
 delay_ms(100);
 SUM();
 delay_ms(100);
 dato = 000;
 visualizar(); 
 }
 }
 visualizar();  
 } 
}
  

4. OBSERVACIONES
* Al momento de realizar la programación, se tuvo que recurrir a teoría de clases anteriores para poder lograr la tarea dejada en laboratorio.
* Cuando se quiso realizar las pruebas correspondientes, la computadora no reconocia el entrenador, el cual retraso las pruebas.
* Al ver que no se podia trabajar con el entrenador se opto por usa el software de simuilacion "PROTEUS".

5. CONCLUCIONES
* Se logro realizar la programación con métodos  usados en clases anteriores.
* concluyo de que el uso del entrenador no están indispensable, pero si facilita mejor su simulación y su trabajo.

6. INTEGRANTES
* Aldude Aldudi, Rosmel



No hay comentarios:

Publicar un comentario