TODOPIC
Microcontroladores PIC => Pic32 => Mensaje iniciado por: IngRandall en 15 de Noviembre de 2012, 16:44:52
-
Hola, tengo una duda... yo quiero un delay en us(micro segundos), el pic32 trae una libreria que tiene un retardo de 10us, como hacer para convertir de 10us a 1us????
void Delay10us(DWORD dwCount)
{
volatile DWORD _dcnt;
_dcnt = dwCount*((DWORD)(0.00001/(1.0/GetInstructionClock())/10));
while(_dcnt--)
{
Nop();
Nop();
Nop();
}
}
Creo que se podría si agregamos un 0 en la ecuación central... quedaría así:
_dcnt = dwCount*((DWORD)(0.000001/(1.0/GetInstructionClock())/10));
Ustedes que opinan???
-
Primero, si quieres verificar la modificación podes simularlo! :roll: Después, quieres algo genérico o solo de 1us? Porque si trabajas a 80MIPS podes crear un macro o una función con los Nop() necesarios.
Saludos!
-
Hola Suky,
1. No tengo ni la mas remota idea de simularlo.
2. Necesito 1us, ni mas ni menos, de cualquier forma, pero que sea 1us.
-
Y la variación propia del cristal??
Cuanto puede variarte en 1 uS ??
-
Claro que va a variar, nunca va a ser un valor exacto, eso no lo tomo en cuenta, en este caso seria despreciable y no critico esta variacion
-
Busca sobre MPLAB SIM y Stop Watch para la simulación, seguro hay hasta vídeos! Son herramientas muy útiles que no se puede no saber :tongue:
Saludos!
-
listo Suky... voy a buscar a ver que tal me va con eso, gracias. :-/ :-/ :-/
-
Hola, no uso PIC32, pero se que estos micros tiene cache de instrucciones como todo micro avanzado, no es recomendable hacer delays con el tiempo de ejecución de las instrucciones ( NOP ) porque esto pueden variar dependiendo si el micro toma o no del cache, yo creo que deberías usar un timer.
Saludos !
-
Hola, como no tenia mucho tiempo para investigar, programe, puse osciloscopio y para mi gran sorpresa funciono... no tengo fotos de la imagen, pero funcionaba perfectamente... así pude implementar unas pruebas de i2c, tomando como tiempo este delay en us.