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.