¿Cómo elegir el 'adecuado'? Tengo varias dudas ahora que empiezo en esto.
La especificación del PIC nos da generalmente el rango de mínimo y máximo de frecuencia, en función de ello y nuestras necesidades podemos elegir el cristal. ¿Correcto? ¿Alguna recomendación?
Los cristales suelen tener una carga de capacitancia. ¿Qué es? ¿Cómo saber cual es la adecuada o recomendada? No sé que función tiene este valor y/o en qué afecta.
Supongo que sera en cuanto a la precision del oscilador. Los condensadores que colocas luego para el micro, vienen especificados en el datasheet del micro segun la frecuencia del cristal.
Sí, la parte del condensador la sé. La que no sé en qué tener en cuenta es la que viene en la especificación del cristal. ¿Me olvido de ella?
Si, salvo aplicaciones criticas donde necesites precision, puedes olvidarte. Te vale cualquier cristal, incluso puedes hacerlo con un R-C, que tambien lo admiten los micros.
¿A qué te refieres con R-C?
¿Usáis condensadores electrolíticos?
Voy a coger un pack de cristales de 4Mhz. ¿Es un buen valor para empezar verdad? Para probar con distintos pics creo que me basta.
El valor de 4mhz es estandar, puedes ir hasta 20Mhz en muchos modelos, pero para aplicaciones normales y para empezar, te sobra con 4.
Con un circuito R-C, haces un oscilador, que te puede servir para el micro, aunque no es recomendable.
Los condensadores del cristal son ceramicos, los naranjitas con forma de lenteja. COn el valor de 22pF vas a todos los lados, te vale para todo, asi que pidete un pack.
Genial, gracias, tengo ganas de echar mano al pickit 3 y cacharrear.
Para empezar necesitas, cristal de 4mhz, condensadores de 22pF, y resistencias de 10k. Eso es lo minimo para poner en marcha el micro. A partir de ahi ya, lo que precises
mejor con 10Mhz, le será mas fácil calcular tiempos
Tomo nota. Con los de 10 MHz seguiría siendo viable usar condensadores de 22pF?
ark escribió:mejor con 10Mhz, le será mas fácil calcular tiempos
Calcular tiempos? Al micro? No tiene mucho misterio tampoco
En el apartado de oscillator configurations tienes los fatos en los datasheets
Imagino que se refiere a los retardos, para calcular de cabeza cuantas instrucciones necesitas. Pero si es por eso, para empezar 4MHz está muy bien. Recordad que en los PIC, por su arquitectura, se necesitan 4 ciclos de reloj para ejecutar una instrucción, por tanto funcionando a 4MHz, la velocidad por instrucción (Los famosos MIPs que seguro habéis visto comparados por ahí) es de 1MHz (O 1MIPs). O lo que es lo mismo, se ejecutará una instrucción cada 0,000001 segundos (O 1 microsegundo)
Con el de 10MHz tienes 2,5 MIPs, pero eso puede liar un poco más, pues es ejecutar una instrucción cada 0,0000004 segundos (O 0,4 microsegundos)
Y ese mismo tiempo (Aplicando prescalers/postscalers) se usa para los timers, así que eso, quizá 4MHz sea lo más sencillo para un principiante.
Pero eso es para casos en los que tienes que hilar fino, para empezar no es algo que tengas en cuenta.
Con la explicación de Thorontir acabo de recordar alguna clase de universidad y me ha quedado bastante claro. Muchas gracias.
Por cierto, al final me convencisteis y pediré el pickit 3. En cuantos reciba todo intentaré documentar los primeros ejemplos y publicarlos por aquí, a ver si seguís corrigiéndome o le sirven a otros que quieran arrancar en PIC.
Thorontir escribió:Imagino que se refiere a los retardos, para calcular de cabeza cuantas instrucciones necesitas. Pero si es por eso, para empezar 4MHz está muy bien. Recordad que en los PIC, por su arquitectura, se necesitan 4 ciclos de reloj para ejecutar una instrucción, por tanto funcionando a 4MHz, la velocidad por instrucción (Los famosos MIPs que seguro habéis visto comparados por ahí) es de 1MHz (O 1MIPs). O lo que es lo mismo, se ejecutará una instrucción cada 0,000001 segundos (O 1 microsegundo)
Con el de 10MHz tienes 2,5 MIPs, pero eso puede liar un poco más, pues es ejecutar una instrucción cada 0,0000004 segundos (O 0,4 microsegundos)
Y ese mismo tiempo (Aplicando prescalers/postscalers) se usa para los timers, así que eso, quizá 4MHz sea lo más sencillo para un principiante.
Hablas de programar en ASM, donde si te quieres hacer una funcion delay si que tienes que tener en cuenta lo que tarda cada instruccion en ejecutarse, pro ejemplo ???
grafisoft escribió:Hablas de programar en ASM, donde si te quieres hacer una funcion delay si que tienes que tener en cuenta lo que tarda cada instruccion en ejecutarse, pro ejemplo ???
Si, por ejemplo.
Imagina que tienes un servo, que lo llevas con una función que genera pulso de 0,5 a 2,5 ms de tiempo en alto, y luego hasta 20 en bajo. Una forma de "no joder la onda" (Que tampoco es necesario, comunicar por UART no cuesta tanto, y si lo haces por interrupción es más sencillo, pero por poner un ejemplo) es poner el pin a nivel alto, miras si ha llegado algo, si ha llegado lo procesas (Sabes de antemano cuanto tardas en procesarlo, sólo tienes que multiplicar por el tiempo de instrucción) y si no ha llegado nada metes la cantidad de NOPs equivalente. Y luego otro tanto con lo que te falte hasta los 0,5ms de mínimo. Así, llegue algo o no, ese mínimo siempre dura 0,5ms, y son 0,5ms "clavados" e "inalterables". Además, metes ahí los cálculos para saber cuanto va a durar la parte variable y demás...
Todo eso en ASM sabes cuanto va a tardar (Exactamente los ciclos de instrucción necesarios multiplicados por el tiempo de instrucción) mientras que en C vas "a la aventura" por que entre que hará las cosas como vea, optimizará como quiera y tal...
Por si teneis curiosidad, en las datasheet, junto con las instrucciones del micro, además de explicarte lo que hace y lo que necesita de parámetros, te dice los ciclos de instrucción que necesita, por que sumar, restar o tal es sólo un ciclo, pero los saltos y comparaciones pueden ser 2, o incluso 4 ciclos.
Pero vamos, es raro tener necesidad de tanta precisión. Y si la tienes, siempre te queda la opción de meter código ASM dentro de C (En C18 era _asm InstrucciónDeEnsamblador _endasm creo recordar). Pero son de esas cosas que nunca está de más saber
Si haces la programacion en C, no hace falta tener esto en cuenta. Tienes funciones de uS o mS para las pausas, o los timers y generadores de pwm.
Si que es cierto que si vas a delays muy pequeños, empiezas a notar el tiempo de ejecucion de las instrucciones. Esto se ve bien en el Osciloscopio
Thorontir escribió:Imagino que se refiere a los retardos, para calcular de cabeza cuantas instrucciones necesitas. Pero si es por eso, para empezar 4MHz está muy bien. Recordad que en los PIC, por su arquitectura, se necesitan 4 ciclos de reloj para ejecutar una instrucción, por tanto funcionando a 4MHz, la velocidad por instrucción (Los famosos MIPs que seguro habéis visto comparados por ahí) es de 1MHz (O 1MIPs). O lo que es lo mismo, se ejecutará una instrucción cada 0,000001 segundos (O 1 microsegundo)
Con el de 10MHz tienes 2,5 MIPs, pero eso puede liar un poco más, pues es ejecutar una instrucción cada 0,0000004 segundos (O 0,4 microsegundos)
Y ese mismo tiempo (Aplicando prescalers/postscalers) se usa para los timers, así que eso, quizá 4MHz sea lo más sencillo para un principiante.
razon no te falta, habia olvidado ese detalle ! gracias por recordarmelo
programar en C hace que olvides muchas cosas jejejeje
Programando en C, es cierto que te acomodas, pero que puedes insertar codigo en ASM para aquellas partes criticas del programa que necesites que haga lo que tu quieras que haga
|