Autor Tema: Multiplexación de display de 7 segmentos - problema  (Leído 8861 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Multiplexación de display de 7 segmentos - problema
« en: 10 de Marzo de 2009, 20:32:57 »
Hola

Estoy probando la multiplexación de 2 displays de 7 segmentos con un pic 16F84A. Funciona correctamente, pero, como os muestro en el video que viene a continuación, en cada uno de los display hay como un remanente del otro display. Los dos displays son de anodo común: Los ánodos van al pin RA3 y RA4 respectivamente y los cátodos a los pines de RB con resistencias de 330 ohm. No entiendo por qué se solapan tenuemente los números de un display en el otro:


Este es el código fuente en CCS C:

Código: [Seleccionar]
int8 sacaNumero(int8 numero)
{
   int8 valores[] = {
   0b10001000, // 0
   0b11101011, // 1
   0b01001100, // 2
   0b01001001, // 3
   0b00101011, // 4
   0b00011001, // 5
   0b00011000, // 6
   0b11001011, // 7
   0b00001000, // 8
   0b00001001 // 9
   };
   return valores[numero];
}

void main()
{

   int8 contador = 0;
   int8 numero = 0;

   //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

   // TODO: USER CODE!!
   set_tris_a(0);
   set_tris_b(0);
   

   while(1)
   {
      output_low(PIN_A3);
      output_high(PIN_A2);
      output_b(sacaNumero(numero / 10));
      delay_ms(5);
      output_low(PIN_A2);
      output_high(PIN_A3);
      output_b(sacaNumero(numero % 10));
      delay_ms(5);
      ++contador;
      if(contador == 50)
      {
         contador = 0;
         numero++;
         if(numero == 100)
         {
            numero = 0;
         }
      }
   }
}


El programa muestra los números del 0 al 99. Cada cifra del número se muestra unos 5 milisegundos en su display correspodiente (así no hay parpadeo). Y cada medio segundo se cambia el número a mostrar.
« Última modificación: 10 de Marzo de 2009, 20:35:49 por sistemasorp »

Desconectado juansi

  • PIC16
  • ***
  • Mensajes: 102
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #1 en: 10 de Marzo de 2009, 21:27:49 »
prueba a aumentar esos 5 milisegundos con 150 milisegundos yo  creo que funcionara de todas formas yo lo voya a probar mañana y te contesto como me fue
Las mujeres quieren "SOLUCIONES", y los hombres lo mismo pero escrito al reves.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #2 en: 10 de Marzo de 2009, 22:13:40 »
Antes de activar un display, apaga todos los segmentos. Luego activa el display q toque, mostra el numero, y volve a apagar todo.
Seria algo asi:
while(1)
   {
      output_low(PIN_A3);
      output_b(0);
      output_high(PIN_A2);
      output_b(sacaNumero(numero / 10));
      delay_ms(5);
      output_low(PIN_A2);
      output_b(0);
      output_high(PIN_A3);
      output_b(sacaNumero(numero % 10));
      delay_ms(5);
      ++contador;
......

saludos!
« Última modificación: 10 de Marzo de 2009, 23:03:15 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #3 en: 11 de Marzo de 2009, 00:39:07 »
Hola.

Revisa esto: 7 Segmentos con int Timer0 te puede ser de utilidad
El papel lo aguanta todo

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #4 en: 11 de Marzo de 2009, 04:33:54 »
Gera: Tu solución me ha ido a las mil maravillas. Solo que en vez de poner 0 en el puerto b he puesto 0xff (ya que al ser ánodo común hace que esten apagados todos los led del segmento). Pero con eso ya no se ve ningún solapamiento.

MLO: Ese es el siguiente paso que tenía en mente. Ya que al ser un termómetro lo que quiero construir, no quería que interferiese el display con la toma de temperatura.

juansi: Si pongo 15 milisegundos o más, se nota el parpadeo de los displays.

Gracioas a todos. Un saludo.


Desconectado juansi

  • PIC16
  • ***
  • Mensajes: 102
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #5 en: 11 de Marzo de 2009, 13:13:28 »
Gera tiene razon, seguramente tu codigo muestra el numero y luego cambia el display, de ese modo durante cuatro ciclos de reloj se monta el numero en el otro display
Las mujeres quieren "SOLUCIONES", y los hombres lo mismo pero escrito al reves.

Desconectado juansi

  • PIC16
  • ***
  • Mensajes: 102
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #6 en: 11 de Marzo de 2009, 18:23:35 »
tienes razon con 15 mili segundos parpadea lo he simulado fisicamente, y con 5 ml es lo suyo
Las mujeres quieren "SOLUCIONES", y los hombres lo mismo pero escrito al reves.

Desconectado Vash

  • PIC10
  • *
  • Mensajes: 9
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #7 en: 29 de Julio de 2009, 23:56:15 »
Hola, estoy haciendo un contador de eventos externos de 0 - 9 el problema que tengo, bueno que casi siempre tengo  :mrgreen: es que no me funciona una vez armado. Les adjunto el codigo, la simulacion en proteus y el video.

En la entrada de RA0 va un fototransistor y un led infrarojo, los cuales siempre envian un alto y al inteferir un objeto entre ellos mandan un voltaje bajo, esto ya lo comprobe con el multimetro, siempre mandan 3.5 volts y con un objeto mandan 0.15 volts, entonces esta parte si funciona, la verdad no tengo idea de que es lo que esta mal, espero me puedan ayudar gracias.
El display es Catodo comun.

Código: [Seleccionar]
#include <16F873A.h>
#include <math.h>
#fuses nowdt //No Watch Dog Timer
#fuses xt
#fuses noput //No Power Up Timer
#fuses noprotect //Code not protected from reading
#fuses nobrownout //No brownout reset
#fuses nolvp //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#fuses nocpd //No EE protection
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
byte CONST DISPLAY[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7f,0x6f};

void main(void){
   int ban=0;
   char iU=0;
   set_tris_A(0x01);
   set_tris_B(0x00);
   do{
      if(input(PIN_A0)==1){
         iU++;
         if(ban==0){
            iU--;
            ban++;
         }
         if(iU>9)
            iU=0;
         while(input(PIN_A0)==1){
            output_B(DISPLAY[iU]);
         }
      }
   }while(true);
}


gracias.
Nos vemos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Multiplexación de display de 7 segmentos - problema
« Respuesta #8 en: 30 de Julio de 2009, 00:41:02 »
hola Vash, te recomiendo que le coloques un inversor a la salida del fototransistor, porque los niveles de tensión y correinte quizá no sean los adecuados para el micro para que lo tome como uno o cero, mejor si el inversor es un smith trigger, son los 74xx14 creo.

O podría ir algún operacional, pero es mucho rollo, mejor el inversor.

Si tu código esta bien, tendría q funcionar

saludos.
.


 

anything