Autor Tema: PROBLEMAS CON DELAY_MS()  (Leído 2148 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pipipi

  • PIC12
  • **
  • Mensajes: 91
PROBLEMAS CON DELAY_MS()
« en: 20 de Agosto de 2009, 13:30:55 »
HOLA:

Estoy realizando un programa en ccs pero tengo un problema con los delays. El problema es que no me respeta el tiempo que le pongo y no se que estoy haciendo mal, a qui les pongo mi ejemplo:

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,PUT,NOBROWNOUT
#use delay(clock=48000000)
#include <LCD.C>

void main(void)
{
 
lcd_init();

while(true)
{

  lcd_gotoxy(1,1);
  printf(lcd_putc,"HOLA MUNDO");
  delay_ms(1000);
  lcd_gotoxy(1,1);
  printf(lcd_putc,"                ");

}
}

El programa, si realiza lo de la lcd el problema es que tarda mas de un segundo para deplegar el siguiente mensaje, Espero sus respuestas

Gracias :-/ :-/


Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #1 en: 20 de Agosto de 2009, 14:30:07 »
¿Qué cristal tienes puesto? Te lo digo para ver si se corresponden la configuración del PLL con los 48Mhz que declaras en el #use delay.

Por otro lado decirte que entre el borrado del LCD y la nueva escritura en el apenas pasan unos escasos microsegundos ya que tiene un único delay entre escribir y borrar, pero ninguno entre borrar y escribir de nuevo.

Para ver cómo se escribe, se borra lo escrito y vuelve a escribirse de nuevo deberías tener:

Código: CSS
  1. #include <18F4550.h>
  2. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN,PUT,NOBROWNOUT
  3. #use delay(clock=48000000)
  4. #include <LCD.C>
  5.  
  6. void main(void){
  7.  
  8.   lcd_init();
  9.  
  10.   while(true){
  11.     lcd_gotoxy(1,1);
  12.     printf(lcd_putc,"HOLA MUNDO");
  13.     delay_ms(1000);
  14.     lcd_gotoxy(1,1);
  15.     printf(lcd_putc,"                ");
  16.     delay_ms(1000);
  17.   }
  18. }

Así estaría un segundo con el texto y un segundo sin él.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pipipi

  • PIC12
  • **
  • Mensajes: 91
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #2 en: 20 de Agosto de 2009, 14:46:12 »
Hola redpic:

Gracias por contestar, te cuento que uso un cristal de 4mhz. Oye mmmm
abusando de ti me podrias explicar bevemente como esta lo de la configuracion del oscilador por fa gracias :-/

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #3 en: 20 de Agosto de 2009, 14:51:55 »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pipipi

  • PIC12
  • **
  • Mensajes: 91
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #4 en: 20 de Agosto de 2009, 14:57:58 »
Hola:

Muchisimas gracias por contestar, y sip ya me di cuenta que estaba ocupando un cristal de 4 cuando deveria de ser de 12.
A y gracias por la pagina :-/ :-/

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #5 en: 20 de Agosto de 2009, 14:59:23 »
Gracias por contestar, te cuento que uso un cristal de 4mhz. Oye mmmm

Si tienes un cristal de 4 MHz entonces no debes utilizar el preescaler ya que al PLL deben entrarle 4 Mhz. Utiliza el fuse PLL1 para desactivar el preescaler.

Con PLL3 estás introduciendo en el PLL una frecuencia de 4/3 Mhz o sea aproximadamente 1.33 Mhz con lo que el PLL no puede obtener los 96 Mhz necesarios para que al ser divididos generen los 48 Mhz que tú has declarado en el #use_delay.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: PROBLEMAS CON DELAY_MS()
« Respuesta #6 en: 20 de Agosto de 2009, 15:03:37 »

Muchisimas gracias por contestar, y sip ya me di cuenta que estaba ocupando un cristal de 4 cuando deveria de ser de 12.


No tiene porqué. Con el de 4 Mhz también se puede perfectamente. No usas el preescaler y en paz. Piensa que lo que tienes que conseguir es que al PLL le entren 4 Mhz así que puedes elegir cualquier combinación entre cristal y preescaler que genere esos 4 Mhz.

Cristal de  4 Mhz y PLL1 es Ok.
Cristal de  8 Mhz y PLL2 es Ok.
Cristal de 12 Mhz y PLL3 es Ok.
Cristal de 16 Mhz y PLL4 es Ok.
Cristal de 20 Mhz y PLL5 es Ok.

fijate que todos dan como resultado un salida del preescaler de 4 Mhz. Utiliza entonces cualquiera de esos cristales y pon en los fuses el PLLx que necesites para él.  :mrgreen:
« Última modificación: 20 de Agosto de 2009, 15:12:59 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania