TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Gabriel22 en 11 de Agosto de 2009, 19:21:20
-
Hola, mi pregunta es esta:
Si tengo un pic con un oscilador de 4 Mhz, ¿cuál es el mínimo período con el que puede ejecutar una instrucción?
Si no me equivoco:
T= 1/4.000.000 Hz = 0,00000025 s . Es decir, ¿podría ejecutar instrucciones de 250 nanosegundos?
Gracias y suerte en todo!!!
-
Hola Gabriel, en los PIC cada instruccion se ejecuta en 4 ciclos de reloj.
Por ejemplo
Cristal Instrucción
4 Mhz 1 us
20 Mhz 0.2 us
Saludos
-
Cierto.
En el mejor de los casos un PIC a 4MHz correrá a 1MIPS y en el peor a 0.5MIPS porque hay instrucciones que toman 8 ciclos de reloj.
-
Es decir; ¿podría ejecutar una instrucción que durase sólo 889 microsegundos?
Me refiero a una instrucción del tipo encender y apagar un led.
Gracias por responder y suerte en todo!!!
-
Una sola instruccion q dure todo eso? Lo dudo mucho, salvo q puedas hacer un oscilador RC muy bien calculado, pero ni asi. Si queres hacer una tarea cada X tiempo, tendrias q hacer las rutinas de retraso correspondientes, o usar alguno de los timer.
saludos!
-
1 * 4 / 889us = 4,500Hz
Hasta con un 555 podrías echar a andar tu pic :D
-
Y yo diciendo que los 0,0416 us de mi 18F4550 es muy lento ... ja, ja, ja :D :D :D
-
¿Entonces sí se puede?
Según esto:
Cristal Instrucción
4 Mhz 1 us
20 Mhz 0.2 us
Si puedo ejecutar instrucciones con separación de 1 us, ¿cómo no voy a poder mantenerla 900 us?
Gracias a todos por responder y suerte en todo!!
-
Pero que quieres hacer??? Si quieres mantener algo prendido durante ese tiempo crea demora, o algo. Por lo general se busca que el PIC sea lo mas rápido posible :?
-
¿Entonces sí se puede?
¿Por qué no lo pruebas y nos dices si funciona o no? Imposible no parece ...
-
Es que primero quiero saber si se puede porque no sé cómo se ponen periodos de tiempo inferiores a 1 milisegundo en PBP. Por eso no puedo probarlo.
Me explico claramente: Quiero hacer un proyecto con un led infrarrojo. Necesito que esté encendido 889 microsegundos y que se apague el mismo tiempo. Así se supone que son los ceros y unos que reconoce cualquier receptor en una televisión.
Gracias y suerte!!!
-
Si lo trabajas a 4MHz, solo basta escribir delay_us(889); -en PBP debe haber alguna funcion similar-, o mejor aun, se puede con un Timer, por ejemplo el Timer2, el cual es muy usado para crear bases de tiempo exactas.
Saludos
-
¿Con el Timer los tiempos son más exactos?
¿Qué diferencia hay al referirse al Timer0 , Timer2?
-
Hola.
Si usas el Timer, el conteo se hace independientemente.
Supongamos que quieres una espera de 1 segundo: Si lo haces con una funcion -con delay_ms(1000);-, durante todo ese tiempo, el PIC no hara nada mas, pero si lo haces con un Timer, puedes seguir con tu codigo normalmente, el conteo lo hace el Timer independientemente.
Diferencias no hay muchas, la forma de configurarlo mas que todo. Revisa el manual de tu compilador para que notes la diferencia.
Saludos
-
Ahh... Ok , ya lo he entendido :D
He estado buscando y no encuentro diferencias entre timer0, timer1, timer2....
Además no encuentro ejemplos simples sobre el timer en PBP. Sólo quiero cojer la idea central, saber que es el prescaler, o lo que necesite saber para hacer un delay con timer en PBP.
Gracias y suerte!!! (Perdonad mi ignorancia , aunque supongo que todos pasan por esto alguna vez)
-
El Timer 2 funciona por comparación, cuando el registro timer2 es igual a PR2 ocurre la interrupción y a causa de ello es mas preciso que otro timers para hacer alguna demora. Porque cuando se escribe en el registro del timer (TMR0, TMR1L, TMR1H, TMR2), se borra la cuenta del preescaler y el conteo se retraza durante 2 ciclos de instrucción.
Saludos!
-
No he entendido nada :? :D
-
Hola, si piensas usar cualquiera de los timer por interrupcion, ten en cuenta que PBP, al ser un compilador de alto nivel, tiene un tiempo de retraso para atender las interrupciones, esto lo digo segun varias pruebas que he realizado.
Si deseas pausas exactas, prueba con el comando pauseus 889 o juega con pulsout.
saludos
-
Es decir que: ¿sería mejor utilizar pauseus o pulsout?
-
.
Algún tutorial sobre los timers 0, 1 y 2:
Timer0 (http://micropic.wordpress.com/2007/06/24/temporizador-timer-0/)
Timer1 (http://micropic.wordpress.com/2007/06/24/temporizador-timer-1/)
Timer2 (http://micropic.wordpress.com/2007/06/24/temporizador-timer-2/)
Los ejemplos están escritos en assembler, pero creo que la explicación la podrás entender igualmente.
Espero que te sirva. Saludos.
-
Muchas gracias mtristan.
Pero pregunto: ¿Es igual de efectiva la función pulsout o pause? ¿Se pueden crear señales "limpias" o exactas?
-
Hola, pauseus genera solamente pausas, pulsout genera un pulso durante un tiempo X pero el tiempo que genera es de buena presicion.
Saludos.
-
Lo malo de pulsout es que el patrón es constante,¿no?. Es decir, enciende , apaga, enciende, apaga.....
Yo necesito diferentes combinaciones por lo que supongo que tendré que hacerlo con pauseus, aunque no sé si así las señales serán de buena precisión... :?
Un saludo y suerte!!