Ayuda con Displays

Hola a todos, soy new en el tema de electronica y requiero ayuda ...
Aca esta el esquema de lo que estoy haciendo..
http://img162.imagevenue.com/img.php?image=51811_nosequehacer_123_576lo.JPG
img.php


Ahora muy bien, el tema es que hago todo el calculo para las resistencias de los transistores, y no logro hacer que funcionen correctamente. Queda siempre haciendo el efecto fantasma.
De la unica manera de la que funcionan bien es conectandoles la base al pin del pic directamente. Pero cuando hago esto el display apenas se distingue.
Ya probe de todo, el calculo del transistor lo saque de aqui:
http://picmania.garcia-cuervo.com/Electronica_Basica.htm#TRANS1

Desde ya muchas gracias.. Saludos Albano.
 
mmm, a que llamas "fantasma" ? ....

generalmente 1K es sucifiente o 500 ohm ... con un 2N3904 no falla

tambien podrias usar un MOSFET seria mejor (talves mas caro pero mejor)
 
Willington dijo:
mmm, a que llamas "fantasma" ? ....

generalmente 1K es sucifiente o 500 ohm ... con un 2N3904 no falla

tambien podrias usar un MOSFET seria mejor (talves mas caro pero mejor)

Cuando digo fantasma me refiero a que los leds nunca terminan de apagarce, entonces provoca que apenas se pueda distinguir el numero.
Ya probe con 2N3904 y no hay caso. Tambien probe con todo el rango de Resistencias que tengo a mano. Y nada! Ya no se que es lo que pasa.
Probe con BC337 BC547 con PNP BC557 con lo que me falta probar es con un IRF ..
A ver si alguien tiene idea! ..
Ademas cuando le pongo resistencias es como que los transistores dejan de funcionar bien, y me copia el mismo numero en todo los displays, cuando enrrealidad tiene que multiplexar.. Cosa que anda bien siempre y cuando no le ponga resistencias a los Transistores.
¿Cosa de locos?

Saludos.
 
¿Qué corriente te está entregando el PIC en cada pin hacia las bases? Es probable que no estés alcanzando la corriente de base suficiente para llevar a saturación al transistor. Yo he hecho circuitos similares usando un HC08 (Freescale/Motorola) conectando los pines directo a los comunes de los displays sin ningún problema.

Saludos,
JJ (Geo).
 
No se exactamente como es la configuración interna de los pines de cada puerto de los PIC, pero yo he trabajado con ATMEL, y estos tienes resistencias pull-up internas en cada pin, osea q un 1 logico es en realidad INTERNAMENTE:

VCC-------------resitencia pull up interna-------------------pin del micro.

Eso es bastante util para otras aplicaciones, pero cuando quería encender leds o display lo usaba en modo ánodo comun, osea el led se encendía con un cero lógico.

VCC -------- 220ohms -------->|--------- pin del micro
______________________LED

Provablemente los pines de los PIC tengan igual estructura, si es asi, la resistencia pull-up interna mas la resistencia q le colocas tu, quiza limitan demasiado la corriente.
En todo caso aprovecho para pedir a los grandes del foro q nos despejen esta duda.

Salu2:

BRAULIO
 
Bueno cuestion que para controlar los transistores estoy utilizando RA0, 1 y 2.
De RA0 le entrega 20mA pero de las otras dos solo 2mA, y supongo debe ser por esto por lo que los transistores no responden.
En un momento estaba trabajando con una bateria de 9v y la pasaba por el 7805, pero pense alomejor entrega poca corriente la bateria. Entonces hice el intento con una fuente de 12v y 3A.
Sigue igual.
PD: Ya prove con 3 pic´s diferentes.
Aver que me pueden decir.
Saludos.
 
Pero 2 mA en al base deberían ser suficientes, si el problema es como dices por falta de corriente quiza si aunmentas una resistencia de la base a VCC asi:
38eb288f28.jpg

Salu2:

BRAULIO
 
Lo mejor que puedes hacer es lo siguiente , es ir paso a paso:

Montas en la proto solo el transistor y las dos resistencias y el diodo y manualmente lo poner a 4V y a =V si esto de va

hacer un sencillo programa intermitente que encienda el led, solo eso configurar el puerto y un blucle de delay y output.


Vigila si son salidas pushpull

Con una resistencia de base de 1k deberia ser suficiente.

Puede que la multiplexacion sea demasiado rapida (dutycicle bajo) o no te lea bien,
yo utilizo una variable para cada display y el timer genera una interrupcion,lee de la variable y lo mete a la salida igualito a una matriz.
El programa principal modifica "a lo bestia" esa matriz.
 
Bueno primero que todo, gracias a todos por ayudar.
Luego , despues de probar todas la opciones aqui expuestas, llegue a la conclucion que es lo que dijo tiopepe123 "Puede que la multiplexacion sea demasiado rapida .."
Entre y le meti un delay de 200 ms para testear, y el resultado fue que todos los display se prenden con la intensidad que corresponde y muestran el numero que corresponde.
Entonces dije "listo bajo el delay y funciona", pero que pasa! puse el delay en 1ms y ahora se comporta medio extraño, se alcanza a ver el multiplexamiento, y cada 3 o 4 cambios se apaga todo y se vuelve a prender, y se ve feisimo.
Pero yo pense, si puse solo 1ms como puede ser que se vea como titila.
Asi que ahora estoy estancado de nuevo.
Posteo el codigo a ver si alguien tiene una idea mejor
#include <16f84a.h>
#fuses XT, NOWDT, NOPROTECT
#use delay (clock=4000000)
float metros=0.0;

#int_ext
void interru_ext() {
metros=metros + 3.67497;
#asm
BCF 0x0B,1
RETFIE
#endasm



}

void numero ( int a ){
switch (a) {

case 0:
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);
output_low(pin_b7);
break;
case 1:
output_low(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
break;
case 2:
output_high(pin_b1);
output_high(pin_b2);
output_low(pin_b3);
output_high(pin_b4);
output_high(pin_b5);
output_low(pin_b6);
output_high(pin_b7);
break;
case 3:
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_high(pin_b7);
break;
case 4:
output_low(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
break;
case 5:
output_high(pin_b1);
output_low(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_low(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
break;
case 6:
output_high(pin_b1);
output_low(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
break;
case 7:
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
break;
case 8:
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
break;
case 9:
output_high(pin_b1);
output_high(pin_b2);
output_high(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b6);
output_high(pin_b7);
break;

}
}

void main(void)
{

int acum,dig1,dig2,dig3;
ext_int_edge(0,L_TO_H);
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
set_tris_a(00000000);
set_tris_b(00000001);


do{
acum=metros;

dig1=acum/100;
acum=acum - (dig1*100);
dig2=acum/10;
acum=acum - (dig2*10);
dig3=acum;

numero(dig1);
output_low(pin_a0);
output_low(pin_a1);
output_high(pin_a2);
delay_cycles(25);

numero(dig2);
output_low(pin_a1);
output_low(pin_a2);
output_high(pin_a0);
delay_cycles(25);

numero(dig3);
output_low(pin_a0);
output_low(pin_a2);
output_high(pin_a1);
delay_cycles(25);
} while(1);
}

De nuevo Gracias.
Saludos, albano
 
Me acabo de dar cuenta que el titilado es producto de que provoco la interrupcion externa con 5v. Puse una resistencia y funciona perfecto... Ahora me surgio el ultimo problema.
No se porque, el contador va perfecto hasta los 253 y luego vuelve a 0. Primero se me ocurrio que seria algun problema con la variable que almacena la suma.
Pero es un float de 32 bits, no hay manera de que tire overflow a los 253,xxxxxx .
Entonces cuando llega ahi es como si se reseteara, es muy raro porque a veces la cuenta comienza en 1 o 2 , cuando en realidad si se reseteara deberia aparecer en 0. o a lo sumo si hiciera la primera interrupcion tendria que ser 3.
En fin, un problema tras otro, espero que este sea el ultimo.. Muchas gracias
 
Atrás
Arriba