TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: black_flowers en 11 de Agosto de 2007, 12:07:46

Título: generar retardos en c30
Publicado por: black_flowers 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.   :-)
Título: Re: generar retardos en c30
Publicado por: Nocturno 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 (http://www.micropic.es/index.php?option=com_content&task=view&id=33&Itemid=58)
Título: Re: generar retardos en c30
Publicado por: togarha 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,