# Multiplexacion Pic16F84a displays



## Vitor (Sep 23, 2006)

Necesito ordenar tres datos ascendentemente utilizando un pic16f84a y luego mostralos en los displays en un módulo y para eso necesito multiplexacion, si alguien pudiese ayudarme le agradeceria muchisimo


----------



## maunix (Sep 25, 2006)

Vitor dijo:
			
		

> Porfavor necesito una ayudita, necesito ordenar tres datos ascendentemente utilizando un
> pic16f84a y luego mostralos en los displays en un módulo y para eso necesito multiplexacion, si alguien pudiese ayudarme le agradeceria muchisimo



¿De qué tipo de displays estamos hablando? LCD? 7 segmentos? otro?

¿Qué conocimiento tienes de los PICs?

¿En qué lenguaje programas?


----------



## Vitor (Sep 25, 2006)

Necesito programarlo en MPLAB a un display de 7 segmentos, la verdad tengo la base de como programar el dispositivo pero me da duro el tema de la multiplexacion para mostrarlo, 
6. TENIENDO DATO1, DATO2 Y DATO 3. (EN REGISTROS) ORDENARLOS DE FORMA ASCENDENTE . 
A)  MOSTRARLOS POR PUERTO B EN 3 DISPLAYS DE 7 SEGMENTOS. 
B) MOSTRAR POR PUERTO B CON RETARDOS

son 6 puntos de mostrar, por displays, por leds y demás, pero no fui capaz con el tema de multiplexación  y he buscado acerca del tema pero no he podido despegar,

si me podes ayudar Gracias


----------



## maunix (Sep 25, 2006)

Vitor dijo:
			
		

> Necesito programarlo en MPLAB a un display de 7 segmentos, la verdad tengo la base de como programar el dispositivo pero me da duro el tema de la multiplexacion para mostrarlo,
> 6. TENIENDO DATO1, DATO2 Y DATO 3. (EN REGISTROS) ORDENARLOS DE FORMA ASCENDENTE .
> A)  MOSTRARLOS POR PUERTO B EN 3 DISPLAYS DE 7 SEGMENTOS.
> B) MOSTRAR POR PUERTO B CON RETARDOS
> ...



Vitor, yo te puedo 'guiar' pero no te haré la tarea.  

Si quieres aprender estoy dispuesto a indicarte el camino que a mí me parece de acuerdo a mis años de experiencia, pero no estoy de acuerdo en resolver tareas.

Intenta leer algo del datasheet, algo del assembler, haz algún bosquejo de código y tendrás mi ayuda para mostrarte alguna opción de resolución de tu problema.

El camino para aprender es hacer las cosas tu mismo y si te guía alguien que sabe 'antes' que tu mejor! pero el esfuerzo lo tienes que poner tu.

Saludos


----------



## ben99 (Sep 25, 2006)

caballero como dice maunix aqui te doy algo para que estudies.
anodo comun display





visu		movf	unidades,w
		call	display
		movwf	portb
		bcf	porta,0		; encendemos display unidades    
		bsf	porta,1
                                bsf            porta,2		; apagamos display decenas,centenas
		call	retardo

		movf	decenas,w
		call	display
		movwf	portb
		bcf	porta,1
		bsf	porta,0
                                bsf	porta,2
		call	retardo

	                movf	centenas,w
		call	display
		movwf	portb

		bcf	porta,2
		bsf	porta,0
                                bsf	porta,1
                                call	retardo

		clrf	portb
                                bsf	porta,2
		bsf	porta,0
                                bsf	porta,1
                                return


----------



## eidtech (Sep 25, 2006)

Aqui un esquematico que te puede servir... en PB1, PB2 y PB3 tienes bits de control con lo cual con un '1' activas el display... ya que tienes el display activado le mandes el dato, esperas un pequeno tiempo, activas otro display y le mandas dato, activas el siguiente, y comienzas nuevamente... 

P.D. Se me olvidaron las resistencias de los segmentos... (330, 470 Ohms, entre la salida del 74LS48 y el Display de 7 Segmentos, una resistencia por segmento no lo olvides)


----------



## ben99 (Sep 25, 2006)

bueno esos bits los puedes mesclar con la secuencia que hay arriba en el antepenultimo mensaje.

