Electronica, Microcontroladores y Psicología
  Contador Multiplexado
 



Hola a todos…. Después de algún tiempo de ausencia por fin tengo tiempo para actualizar la página. Esta vez les traigo un contador multiplexado. Lo que hace básicamente es contar e ir mostrando el estado de la cuenta en dos display 7 segmentos, lo que le permite contar desde 00 hasta 99. Lo diferente de este contador es que solamente utilizaremos PORTB para mostrar los datos.

 

Multiplexar es una buena forma de ahorrar puertos y potencializar las aplicaciones con PIC. Lo que se hace es activar y desactivar los display a través de unos transistores que serán controlados por el PORTA, es decir, los display nunca estarán encendidos al mismo tiempo; sin embargo esto se hará tan rápido que parecerá que están ambos display encendidos al mismo tiempo mostrando datos diferentes.

 

Ahora sin más preámbulo ahí les va el código, como es costumbre lo único que deben hacer es copiarlo, compilarlo y simularlo.


#include <16f84.h>
#use delay (clock=4000000)
#byte portb=6
#bit T_unidad=5.1                  //Transistor de display unidad
#bit T_decena=5.0                 //Transistor de display decena
main()
{
unsigned int const disp[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,};
int x=0,unidad=0,decena=0;
long contador=0;
set_tris_a(0x00);                //Puerto A como salidas
set_tris_b(0x00);                //Puerto B como salidas
T_unidad=1;                      //Se prenden los dos displays
T_decena=1;                      //y muestran cero.
while(1)                             //Entra a ciclo infinito
{
portb=disp[unidad];         //Se muestra el valor de unidad
delay_ms(10);                 //Retardo de 10mS
T_unidad=0;                  //Apaga el display de unidad
T_decena=1;                  //Prende el display de decena
portb=disp[decena];        //Muestra el valor de decena
delay_ms(10);                //Retardo de 10mS
T_decena=0;                 //Apaga el display de decena
T_unidad=1;                 //Prende display de unidad
x++;                            //Incrementa X para controlar el tiempo
                                    //De conteo
if(x==30)                     //Si han pasado 600mS mas o menos
{
unidad++;                   //Aumenta unidad
 if(unidad==10)           //Si unidad es = 10
 {
 unidad=0;                 //Unidad=0
 decena++;                //Decena se incrementa en 1
 if(decena==10)         //Si decena es = 10
{ unidad=0;              //Unidad = 0 
 decena=0;               //Decena = 0
}
 }
x=0;                       //X vuelve a 0 para poder contar
}                           //De nuevo
}
}

 

 

Ahora una imagen de la simulación:

 

Con algunas pequeñas modificaciones en el software pueden hacer que cuente eventos externos. Ese trabajo se los dejo a UDS, de sugerencia les digo que pueden utilizar el TMR0 configurado como contador.

Hasta pronto y buena suerte...

 

 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis