Multiplexación Pines PIC18F4550

Hola a todos, estoy trabajando sobre un PIC18F4550 para el desarrollo de un marcador para el tenis de mesa.

La primera cuestión es que los números los quiero hacer con tiras de leds y manejarlos en modo display lo que significa que por cada dígito son 7 pines los que tengo que utilizar.

El problema es que cuando hago la suma de todos los pines que me son necesarios me salen mínimo cerca de 45 pines por lo que el 18F4550 con sus 35 pines de I/O se queda pequeño, por lo cual mi pregunta era si existe algún tipo de circuito integrado que permita una multiplexación 3 a 7 o 3 a 8 para que sólo utilizando 3 pines pueda manejar 7 salidas distintas y no tener que usar un número de pines tan elevado.

La segunda cuestión es acerca de proteus y si saben si el valor de POWER viene siempre por defecto con un valor de 5 V predeterminado ya que sólo me permite simular con 2 o 3 leds en serie como máximo y la verdad no se donde se encuentra el problema.

Gracias de antemano.
 
Te comento lo que conozco yo, mi solucion a esos casos es multiplexar con el mismo microcontrolador. Usas 7 pines +1 pin adicional para cada display. Ejemplo si tenes que manejar 4 displays serian 7 pines +4, en todal 11 pines.

No si si es lo que estas buscando... poruqe no se lo que son las tiras de leds :LOL:. Este es el codigo que uso, en C.

Código:
const unsigned short DIGITOS[] =
{
0x3F, //Código del dígito 0
0x06, //Código del dígito 1
0x5B, //Código del dígito 2
0x4F, //Código del dígito 3
0x66, //Código del dígito 4
0x6D, //Código del dígito 5
0x7D, //Código del dígito 6
0x07, //Código del dígito 7
0x7F, //Código del dígito 8
0x6F, //Código del dígito 9
};

void VerDisplay( int N )
{
unsigned short U; //Variable para guardar las unidades.
unsigned short D; //Variable para guardar las decenas.
unsigned short C; //Variable para guardar las centenas.

C = N/100; //Cálculo de las centenas.
D = (N-((N/100)*100))/10;; //Cálculo de las decenas.
U = N-((N/10)*10); //Cálculo de las unidades.
PORTD = DIGITOS[U]; //Visualiza las unidades.
PORTB.F3=1; //Activa en alto el primer display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0;//Desactiva todos los displays.
PORTD = DIGITOS[D]; //Visualiza las decenas.
PORTB.F4=1; //Activa en alto el segundo display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0; //Desactiva todos los displays.
PORTD = DIGITOS[C]; //Visualiza las centenas.
PORTB.F5=1; //Activa en alto el tercer display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0; //Desactiva todos los displays.

}

Si es lo que buscas y tenes dudas puedo explicarlo un poco mas.



Con respecto al proteus, no se bien lo que queres hacer... queres aumentar el valor de 5v? Si esto es lo que queres vas a Design->Configure power rails.

Sinceramente te digo, no me acuerdo como crear las nuevas rails, pero googlea "proteus configure power rails" y seguro encotrnas un tuto.
 
Última edición:
Hola carri6, una solución muy viable y económica que utilizo cuando quiero hacer un expansor de un puerto paralelo de 8 bits es por medio del integrado 74HC595 que con solo 3 lineas (comunicacion serial) puedo manejar los puertos de 8 bits que desee, se utiliza un 74HC595 por cada puerto de 8 bits y van conectados en cascada, yo he conectado hasta 8 chips sin ningún problema.

Para tu caso en particular debieras contemplar el uso de un ULN2803 como "driver" para cada 8 tiras de leds o cada 74HC595, y podrás tener tantas lineas de salida como tu necesites.

Así que si bien no es un multiplexor como tu buscas, es otra alternativa muy factible y fácil de implementar.

Dejo los siguientes links para que te des una mejor idea.

http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf

Digital-Clock-and-Temperature-Schematic.gif


Ten un buen día y saludos a todos
 
Te comento lo que conozco yo, mi solucion a esos casos es multiplexar con el mismo microcontrolador. Usas 7 pines +1 pin adicional para cada display. Ejemplo si tenes que manejar 4 displays serian 7 pines +4, en todal 11 pines.