que mas con ese plano.

saludos


----------



## Vitor (Oct 4, 2006)

Gracias a todos por la ayuda,  ya lo resolvi de la siguiente manera, como en el display solo necesito ABCD entonces utilizo los ultimos 4 bits del puerto para enviar el dato, y con los primeros cuatro acciono los displays que quiero con un 1 como lo mencionaron. Asi muestra los 3 datos al tiempo en forma ascendente, claro despues de haberlos ordenado.


MOSTRAR
	MOVF 	D1,W
	XORLW 	B'0001 0000'
	MOVWF 	PORTB

	MOVF 	D2,W
	XORLW 	B'0010 0000'	
	MOVWF 	PORTB

	MOVF 	D3,W
	XORLW 	B'0100 0000'	
	MOVWF 	PORTB
	CALL 	MOSTRAR

GRACIAS


----------



## neto9 (May 13, 2010)

hola que tal yo tambien necesito ayuda me pidieron hacer uno que cuente hasta el 0-9999
pero como seria el programa si lo tiene me lo podrian pasar porfavor gracias


----------



## marquizto (May 13, 2010)

jajaja trata de exponer tu idea y te ayudamos, hacerte el trabajo no es el objetivo de este foro.


----------



## neto9 (May 13, 2010)

#use delay (clock=4000000)
#byte porta=0x05
#byte portb=0x06
#bit ra0=0x05.0
#bit ra1=0x05.1
#bit ra2=0x05.2
#bit ra3=0x05.3

void main()
{
 int i=0,j=0,m=0,k=0;
 set_tris_a(0);
 set_tris_b(0);
 portb=0;
 while(1)
 {
  porta=0;
  for(i=0;i<10;i++)
  {
   for(j=0;j<10;j++)
   {
    for(k=0;k<10;k++)
    {
     for(m=0;m<10;m++)
     {
      ra0=1;
      portb=i;
      delay_ms(50);
      ra0=0;
      ra1=1;
      portb=j;
      delay_ms(50);
      ra1=0;
      ra2=1;
      portb=k;
      delay_ms(50);
      ra2=0;
      ra3=1;
      portb=m;
      delay_ms(50);
      ra3=0;
     }
    }
   }
  }
  portb=0;
  porta=255;
  delay_ms(1000);
 } 
}

 lo que pienso es conectar el pic 16f84 a un 7447 de la salida del pic supongo que tiene que estar codificado para que lo decodifique el 7447 y lo represente en los 7 segmentos que le faltaria al programa


----------



## juanchi23 (Abr 17, 2012)

hola gente del foro... he tenido unos problemas con este tema de multiplexacion de display con pic...entiendo todo sobre esto, programacion de pics y eso , asi que deberia ser sencillo para mi , pero nose q pasa...estoy realizando un contador de 0 - 999 y los muestro en display usando multiplexacion el detalle es que cundo uso un tiempo mayor (100 ms o mas) los numeros salen en su orden normal pero obviamente se nota el papadeo, si le disminuyo el tiempo me sale el problema que ya los numeros se desfasan y no visualizo lo que quiero... nose si es cuestion del proteus que no simula bien o esq usando display individuales no se visualiza biien por que cuando uso el modulo de display juentos si se visualiza bien.. el detalle esuq necesito visualizarlo en display indiiduales porque la idea es hacer esto pero con display de leds mas grandes... como un panel de leds...gracias por su ayuda a ver si alguien me corrige si estoy equivocado en algo...adjunto la simulacion y el codigo en pbp.


----------



## MrCarlos (Abr 17, 2012)

Hola juanchi23

El problema es del ISIS de Proteus.
Cuando utilizas Display’s individuales más los transistores más las resistencias de Base le toma más tiempo “atender“ cada dispositivo.
En cambio cuando utilizas un módulo con Display’s de 7 segmentos éste lo toma menos tiempo el “atenderlo”.

Ármalo en la realidad con Display’s individuales y verás que funciona como lo esperas.

saludos
a sus ordenes


----------



## juanchi23 (Abr 18, 2012)

Gracias MrCarlo... precisamente en eso estoy armando todo en un protoboard para sacarme la duda... sospecho que puede ser la simulacion en proteus... lo pruebo y les aviso q tal va


----------

