martes, 19 de marzo de 2019

LABORATORIO NRO 3

 laboratorio 3


Programación con Display de siete Segmentos 



competencia especifica de la sesión 

  • conocer el display de 7 segmentos y su funcionamiento.
  • conocer las técnicas de multiplexacion .
  • programar HMI para juego de encestar. 
materiales y equipos 
  • CCS compiler instalado.
  • entrenador de pics.
  • PIC 16F877A.
  • pc con software de simulacion.
marco teorico.

display de siete segmentos 

El display 7 segmentos es un component electrónico muy utilizado para representar visualmente números y letras, es de gran utilidad dado su simpleza para implementar en cualquier proyecto electrónico.

Está compuesto por 7 dispositivos lumínicos (LED) que forman un "8", de esta forma controlando el encendido y el apagado de cada LED, podremos representar el número o letra que necesitamos.



Existen dos tipos de displays de 7 segmentos, su prinicipal diferencia es la conexión que debemos implementar para encenderlos, estos dos tipos se conocen como Ánodo común y Cátodo común.

CÁTODO COMÚN.


El display Cátodo común tiene todos los ánodos de los diodos LED unidos y conectados a tierra. Para activar un segmento de estos hay que poner el ánodo del segmento a encender a Vcc (tensión de la fuente) a través de una resistencia para limitar el paso de la corriente.




ÁNODO COMÚN.

En el display Ánodo común, todos los ánodos de los diodos LED unidos y conectados a la fuente de alimentación. En este caso para activar cualquier elemento hay que poner el cátodo del elemento a tierra a través de una resistencia para limitar la corriente que pasa por el elemento.



DISPLAY 7 SEGMENTOS CONECTADO AL MICROCONTROLADOR



VARIABLE .

Una variable es una posición de memoria, a la que se le asigna un nombre, y que sirve para guardar un valor.

Tipos de datos:

-Las variables las hemos de definir según el tipo de datos que van a contener. 

-Los tipos de datos básicos son:

  •  booleano,
  •  entero, 
  • real 
-Los tipos de datos los definimos como:
  • int: Permite guardar un valor entero entre el rango de  [-2^15] y [2^15].
  • float: Permite guardar números reales dentro de un intervalo y con precisión decimal.
  • double: Permite guardar números reales con el doble del intervalo del dato “float”.
  • char: Permite  almacenar valores de la tabla ASCII. (Estos valos pueden ser letras, numeros y signos);
  •  bool: Permite guardar un valor booleano como cierto (true) o falso (false).
EVIDENCIA DE LA TAREA EN EL LABORATORIO.


1.Se tiene un sistema con 2pulsadores (D0, D1) de entrada y 3 displays de salida, además de un zumbador en el pin E1. Programe según lo siguiente:

a.Al empezar el programa, se debe mostrar el número 500.b.Al presionar D0, el número mostrado se debe incrementar en 5 unidades, además debe zonar un pitido.c.

Al presionar D1, el número mostrado debe disminuir 5 unidades pero de de 1 en 1 cada segundo.

Si el número llega a ser mayor a 600, debe sonar 3 pitidos.

codigo de la programacion.

#use delay (clock=20M)           // Indicamos que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles
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;
Int i,j;
/******************************************************/
// 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 (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(1);            // "Congela el tiempo" durante 1ms 
      }
   }
   /*************************************************/
   // FUNCION PRINCIPAL VOID (MAIN)
   /************************************************/
   void main (){
      dato=500;
      descomp_entero(dato);
      visualizar();
      while(1)
{
         IF(!input(PIN_D0))
{
            dato = dato +5;
            descomp_entero(dato);
visualizar();
BIP();
            delay_ms(300);
            }
IF (!input(PIN_D1))
{
FOR(i=0;i<=4;++i)
{
dato= dato - 1;
descomp_entero(dato);
visualizar();
FOR (j=0;j<=100;++j)
{
visualizar();
delay_ms(1);
}
}
}
IF (dato>600)
{
BIP();
delay_ms(200);
BIP();
delay_ms(200);
BIP();
delay_ms(1000);
}
visualizar();
}
}




Guardado del archivo programado (comf) para su ejecución en proteus.



SIMULACIÓN EN PROTEUS 


 cuando empieza en 500.

cuando sube en 5 unidades




cuando empieza ha bajar en una unidad


cuando supera los 600

FUNCIONAMIENTO 


OBSERVACIONES 


  • se observo que para poder hacer el silbido (zumbador ) hemos utilizado el comando BIP() con su tiempo respectivo esta tiene que estar en sincronía .
  •  se observo que para poderlo utilizarlo en programa en proteus tenemos que tener el archivo comf ya que sin ella no podriamos simular.  
  • observamos que para ver en el display los numeros teniamos que poner el comando visualizar en la programacion ,en el proteus teníamos que sacar una ventana adicional para ver los numeros esto lo podemos apreciar en el video.    
CONCLUSIONES 

  • concluimos que hemos sincronizado tres silbidos cuando el numero superara los 600 esto se hiso usando el comando IF  durante un cierto tiempo.
  • concluimos con exito el problema planteado en el salón ,ademas hemos hecho el uso de un FOR que se basa el logicas secuenciales  dentro de un comando IF.   
  •  concluiomes que para saber encerder los display tenemos que saber el funcionamiento en el control de encentido distinto para cada display