Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: yiyeyo en 18 de Julio de 2006, 15:47:01
Título: No me funciona delay_ms en PIC18F4525
Publicado por: yiyeyo en 18 de Julio de 2006, 15:47:01
Hola a todos. En el proyecto que estoy realizando con 16F877, se me ha quedado corta la memoria, y estoy realizando la migración a un 18F4525. Salvando algunos problemillas iniciales, ahora no me funciona la pantalla LCD, y he llegado a la conclusión que el problema radica en la función delay_ms(). Así que he realizado el siguiente ejemplito, y efectivamente esta función no va. ¿¿¿Alguien podría decirme porqué no funciona???
Lo que hace tanto en el PIC como simulandolo con proteus, es "ignorar" dicha función, y el pin_d0 oscila a una frecuencia independiente del valor que le pongas a delay_ms().
Muchas gracias de antemano. Utilizo CCS 3.43
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: maunix en 18 de Julio de 2006, 18:05:08
Un posible problema puede ser que la función delay_ms acepte como argumentos valores de 8 bits (0 a 255) .
¿Has leído el datasheet de dicha función a ver que dice?
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: RedPic en 18 de Julio de 2006, 19:33:50
1º ¿Está todo el código completo del programa? porque no veo el #include <18f4525.h> que le indica al compilador el PIC que estas utilizando.
2º ¿Los fuses los has puesto todos sabiendo para qué sirven? porque veo que tienes declarado el fuse LP (Low power osc < 200 khz) cuando creo que para un cristal de 4 Mhz deberias usar el fuse XT
Maunix:
En CCS C delay_ms acepta como argumento o una variable 0-255 o una constante 0-65535
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: yiyeyo en 18 de Julio de 2006, 20:40:13
Gracias por responder tan pronto.
Siento mucho haberme equivocado poniendo el código incompleto. El asistente genera un fichero .h donde se encuentra la línea #include <18f4525>, pero al copiar el contenido de este fichero (para que estuviera todo el código aquí) se me pasó copiar esta línea. Lo siento si he creado confusión.
Respecto a lo de los fuses, esto si que se me había pasado por completo. De todas formas cuando grababa el pic (con winpic800) elejía en oscillator "xt oscillator". No se si de esta forma debería funcionar adecuadamente.
Ahora he cambiado el fuse lp por xt y sigue funcionando igual. Incluyo el programa completo.
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: fastyx en 18 de Julio de 2006, 22:46:25
fijate en el datasheet como se llama el puerto d porque me parece que estas definiendo el bit a como puertod y tendrias que poner portd.0
otra cosa , fijate como configuras el tris para el puerto d, imagino que por lo que pones en el while estas viendo como cambia el estado del bit a cada 5 segundos (5000 ms ) , deberas configurarlo como salida en el trisd
espero sea de ayuda...
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: yiyeyo en 19 de Julio de 2006, 06:44:53
Hola fastyx
No creo que sea ese el problema. Precisamente en el datasheet del 18F4525 se define el puerto D con la dirección F83h. Además, con "set_tris_d(0)" estoy configurando el puerto D completo como salidas. No se si te refieres a eso.
El programa funciona en la simulación, y en el PIC creo que funciona ya que un diodo led conectado al pin0 del puerto D parece tener menor intensidad que otro conectado a 5V. Mi problema es que parece ser que la orden "delay_ms" la ignora, ya que como tu bien dices, debería cambiar el estado del pin0 cada 5 segundos, y lo hace muchísimo mas rápido.
Y eso es lo que no entiendo. He probado a crearme una rutina de retardo, y el programa responde como bien. Lo que no he probado es este mismo programa en un 16F876, pero estoy casi seguro que ahí me funcionará. Entonces, ¿¿ es problema de la versión del CCS ?? o es por otro motivo.
Muchas gracias
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: RedPic en 19 de Julio de 2006, 09:53:46
Compila, prueba y dime (imagino que efectivamente tienes un cuarzo de 4 Mhs):
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: Manofwar en 19 de Julio de 2006, 10:29:29
Hola Yiyeyo
He compilado y el bit del puerto d cambia de estado cada 5 segundos.
Como te ha dicho RedPic, ¿tienes un cristal de 4MHz?
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: yiyeyo en 19 de Julio de 2006, 11:20:03
Acabo de compilar, y tanto en la simulación con Proteus como en el PIC me sigue ocurriendo lo mismo.
Tengo un cristal de 4MHz, pero como dije antes, con una rutina de retardo casera me funciona.
Gracias
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: Nocturno en 26 de Julio de 2006, 07:15:12
Yo no creo que el problema lo tengas en el delay_ms, sino en esto: a=~a;
¿porqué no cambias esa línea por esta otra? output_bit ( PIN_D0, !input(PIN_D0));
Ya nos dirás qué tal
Título: Re: No me funciona delay_ms en PIC18F4525
Publicado por: yiyeyo en 27 de Julio de 2006, 04:29:58
Hola a todos.
Creo que el problema se ha podido solucionar con un cambio de versión. No se cual tengo ahora mismo instalada porque estoy en el trabajo, pero el mismo programa me funciona con una versión y con la otra no. Pero como no soy experto en esto, no puedo afirmar que el problema se haya solucionado así, y que ese sea el motivo de haberse solucionado. De todas formas, con la nueva versión instalada, me ha dejado de funcionar el bus I2C (todo esto para el PIC18F4525, ya que con el PIC16F877 funciona), y ahora no se si estoy enfrentándome al mismo problema que cuando lo tenía con el delay_ms().
Por descartar que la fuente de todos mis problemas sea la versión del compilador, alguien podría decirme si utiliza alguna que no le de problemas y donde conseguirla.
Cuando esté en mi casa pondré el nuevo programa y la versión del compilador que estoy utilizando.