TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: fran321 en 27 de Diciembre de 2012, 15:57:03
-
Hola a todos. Me ocurre algo que roza lo kafkiano. Como todos sabeis cuando os iniciasteis en microcontroladores, el primer programa cuesta una barbaridad porque, por muy simple que sea, requiere montar todo el chiringuito y que todo funcione bien. Pues bien, ahí estoy yo ahora. Lo tengo todo y funciona cada cosa bien, pero no consigo estrenar mi primer programa con un PIC16F628A sobre la placa board. Lo he simulado con Proteus y me ha costado un montón por aquello de tener que aprender a programar y cómo funciona Proteus, pero funciona perfectamente. Se trata del famoso "coche fantástico". He quemado el PIC, he montado los 8 leds sobre el puerto B y observo que no se mueve nada. Compruebo tensión, resistencias, polaridad, colocación de los leds (patilla larga mirando para el micro y corta a masa) y reviso cien veces el programa (en C), que es éste y está sacado del foro de todopic:
#include <16F628A.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,NOLVP,PUT,BROWNOUT,NOCPD
#use delay (clock=4000000)
#use standard_io(B)
#byte TRISB=0x85
void main()
{
int led_on=0b00000001;
int duracion=50;
TRISB=0x00;
do{
do{
output_b(led_on);
rotate_left(&led_on,1);
delay_ms(duracion);
}while(bit_test(led_on,7)==0);
do{
output_b(led_on);
rotate_right(&led_on,1);
delay_ms(duracion);
}while(bit_test(led_on,0)==0);
}while(TRUE);
}
Pues bien, probando, descubro que al quitar un led, sea cual sea, y darle la vuelta (cambio la polaridad de ese led), entonces ese led se mantiene encendido y los demás empiezan a hacer el ciclo correctamente. Cuando le toca el turno a ese led concreto, entonces se apaga, es decir, que va al revés. Pero lo curioso es que funciona, aunque no encuentro la explicación por ningún lado. Debe ser algo sencillo que alguien que empieza no es capaz de ver, pero tal vez alguien detecta cual es el problema a simple vista.
Gracias de antemano por vuestra ayuda. Saludos.
-
Puedes poner tu esquemático??
Para ver como tienes todo conectado??
-
#byte TRISB=0x85 esta mal.... la direccion es 0x86
-
Os adjunto el esquema de Proteus. ppyote, he cambiado la dirección de TRISB, pero observo que en tanto en Proteus como en la placa board, todo sigue igual, es decir, en Proteus va perfectamente y en la placa no va, a menos que le de la vuelta a algún led.
Gracias por vuestras respuestas.
-
Prueba aumentar tu resistencia de cada led, creo que te estas quedando sin capacidad de corriente para manejarlos a todos...
-
Pero ¿cómo es posible que al darle la vuelta a un led, ese concreto se encienda todo el rato, cuando la corriente se supone que va de ánodo a cátodo, es decir, de la salida del micro a masa? Además, justo al hacer esto, los demás leds se ponen a funcionar correctamente... Además las corrientes son pequeñísimas al tratarse de leds... Es inexplicable....
-
Pero ¿cómo es posible que al darle la vuelta a un led, ese concreto se encienda todo el rato, cuando la corriente se supone que va de ánodo a cátodo, es decir, de la salida del micro a masa? Además, justo al hacer esto, los demás leds se ponen a funcionar correctamente... Además las corrientes son pequeñísimas al tratarse de leds... Es inexplicable....
puede ser sí polarizas la gnd con -5v y vss con 0v
-
Hola fran321.
Podrias poner una foto con la mejor definicion que puedas de tu montaje. Es para ver las conecciones.
Saludos.
-
Por fin he encontrado lo que pasaba.
La placa board tiene en los bordes superior e inferior, dos filas de contactos cada lado. Yo creia que cada fila conectaba de izquierda a derecha, pero cada una conecta hasta la mitad de la placa, con lo que en realidad hay 4 bandas arriba y otras 4 abajo. Yo tenía conectado el micro a alimentación y a masa pero las salidas del puerto B no iban a masa, sino a una banda desconectada.
Ahora funciona todo y ya puedo continuar. Aun así, sigo sin entender cómo es posible que funcionara al cambiar de posición uno de los led...
Gracias a todos por vuestra ayuda.
-
Por fin he encontrado lo que pasaba.
La placa board tiene en los bordes superior e inferior, dos filas de contactos cada lado. Yo creia que cada fila conectaba de izquierda a derecha, pero cada una conecta hasta la mitad de la placa, con lo que en realidad hay 4 bandas arriba y otras 4 abajo. Yo tenía conectado el micro a alimentación y a masa pero las salidas del puerto B no iban a masa, sino a una banda desconectada.
Ahora funciona todo y ya puedo continuar. Aun así, sigo sin entender cómo es posible que funcionara al cambiar de posición uno de los led...
Gracias a todos por vuestra ayuda.
Hola fran321.
Era que a travez del led invertido el resto de los leds iban a masa. Te quedaba como si tuvieses dos leds en serie. La salida del micro que tenia que encender estaba a Vcc y la del led invertido a GND (porque se suponia que estaba apagado) entonces circulaba corriente entre estas dos patas y travez de los diodos por donde cerraba el circuito. Cuando le tocaba al led invertido, como estaba invertido (diodo en inversa) no circulaba corriente y por eso no prendia.
Ahora se entiende porque funcionaba asi. Me alegro que hayas encontrado la solucion.
Saludos.
-
Exacto. Es eso lo que pasaba, se establecía tensión entre una salida cualquiera (+5V) y la salida cuyo led estaba invertida (0V) y por tanto la corriente atravesaba dos resistencias y dos diodos.
Muchas gracias Darkman_A por haberlo visto tan claro y tan rápido.
Feliz Navidad allí en Argentina (aunque esteis a 40ºC)
-
Exacto. Es eso lo que pasaba, se establecía tensión entre una salida cualquiera (+5V) y la salida cuyo led estaba invertida (0V) y por tanto la corriente atravesaba dos resistencias y dos diodos.
Muchas gracias Darkman_A por haberlo visto tan claro y tan rápido.
Feliz Navidad allí en Argentina (aunque esteis a 40ºC)
Gracias fran321, pero los méritos son tuyos que encontraste la falla. Lo mio fue explicarlo, como se dice acá, "con el diario del lunes" (teniendo la solución).
Feliz Navidad para vos también, y que comiences bien el año.
-
Jejeje, puñeteras boards, tengo 3 pacas, una grande y dos pequeñas, las dos pequeñas aparentemente son iguales, las lineas horizontales (alimentacion) están divididas en 8 segmentos de 5 agujeros cada linea. En una boart está toda la linea unida (8 segmentos) y en la otra esta dividida por la mitad (4 y 4). La primera vez que la usé tambien mi volví loco.
un saludo