Problemas con multiplexado de 2 displays grandes

Hola hamito

Si lo que has presentado hasta ahora son los resultados de las simulaciones, no el resultado en un circuito real, podría decirte que es problema del simulador.

Estuve haciendo pruebas con diferentes simuladores y con el que funcionó bien. Prender solo los segmentos necesarios, fue con el LiveWire.

Ten en cuenta un detalle que se debería saber desde el principio: Qué tanta corriente requieren los LED’s que vas a utilizar en la realidad. Cuando armes el circuito ???

saludos
a sus ordenes
 

Adjuntos

  • Segmento G.jpg
    Segmento G.jpg
    115.7 KB · Visitas: 26
MrCarlos tengo un prototipo con displays a 5 voltios y me eh dado cuenta que ahí también persiste la falla, solo que como son pequeños se nota poco, al querer ampliar cada segmento miniatura por media docena de leds, ahi es cuando se ve la falla. Creo que mi problema esta en la programación, no se si me equivoque ah. saludos MrCarlos y Amigos de Foros de Electrónica.
 
Hola Amigo D@rkbytes mire estoy haciendo un contador descendente con pulsador de programación, eh hecho una placa pequeña osea un prototipo para probar mi proyecto y funciona en un 95% normal, pero quiero agrandar el tamaño de los displays a 6 leds por segmento, y el problema aparece cuando multiplexea los dígitos, eh participado de Foros de Electrónica, por el cual me han ayudado a descartar que es mi programación, me dice Foros de Electrónica que le falta agregarle !!un tiempo muerto! entre dígito y dígito, pero no eh podido ubicar exactamente donde digitar el delayum para obtener resultados favorables, amigo D@rkbytes haber si me das una manito con mi programación, esta en Proton. Aquí te envío una imagen de como se ve mi trabajo y mi programación, haber donde hay que corregir, te agradezco muchísimo de antemano.
 

Adjuntos

  • protonprog.rar
    25.9 KB · Visitas: 19
Movido aquí:

Tienes que invertir el control en tu programa.
Antes te funcionaba porque seguramente controlabas los displays directamente.
Pero ahora estás usando transistores para controlar los segmentos, y tienes que invertir la polaridad.
Cambia eso en tu programa y al ULN2803 no le veo utilidad, ya que después usas otros transistores.

Suerte.
 
Hola amigos del Foro, bueno parece que aun me falta algunas clases de proton, creo lo que dice DOSMETROS que hay que ponerle un tiempo muerto entre dígito y dígito, pero no lo logro aun, bueno quería hacer recordar que eh hecho la experiencia de mi proyecto no solo en protoboard si no también en un prototipo (placa impresa diseñada en eagle) y ahi mi proyecto funciona bien con respecto a la cuenta , pero sí minuciosamente veo como el numero de las unidades se muestra por sobre el numero de las decenas, osea es como un duplicado de las unidades que se monta sobre el numero de las decenas, y al querer ampliar mis segmentos por grupos de leds con resistencias limitadoras, esa poca intensidad de corriente que se ve en los displays chicos (5v) en los disgitos grandes con leds se nota mucho mas.Dos metros haber si me das una manito con mi programa. al inicio del foro esta el esquema de mi proyecto en grande.
muchas Gracias....
 
Amigo, bueno, una imagen vale mas que mil palabras, al parecer los transistores T1 y/o T2, no alcanzan el corte. Chequea mediante un osciloscopio, en los puertos del PIC, las señales que gobiernan las bases de dichos transistores.
 
Hola amigos del Foro, bueno estuve alejado de mi pagina favorita de Foros de electronica, por motivos que estaba revisando mi proyecto, Y, eh llegado a una conclusion, de que no es mi circuiteria fisica,treansistores, diosods, nada porque lo eh probado con otra programacion que es un contador hecho en PBP y me funciona requetebien,por favor les pido de favor, revisen mi programación que le eh porteado anteriormente, algun tiempo me esta fallando, gracias por su colaoracion.
 
Hola a todos.

Hamito: No se proton, pero lo que si se, es que los pic16 presentan una situación rara en el manejo de sus puertos. Quizas esto no sea el problema en este caso, ni siquiera he revisado detenidamente tu diagrama, solo lo comento para que lo tengas en cuenta:

En los PIC16, cuando escribes un bit del PORTx, el proceso de escritura implica una previa lectura al puerto completo y una operacion logica con el dato a escribir (a nivel byte) y una posterior escritura en el PORT.
En ocasiones existe un error en la lectura previa debido a capacitancias en los pines, (esto depende de tu circuito).

Por ejemplo: escribes un 1 en el PORTA.1 en el cual tienes una capacitancia considerable. Dicha capacitancia se opone al cambio de nivel de voltaje. Inmediatamente despues escribes un bit en el PORTA.2, y, como te lo habia dicho, el pic tiene que leer el puerto completo antes de escribir el nuevo bit, pero resulta que al leer detecta un 0 en el PORTA.1 debido a que el capacitor no se ha cargado aun!!, despues, al volver a escribir resulta que el PIC, a parte de modificar el bit PORTA.2 que requerias, también te modificó el PORTA.1!!

Esto tiene una solución por programación y es tener una variable (en RAM) en la que copies los datos antes de mandarlos a los puertos y cuando necesites escribir un bit lo hagas sobre esa variable y despues escribas el puerto completo, evitando asi operaciones a nivel bit con los puertos

Bueno quizas soy un poco impresizo en mi explicación, pero en las hojas de datos está esa información y no es muy facil de intuir que cuando escribes en un bit el PIC tambien te modifique otro que aparentemente no tiene nada que ver!!
 
hola DSP, quiero entender mas tu aporte si me envías un ejemplo sobre como crear la variable en RAM y luego enviar a los puertos, yo creo que ahí puede estar mi problema,un ejemplo por favor DSP. GRACIAS.
 
Ok, mira, esto viene bien explicado en la documentación del MikroC. Y no tengo un ejemplo a la mano, pero es algo mas o menos asi (en lenguaje c):


//Variable global
unsigned char copiaPORTA=0;

main() {


initPIC(); //Una funcion x que incializa tus puertos y tu PIC en general;

PORTA=0; //Este tipo de sentencias en las que escribes el puerto completo si son seguras

//Ahora ponemos el bit 1 a 1
copiaPORTA |= 0b00000010;
PORTA = copiaPORTA;


//Ahora ponemos el bit 2 a 1
copiaPORTA |= 0b00000100;
PORTA = copiaPORTA;

//Bucle principal
while(1) {

}
}

//O podrias crear subrrutinas para harlo mas simple por ejemplo
void bitOnPORTA(unsigned char dato,unsigned char nBit)
{
copiaPORTA |= (1<<nBit);
PORTA = copiaPORTA;
}

Este código no ha sido probado, solo es una aproximación para que te des una idea como evitar las instrucciones a nivel bit con los puertos. Y la explicación que adjunto es parte de la documentacion del compilador mikroC.
 

Adjuntos

  • RMW Problem.pdf
    443.3 KB · Visitas: 9
Hola amigos del Foro, la verdad reciban mis disculpas por mi falta, no pensé, estuve agotado pensando, modificando mi programacion.Mil disculpas Gracias...
 
A mi me huele a problema con el simulador. Como tiene que evaluar la ecuación de mil leds tarda mas. Si lo haces en la realidad irá bien.
Si quieres salir de dudas simulalo con un led por segmento y si va bien, es por eso.
 
Atrás
Arriba