El tiempo más rápido que un PIC puede establecer y borrar un pin

¿Cuál es el tiempo más rápido que se puede configurar y borrar un microcontrolador (PIC16 en este caso)? Se define por la frecuencia, pero no conozco la fórmula para calcular el tiempo más rápido en que se puede configurar y borrar un solo pin.

Suponiendo que la frecuencia (XTAL) es de 20 MHz y que no hay retrasos en el medio, ¿cuál es el tiempo necesario para que se establezca y borre el pin?

Por ejemplo:

RB2=0;  
RB2=1;  
RB2=0;

¿Cuál es el tiempo que RB2 está alto?

Respuestas (2)

Depende del PIC en particular, ya que algunos PIC pueden ejecutar una instrucción por ciclo, y otros, por ejemplo, ejecutan una instrucción por cada cuatro ciclos del reloj del sistema.

Aunque el OP solicitó información sobre un PIC16 de 20 MHz, dado que eso ya se ha abordado, muestro información para la versión más rápida en todas las diferentes familias de PIC. Donde hay diferencias significativas entre las piezas de varias subfamilias, como PIC24F/PIC24EP y PIC32MX/PIC32MZ, muestro ambas por separado.

Obtuve los números ingresando al sitio web de Digi-Key , buscando piezas para cada familia y luego seleccionando la velocidad más alta. Luego saqué una hoja de datos en una parte de ejemplo, que también verificó el valor de MIPS.

Family       Clock    Speed    I/O toggle time

PIC10F      16 MHz    4 MIPS    250 ns
PIC12F      20 MHz    5 MIPS    200 ns
PIC16F      20 MHz    5 MIPS    200 ns  <--- example in the original question
PIC16F      48 MHz   12 MIPS     83 ns
PIC18F      64 MHz   16 MIPS     62 ns
PIC24F      32 MHz   16 MIPS     62 ns
PIC24EP     70 MHz   70 MIPS     28 ns
dsPIC30     40 MHZ   30 MIPS     33 ns        
dsPIC33EP   70 MHz   70 MIPS     28 ns
PIC32MX    100 MHz  100 MIPS     10 ns
PIC32MZ    200 MHz  200 MIPS      5 ns

Si alguien tiene alguna corrección que hacer en esta tabla, no dude en editarla.

MIPS es millón de instrucciones por segundo. El tiempo de alternancia de E/S es la cantidad de tiempo que el pin de E/S estaría encendido o apagado en nanosegundos (ns), y se calcula como un millón dividido por el número de MIPS.

Todos estos procesadores tienen la capacidad de activar o desactivar un pin de E/S en una sola instrucción. Las instrucciones en sí varían según el procesador.

En la sección 18.3 de una hoja de datos de la familia dsPIC30, se muestra cómo llegan a 30 MIPS, no desde los 40 MHz, sino usando el reloj interno.
Gracias. Debería haber pensado en el PLL. Esos cálculos pueden volverse un poco extraños a veces, como el PIC24EP, con un reloj interno de 7,37 MHz, terminé en 69,6 MIPS.
Su gráfico no es del todo correcto para las partes del EP. Las escrituras en registros de funciones especiales que no son de la CPU toman dos ciclos de instrucción, no uno como en la mayoría de los otros PIC. Un 33EP a la velocidad máxima de 70 MIPS solo puede ejecutar algo como "BSET PORTB, #2" cada 28,6 ns. Además, algunos PIC tienen generadores PWM que pueden producir pulsos más cortos que un ciclo de instrucción. No todo es tan simple como su mesa.
@OlinLathrop Gracias por su corrección. Debería haberlo sabido mejor, estoy usando un 24EP en un proyecto actual. También estoy usando un PIC32MX (80 MHz, no tengo uno de los más nuevos de 100 MHz), y eso puede hacer una instrucción de E/S por ciclo.

Si está utilizando un cristal de 20 MHz, eso significa que tiene 5 MIPS (5 millones de instrucciones por segundo), porque internamente los 20 MHz se dividen por 4.

Eso significa que una instrucción toma 1 s 5000000 = 200 norte s .

Puede lograr lo que quiere en el ensamblaje, así:

bcf PORTB, 2   // Sets the pin state to 0
bsf PORTB, 2   // Sets the pin state to 1
bcf PORTB, 2   // Sets the pin state to 0

Esto muestra que cambiar el estado del pin requiere una instrucción, por lo tanto, el tiempo mínimo que el pin estaría encendido es de 200 ns (si lo borra directamente de nuevo).

Solo tengo experiencia con PIC16 y PIC18, no estoy seguro acerca de dsPIC, PIC32 y todas las demás variedades. Pero, en general, si conoce el número de instrucciones por segundo (puede calcularlo a partir de la configuración del oscilador), puede calcular el tiempo mínimo, como lo dice.

Gracias por la rápida respuesta. Lo aceptaré como respuesta. Estoy usando PIC16 en el proyecto actual. ¿La tercera línea del código comienza con bcf o bsf?
@Triak feliz de ayudar. No se apresure a aceptar la respuesta, nadie tiene prisa, y al no aceptar la respuesta tan rápido, atraerá más atención (y posiblemente mejores respuestas) a su pregunta. También puedes votar a favor las respuestas que fueron útiles.
Curiosamente, el PIC10 funciona con una instrucción por ciclo. El PIC18 es como el PIC16 (una instrucción por cuatro ciclos), y el PIC24 y el PIC32 son ambos una instrucción por ciclo. Por lo tanto, el PIC32MX, a 80 MHz, puede alternar los pines hacia arriba y hacia abajo en 12,5 ns; lo he visto en un osciloscopio.
@tcrosley Lamento que haya eliminado su respuesta. Deberíamos haber convertido esto en una pregunta general sobre los tiempos mínimos de instrucción en diferentes sucursales, y la habrías respondido mucho mejor.
Mientras escribía mi respuesta, noté que el OP mencionó en un comentario que estaba usando un PIC16 (que no se mencionó en la pregunta original), por lo que mi respuesta no era aplicable. He dado especificaciones para las otras familias principales de PIC en un comentario anterior.
@tcrosley sí, muchas gracias por eso. Sentí que estaba robando tu trueno.
@tcrosley Lo siento por no especificar la clase de PIC que uso en el proyecto. Pensé que todos los PIC funcionan de la misma manera.
@tcrosley el pic10 (supongo que te refieres a pic10f200, etc.) es un núcleo de 12 bits, por lo que funciona con 4 relojes/instrucciones, al igual que el pic12 y el pic 16 (núcleos de 12 y 14 bits).
@WoutervanOoijen sí, me equivoqué en eso: estoy recuperando mi respuesta y dando información (con suerte, correcta) sobre todas las familias de PIC.
Excelente. Edité la pregunta para que sea general. @Triak, acepte la respuesta de tcrosley cuando la haya recuperado. Será más útil para futuros visitantes.
Solo un pensamiento, pero ¿la capacitancia de salida y la fuerza de accionamiento limitada del pin de salida de los microcontroladores limitarían la frecuencia máxima a algo más lento de lo que teóricamente se puede lograr si solo se tiene en cuenta la velocidad del reloj de los microcontroladores?
@gbmhunter Lo siento, no estaría seguro, aunque parece que tienes razón. Pero eso debería tener su propia pregunta ;-)