Autor Tema: AYUDA con Delays  (Leído 788 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Andy

  • PIC10
  • *
  • Mensajes: 4
AYUDA con Delays
« en: 20 de Julio de 2019, 19:52:27 »
Buen dia a todos.
Mi duda es:

Tengo un  PIC18F2550 y estou usan un delay de 500 ms, pero al montarlo en la parte fisica tarda como 20s, ya intenté con oscilador externo ¿Cual puede ser el problema?.

Adjunto el codigo, hecho en PIC C compiler

Código: [Seleccionar]

#include <18f2550.h>
#use delay(clock=48000000)
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN, NOPBADEN

void main()
{

set_tris_b(0x00);

   while(true)
   {
   
      output_high(PIN_B5);
      output_low(PIN_B4);
      delay_ms(500);
     
      output_high(PIN_B4);
      output_low(PIN_B5);
      delay_ms(500);     
 
   
   }

Gracias

Desconectado gustavoheras

  • PIC10
  • *
  • Mensajes: 10
Re:AYUDA con Delays
« Respuesta #1 en: 22 de Julio de 2019, 15:53:43 »
Hola Andy, antes que nada ¿que es lo que tratas de hacer?. Por lo que intento deducir es que en el PIN_B5 sacas un nivel alto y luego por el PIN_B4 un nivel bajo, despues viene tu delay. Pero fisicamente como estas midiendo esde delay que dices tarda 20s?

Desconectado Andy

  • PIC10
  • *
  • Mensajes: 4
Re:AYUDA con Delays
« Respuesta #2 en: 22 de Julio de 2019, 20:06:56 »
Son dos LEDS que encienden intermitentemente, ya volví a ajustar y puse un Crystal de 20Mhz externo  y el problema es que quiero que encienda 1s y tarda 4s aproximadamente, lo cronometré

Este es mi nuevo codigo:

Código: [Seleccionar]

#include <18f2550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT
#use delay (clock = 20000000)
#use fast_io(B)

void main()
{

set_tris_b(0x00);

   while(true)
   {
   
      output_high(PIN_B5); //enciende LED1
      output_low(PIN_B4); //apaga LED2
      delay_ms(1000);
     
      output_high(PIN_B4); //enciende LED2
      output_low(PIN_B5); //apaga LED1
      delay_ms(1000);     
 
   
   }

}


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:AYUDA con Delays
« Respuesta #3 en: 22 de Julio de 2019, 20:40:08 »
No se mucho de CCS, siempre me parecio extremadamente malo y confuso para configurarlo. Pero hay un par de cosas que se necesitan para resolver este problema:

- Valor de cristal que estas usando en fisico
- Frecuencia la cual queres que funcione el PIC

Desconectado Andy

  • PIC10
  • *
  • Mensajes: 4
Re:AYUDA con Delays
« Respuesta #4 en: 23 de Julio de 2019, 19:40:44 »
El cristal externo es de 20Mhz, la frecuencia que ingrese en la dorectiva es igual de 20 Mhz, pero no se si se pueda optimizar

_ ¿Que otro compilador me recomienda?

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 154
Re:AYUDA con Delays
« Respuesta #5 en: 24 de Julio de 2019, 04:21:33 »
Yo para usar PIC siempre recomiendo MPLABX como IDE con su compilador XC8, pero para los micros que estas utilizando la versión que te recomiendo del XC8 es la V1.33 que puedo dar fe de su fiabilidad, además debes encontrar la “Plibs” (peripheral libraries), si no recuerdo mal aquella versión ya no las trae al instalar el compilador por defecto.

Si usas pics más modernos puedes y te recomiendo usar la versión (actualmente) V2.05 de XC (junto con el plugin MCC que es el generador de código, lo que te genera las librerías de Timers, i2c…)



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:AYUDA con Delays
« Respuesta #6 en: 24 de Julio de 2019, 07:49:13 »
Citar
clock=speed speed is a constant 1-100000000 (1 hz to 100 mhz).
This number can contains commas. This number also supports the following denominations: M, MHZ, K, KHZ. This specifies the clock the CPU runs at. Depending on the PIC this is 2 or 4 times the instruction rate. This directive is not needed if the following type=speed is used and there is no frequency multiplication or division.

Es decir espera la frecuencia de la CPU que es 4 veces menos, entonces el delay genera para 1s a 20Mhz, cuando en realidad tenes 5Mhz en la CPU.
Si queres hacerlo mas simple podrias cambiar el "use delay" por esto:

Código: C
  1. #use delay (xtal=20000000)

Ahora el compilador sabe que se trata de un cristal de 20Mhz, por lo que solo te va a cambiar los bits de configuracion a los mas adecuados respecto al oscilador y calcular correctamente la cantidad de ciclos necesarios.


Respecto al compilador, elegis el que mas te guste....
XC8 me gusta mas que los demas por que es mas "crudo" es decir configuro todo yo y el compilador no hace nada por mi.
CCS permite crear proyectos rapidos y simples... setear una UART o I2C es muy simple, ademas tenes varias librerias. Pero como desventaja veo que hace cosas por detras del usuario o complicadas en algunos sentidos. Que si conoces cuales son entonces no hay problema. Pero si inicias lo considero un problema.

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 361
Re:AYUDA con Delays
« Respuesta #7 en: 24 de Julio de 2019, 14:10:05 »
Son dos LEDS que encienden intermitentemente, ya volví a ajustar y puse un Crystal de 20Mhz externo  y el problema es que quiero que encienda 1s y tarda 4s aproximadamente, lo cronometré

Este es mi nuevo codigo:

Código: [Seleccionar]

#include <18f2550.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT
#use delay (clock = 20000000)
#use fast_io(B)
.....

En lugar de  :  #use delay (clock = 20000000)

Tenés que usar  #use delay (crystal = 20000000)


Desconectado Andy

  • PIC10
  • *
  • Mensajes: 4
Re:AYUDA con Delays
« Respuesta #8 en: 24 de Julio de 2019, 16:38:21 »
SOLUCINADO

Muchas gracias a todos, cambie la configuración por crystal, aparte que el grabador me configuraba otros fuses que no declare por lo cual hacia caso omiso de la configuración en codigo(uso un k150 que necesita una configuracion por aparte).

Agradezco su atención prestada