Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/11/2006 #1


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..._123_576lo.JPG


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/El...ica.htm#TRANS1

Desde ya muchas gracias.. Saludos Albano.
21/11/2006 #2


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)
21/11/2006 #3


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.
22/11/2006 #4


¿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).
22/11/2006 #5

Avatar de Braulio

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
23/11/2006 #6


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.
23/11/2006 #7

Avatar de Braulio

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:

Salu2:

BRAULIO
23/11/2006 #8


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.
23/11/2006 #9


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
26/11/2006 #10


Hola chicos, les dejo un video de los display funcionando, asi pueden ver que es lo que hace el circuito y traten de encontrar alguna respuesta.

YouTube - Ayuda Electronica

Espero que me puedan ayudar.

Saludos cordiales albano.
26/11/2006 #11


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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.