TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PabloFiscella en 26 de Diciembre de 2004, 12:45:00

Título: Multiplexar display de 7seg.
Publicado por: PabloFiscella en 26 de Diciembre de 2004, 12:45:00
Hola a todos:

Me estoy volviendo loco con algo que seguramente es demasiado sencillo pero no me sale.

Intento multiplexar 3 display de 7 seg.
El programa solo muestra el numero 123
Pruebo el programa con el proteus y parpadea demasiado.

Dejo el codigo por si se dan cuenta cual es el problema
Saludos.
Pablo

#include <16F874.h>

#use delay (clock=4096000)
#fuses XT,NOWDT

void main(void) {
   for(;Giño {
      set_tris_b(0x00);

      output_b(0b00010001);      "Los ultimos cuatro bits son para multiplexar
      delay_ms(1);
      output_b(0b00010000);      

      output_b(0b00100010);
      delay_ms(1);
      output_b(0b00100000);

      output_b(0b00110100);
      delay_ms(1);
      output_b(0b00110000);
   }
}
Título: RE: Multiplexar display de 7seg.
Publicado por: Sispic en 26 de Diciembre de 2004, 13:50:00
output_b(0b00010001); "Los ultimos cuatro bits son para multiplexar
delay_ms(1);

output_b(0b00100010);
delay_ms(1);

output_b(0b00110100);
delay_ms(1);


Asi diria es mas correcto , tambien provar con otros delay .
y con un simulador esto es dificil que coincida con la realidad .

buen fin de año
Título: RE: Multiplexar display de 7seg.
Publicado por: Modulay en 26 de Diciembre de 2004, 14:13:00
Si haces la simulación paso a paso deberías poder ver los cambios con claridad
Título: RE: Multiplexar display de 7seg.
Publicado por: pocher en 27 de Diciembre de 2004, 07:28:00
Estoy con Sispic: después de mostrar un número, no muestres el 0.

Está claro que usas un decodificador BCD/7segmentos. Si te sobran pines en el PIC podrías ahorrarte el deco y encender los segmentos directamente.

En definitiva, con la corrección de Sispic si lo montas físicamente lo tienes que ver bien.

Si en la simulación quieres ver con claridad los números que tocan a cada display, pon un delay de 50ms y los verás. Con 1ms en un mismo display ves pasar un desmadre de números, aunque en la realidad funcione bien.

Un saludo
Título: RE: Multiplexar display de 7seg.
Publicado por: PabloFiscella en 27 de Diciembre de 2004, 09:28:00
Ok.
Se puede ver en tiempo real una simulacion con proteus para ver como se ve en realidad?

Muchas gracias y felicidades para todos.
Saludos.
Pablo
Título: RE: Multiplexar display de 7seg.
Publicado por: pocher en 27 de Diciembre de 2004, 10:20:00
Respecto a conseguir con este ejemplo en particular que se queden quietos los numeritos en los displays, no se puede. Sin embargo recuerdo que en otros proyectos sí que conseguía ver los números sin parpadear, cuestión de jugar con los delay_ms.

Respecto a si PROTEUS es capaz de simular en tiempo real, hay un marcador al final de la pantalla que mide segundos. Haz un reloj que funcione perfectamente, sin retrasos, deja funcionando el PROTEUS durante un largo periodo de tiempo (1h por ejemplo), luego comprueba la hora de tu reloj con el tiempo que ha transcurrido en el "reloj" del PROTEUS: deben coincidir.

Un saludo
Título: RE: Multiplexar display de 7seg.
Publicado por: PabloFiscella en 27 de Diciembre de 2004, 11:40:00
Ok, muchas gracias.

Saludos.
Pablo
Título: RE: Multiplexar display de 7seg.
Publicado por: odukec en 28 de Diciembre de 2004, 08:03:00
Hola..

este sirve para multiplexar tres displays, sin usar un decoa la salida sino directamente a los displays, usa la interrupcion del tmr0, espero sirva:

Codigo:

int conv (int);

#define ON_TR1 output_high(PIN_B5)
#define OFF_TR1 output_low(PIN_B5)
#define ON_TR2 output_high(PIN_B6)
#define OFF_TR2 output_low(PIN_B6)
#define ON_TR3 output_high(PIN_B7)
#define OFF_TR3 output_low(PIN_B7)

int otr,otr1,dig1,dig2,dig3;
short flag=0;
#byte port_c = 7
#int_RTCC
visualizacion(){
         if(otr==2){                   //Primer display
            ON_TR1;                   //habilita el primer transistor
            port_c=dig1;            //pone el dato en el display
            delay_us(300);        //un pequeño delay para que salga bien la visualizacion
         }else OFF_TR1;
         if(otr==3){
            ON_TR2;
            port_c=dig2+128;
            delay_us(300);
         }else OFF_TR2;
         if(otr==4){
            ON_TR3;
            port_c=dig3;
            delay_us(300);
            otr=0;
         }else OFF_TR3;
         otr++;
}

int conv(int x){          // para decodificar el numero de BCD a 7 segmentos

   switch (x){
      case 0:  return(192);
      case 1:  return(249);
      case 2:  return(164);
      case 3:  return(176);
      case 4:  return(153);
      case 5:  return(146);
      case 6:  return(131);
      case 7:  return(248);
      case 8:  return(128);
      case 9:  return(152);
      default: break;
   }
}


Título: Re: Multiplexar display de 7seg.
Publicado por: finiestaf en 13 de Diciembre de 2012, 15:35:18
Buenas estoy bastante verde en esto, alguien me podria poner un ejemplo de como aplicar el codigo anterior para que tome el valor de una entrada analogica?
Título: Re: Multiplexar display de 7seg.
Publicado por: willynovi en 13 de Diciembre de 2012, 22:14:35
Supongo que lo que quieres hacer es sensar el valor de una entrada analógica y mostrar el valor en unos tres digitos.

Te recomiendo que use un poco la búsqueda del foro y quizas encuentres algún ejemplo.

Podes usar como palabra clave "voltimetro" o algo similar.
Título: Re: Multiplexar display de 7seg.
Publicado por: MLO__ en 14 de Diciembre de 2012, 11:03:09
aqui (http://www.todopic.com.ar/foros/index.php?topic=21738.0) hay algo