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

Temas similares

07/11/2008 #1


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!
07/11/2008 #2

Avatar de pepechip

Puede que esa salida sea del tipo COLECTOR ABIERTO (no manda +, solo cierra circuito con masa)
07/11/2008 #3


Drenador abierto te refieres?¿

Segun el datasheet (18F4550 ) la salida es TTL igual.

Gracias!
10/11/2008 #4


No sabeis porque puede ser?

Esque estoy dandole mil vueltas y no se como solucionarlo!

Un saludo!
10/11/2008 #5

Avatar de Moyano Jonathan

#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.
11/11/2008 #6


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!
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.