Autor Tema: generar retardos en c30  (Leído 4133 veces)

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

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
generar retardos en c30
« en: 11 de Agosto de 2007, 12:07:46 »
hola, ¿qué función puedo utilizar para generar delays en c30? He visto alguna como "delay_ms(300);" por ejemplo, pero estaban definidas en el propio programa, es decir no eran funciones predefinidas e incluídas.

un saludo.   :-)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: generar retardos en c30
« Respuesta #1 en: 11 de Agosto de 2007, 12:19:30 »
Yo siempre he incorporado en mis programas la función delay artesanal, porque no me consta que C30 tenga una propia.
En mi página colgué un asistente que genera automáticamente el código del Delay que necesites en función de la velocidad a la que esté trabajando tu micro. Está diseñado para trabajar con dsPIC33F pero será fácil adaptarlo a 30F.
Lo tienes aquí:
33F - Asistente para la generación automática de retardos

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: generar retardos en c30
« Respuesta #2 en: 05 de Septiembre de 2007, 07:35:25 »
Buenas,

En C30 tienes la funcion __delay32(unsigned long counter)

está escrita en ensamblador y tienes que pasarle el numero de cuentas que se desea generar. Para eso, algo tan facil como generarte luego en la cabecera algo como:

// External oscillator frequency with PLL enable
#define SYSCLK          8000000
#define FCY            SYSCLK*4/2 //pll enabled

// Defines para calcular los ciclos para determinados tiempos
// Se suma uno al final para asegurarnos que tenemos el tiempo minimo deseado
// en caso de que la division no fuese exacta
// si se quiere el valor exacto (y no minimo) quitar el "+1" final
#define   US_10         (1*FCY/100000)+1
#define   US_25         (25*FCY/1000000)+1
#define   US_50         (5*FCY/100000)+1
#define   US_100         (1*FCY/10000)+1
#define   US_250         (25*FCY/100000)+1
#define   US_500         (5*FCY/10000)+1

#define   MS_10         (1*FCY/100)+1
#define   MS_25         (25*FCY/1000)+1
#define   MS_50         (5*FCY/100)+1
#define   MS_100         (1*FCY/10)+1
#define   MS_250         (25*FCY/100)+1
#define   MS_500         (5*FCY/10)+1


Un saludo,



 

anything