No si si es lo que estas buscando... poruqe no se lo que son las tiras de leds :LOL:. Este es el codigo que uso, en C.

Código:
const unsigned short DIGITOS[] =
{
0x3F, //Código del dígito 0
0x06, //Código del dígito 1
0x5B, //Código del dígito 2
0x4F, //Código del dígito 3
0x66, //Código del dígito 4
0x6D, //Código del dígito 5
0x7D, //Código del dígito 6
0x07, //Código del dígito 7
0x7F, //Código del dígito 8
0x6F, //Código del dígito 9
};

void VerDisplay( int N )
{
unsigned short U; //Variable para guardar las unidades.
unsigned short D; //Variable para guardar las decenas.
unsigned short C; //Variable para guardar las centenas.

C = N/100; //Cálculo de las centenas.
D = (N-((N/100)*100))/10;; //Cálculo de las decenas.
U = N-((N/10)*10); //Cálculo de las unidades.
PORTD = DIGITOS[U]; //Visualiza las unidades.
PORTB.F3=1; //Activa en alto el primer display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0;//Desactiva todos los displays.
PORTD = DIGITOS[D]; //Visualiza las decenas.
PORTB.F4=1; //Activa en alto el segundo display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0; //Desactiva todos los displays.
PORTD = DIGITOS[C]; //Visualiza las centenas.
PORTB.F5=1; //Activa en alto el tercer display
delay_ms(10); //Retado de 10m segundos
PORTB.F3=0; PORTB.F4=0; PORTB.F5=0; //Desactiva todos los displays.

}

Si es lo que buscas y tenes dudas puedo explicarlo un poco mas.



Con respecto al proteus, no se bien lo que queres hacer... queres aumentar el valor de 5v? Si esto es lo que queres vas a Design->Configure power rails.

Sinceramente te digo, no me acuerdo como crear las nuevas rails, pero googlea "proteus configure power rails" y seguro encotrnas un tuto.

Gracias por tu respuesta, en realidad creo que no se puede realizar por software porque lo que yo quiero es fabricar mi propio display y cada uno de los lados del display sería una tira de aprox. 5 o 6 leds, entonces se necesita de un la salida de un pin que se conecte a la puerta de un bipolar que haga de conmutador de la tira y controle que esta se mantenga apagada o encendida y con ello formar los números.



Hola carri6, una solución muy viable y económica que utilizo cuando quiero hacer un expansor de un puerto paralelo de 8 bits es por medio del integrado 74HC595 que con solo 3 lineas (comunicacion serial) puedo manejar los puertos de 8 bits que desee, se utiliza un 74HC595 por cada puerto de 8 bits y van conectados en cascada, yo he conectado hasta 8 chips sin ningún problema.

Para tu caso en particular debieras contemplar el uso de un ULN2803 como "driver" para cada 8 tiras de leds o cada 74HC595, y podrás tener tantas lineas de salida como tu necesites.

Así que si bien no es un multiplexor como tu buscas, es otra alternativa muy factible y fácil de implementar.

Dejo los siguientes links para que te des una mejor idea.

http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf

http://skemarangkaian.com/wp-content/uploads/2010/08/Digital-Clock-and-Temperature-Schematic.gif

Ten un buen día y saludos a todos

Gracias miborbolla, en realidad si es algo asi lo que andaría buscando aunque no he manejado muchos de estos integrados así que no se si sabrías la tensión y la corriente a la salida que proporciona en cada uno de los puertos de salida este tipo de integrados ya que es importante para poder realizar la tira de leds.
 
Última edición:
carri6

Para el 74HC595 te deje el datasheet del mismo, sin embargo es un chip que maneja señales TTL y solo no puede manejar leds de tira, por eso te recomendé el uso del uln2803 que es un driver darlington que puede manejar 50 Volts y 500 ma.

http://www.datasheetcatalog.org/datasheets/90/366828_DS.pdf

Así que con este driver (uln2803) no debe haber tira de led que se resista, a menos que uses algo muy especial.

Saludos

Ya le eche un vistazo, es lo que estaba buscando!
Gracias!
 
Atrás
Arriba