Carrusel de leds (el primero no funciona)

Buenos dias . En primer lugar presentarme. Soy David de Águilas( Murcia).
Es mi primer post y siento que sea para una duda. He buscado y rebuscado por el foro asi como he probado mil veces y no hay manera de que mi programa funcione de la forma correcta.

Os lo posteo aqui para ver si pueden ayudarme.

Código:
#include <18F4550.h>
#use delay(clock=4000000)

#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,NOVREGEN,NOPBADEN
#use fast_io(d)


void main(){

set_tris_d(0x00);
disable_interrupts(GLOBAL);

		          do	{
	                                output_bit(PIN_D0,1);
        			delay_ms(1000);
			output_bit(PIN_D0,0);

			output_bit(PIN_D1,1);
        			delay_ms(100);
			output_bit(PIN_D1,0);

	                                output_bit(PIN_D2,1);
        			delay_ms(100);
			output_bit(PIN_D2,0);

	                                output_bit(PIN_D3,1);
        			delay_ms(100);
			output_bit(PIN_D3,0);

	                                output_bit(PIN_D4,1);
        			delay_ms(100);
			output_bit(PIN_D4,0);

	                                output_bit(PIN_D5,1);
        			delay_ms(100);
			output_bit(PIN_D5,0);

	                                output_bit(PIN_D6,1);
        			delay_ms(100);
			output_bit(PIN_D6,0);
	
                                                output_bit(PIN_D7,1);
        			delay_ms(100);
			output_bit(PIN_D7,0);

	}while(TRUE);	


}

El caso es que tengo un led conectado a cada una de las salidas (con su corespondiente resistencia claro) y se iluminan todas a excepcion de la primera.

Me pasa tanto para el puerto B como para el D. (es decir , ni RB0 ni RD0 ). Que no es cuestion del PIC vamos.
Compilar compila todo OK.

¿A que creeis que se debe?

Muchas Gracias!
 
Puede que esa salida sea del tipo COLECTOR ABIERTO (no manda +, solo cierra circuito con masa)
 
#use fast_io(d) fijate sacando esa parte del código hay veces que no me ha funcionado poniendo fast_io pero igual intenta despúes puedo reescribir el código de tu programa y hacer la simulación a ver que pasa.
 
sigue sin funcionar .. ni poniendo a drenador abierto ni quitando el fast_io.

Os posteo el codigo completo de mi programa :;

Código:
#include <18F4550.h>
#include <prueba.h>
#use delay(clock=4000000)

#fuses XT,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOVREGEN,NOPBADEN


int escribe_h(int pos);
int escribe_o(int pos);
int escribe_l(int pos);
int escribe_a(int pos);

int a,size;

void main(){

set_tris_b(0x00);
set_tris_d(0x00);

disable_interrupts(GLOBAL);

size=escribe_a(escribe_l(escribe_o(escribe_h(0))));		



do	{
		a=0;
		while(a<size){


					output_d(read_eeprom(a));
        			a=a+1;
					output_b(read_eeprom(a));
					delay_ms(1000);		
					a=a+1;
					

							}

	}	while(TRUE)	;	

}

y ahora el de la libreria donde van las funciones

Código:
#use delay(clock=4000000)

int escribe_h(posicion_eeprom)
{
   
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x02);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x02);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0x02);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0x02);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++ ;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++ ;

   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;

   return posicion_eeprom;
}

int escribe_o(posicion_eeprom)
{
   
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC0);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC0);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC0);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC0);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;

 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;

 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
   return posicion_eeprom;
}

int escribe_l(posicion_eeprom)
{
   
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
  write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x06);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++;
 	write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
   return  posicion_eeprom;
}

int escribe_a(posicion_eeprom)
{
   
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC2);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC2);
   posicion_eeprom++;
  write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC2);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0x80);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xC2);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
   write_eeprom (posicion_eeprom, 0xFE);
   posicion_eeprom++;
 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
 write_eeprom (posicion_eeprom, 0x00);
   posicion_eeprom++ ;
   return posicion_eeprom;
}

¿Cual es el objetivo de mi programa?

Escribir en la eeprom un mensaje para despues poder mostrarlo en una hilera de leds conectados a portb y a portd

La temporizacion como veis esta puesta a un segundo , para asegurarme en un principio que la escritura y demas esta todo ok.

El caso es que los unicos bits que no hay manera de que funcionen son PORTB0 y PORTD0

He mirado en el datasheet y tienen logica TTL (es decir , la misma que el resto de puertas) asi que no entiendo donde puede estar el fallo..

Muchas gracias!
 
Atrás
Arriba