Microcontroladores PIC
PIC (generalmente pronunciado como [pʰɪk]) es una familia de microcontroladores fabricados por Microchip Technology, derivados del PIC1650 desarrollado originalmente por General Instrument's Microelectronics. División. El nombre PIC inicialmente se refería a Controlador de interfaz periférica, y actualmente se expande como Computadora inteligente programable. Las primeras partes de la familia estuvieron disponibles en 1976; en 2013, la empresa había enviado más de doce mil millones de piezas individuales, utilizadas en una amplia variedad de sistemas integrados.
El PIC se diseñó originalmente para usarse con el General Instrument CP1600, el primer microprocesador de 16 bits de un solo chip disponible en el mercado. El CP1600 tenía un bus complejo que dificultaba la interfaz, y el PIC se introdujo como un dispositivo complementario que ofrecía ROM para el almacenamiento de programas, RAM para el manejo de datos temporales y una CPU simple para controlar las transferencias. Si bien esto ofrecía un poder considerable, el marketing de GI era limitado y el CP1600 no fue un éxito. Cuando la compañía escindió su división de chips para formar Microchip en 1985, las ventas del CP1600 estaban prácticamente muertas. En ese momento, el PIC había formado un importante mercado propio y se convirtió en uno de los principales productos de la nueva empresa.
Los primeros modelos solo tenían ROM de máscara para el almacenamiento de código, pero con su derivación pronto se actualizó para usar EPROM y luego EEPROM, lo que hizo posible que los usuarios finales programaran los dispositivos en sus propias instalaciones. Todos los modelos actuales usan memoria flash para el almacenamiento de programas y los modelos más nuevos permiten que el PIC se reprograme solo. Desde entonces, la línea ha experimentado un cambio significativo; la memoria ahora está disponible en 8 bits, 16 bits y, en los últimos modelos, 32 bits de ancho. Las instrucciones del programa varían en número de bits según la familia de PIC y pueden tener 12, 14, 16 o 24 bits de longitud. El conjunto de instrucciones también varía según el modelo, con chips más potentes que agregan instrucciones para funciones de procesamiento de señales digitales. Las implementaciones de hardware de los dispositivos PIC van desde SMD de 6 pines, chips DIP de 8 pines hasta chips SMD de 144 pines, con pines de E/S discretos, módulos ADC y DAC y puertos de comunicaciones como UART, I2C, CAN y incluso USB. Existen variaciones de baja potencia y alta velocidad para muchos tipos.
El fabricante suministra software de computadora para desarrollo conocido como MPLAB X, ensambladores y compiladores C/C++, y hardware de programador/depurador bajo las series MPLAB y PICKit. También están disponibles herramientas de terceros y algunas de código abierto. Algunas partes tienen capacidad de programación en circuito; Hay disponibles programadores de desarrollo de bajo costo, así como programadores de producción de alto volumen.
Los dispositivos PIC son populares entre los desarrolladores industriales y los aficionados debido a su bajo costo, amplia disponibilidad, gran base de usuarios, una extensa colección de notas de aplicación, disponibilidad de herramientas de desarrollo gratuitas o de bajo costo, programación en serie y flash reprogramable. -Capacidad de memoria.
Historia
Concepto original
El PIC original estaba diseñado para usarse con la nueva unidad central de procesamiento (CPU) CP1600 de 16 bits de General Instrument. Para adaptar los buses de datos y direcciones de 16 bits en un chip de paquete en línea dual (DIP) estándar de 40 pines, los dos buses compartían el mismo conjunto de 16 pines de conexión. Para comunicarse con la CPU, los dispositivos tenían que observar otros pines en la CPU para determinar si la información en el bus era una dirección o datos. Dado que solo se presentaba uno de estos a la vez, los dispositivos tenían que observar el bus para pasar al modo de dirección, ver si esa dirección era parte de su rango de entrada/salida asignado a la memoria, "latch" esa dirección y luego espere a que el modo de datos se encienda y luego lea el valor. Además, el 1600 usaba varios pines externos para seleccionar con qué dispositivo intentaba hablar, lo que complicaba aún más la interfaz.
Como los dispositivos de interfaz con el 1600 pueden ser complejos, GI también lanzó una serie de chips de soporte con todos los circuitos necesarios incorporados. Estos incluían controladores de teclado, interfaces de casete para almacenamiento y una gran cantidad de sistemas similares. Para sistemas más complejos, GI introdujo el PIC de 8 bits en 1975. La idea era que un dispositivo usaría el PIC para manejar toda la interfaz con el CP1600 de la computadora host, pero también usaría su propio procesador interno para manejar el dispositivo real al que estaba conectado. Por ejemplo, una unidad de disquete podría implementarse con un PIC hablando con la CPU en un lado y el controlador de disquete en el otro. De acuerdo con esta idea, lo que hoy se conocería como un microcontrolador, el PIC incluía una pequeña cantidad de memoria de solo lectura (ROM) que se escribiría con el código del controlador del dispositivo del usuario y una memoria de acceso aleatorio separada. (RAM) para almacenar en búfer y trabajar con datos. Estos se conectaron por separado, lo que convirtió al PIC en un sistema de arquitectura Harvard con código y datos administrados en rutas internas separadas.
En teoría, la combinación de 1600 CPU y controladores de dispositivos PIC proporcionó un sistema de control de dispositivos de muy alto rendimiento, similar en potencia y rendimiento a los controladores de canal que se ven en las computadoras centrales. En el ejemplo del controlador de disquete, por ejemplo, un solo PIC podría controlar la unidad, proporcionar una cantidad razonable de almacenamiento en búfer para mejorar el rendimiento y luego transferir datos hacia y desde la computadora host mediante el acceso directo a la memoria (DMA) o a través de un código relativamente simple en la CPU La desventaja de este enfoque fue el costo; Si bien el PIC no era necesario para dispositivos de baja velocidad como un teclado, muchas tareas requerirían uno o más PIC para construir un sistema completo.
Si bien el concepto de diseño tenía una serie de características atractivas, General Instrument nunca promocionó fuertemente el 1600, prefiriendo tratar solo con grandes clientes e ignorando el mercado de gama baja. Esto resultó en una aceptación muy pequeña del sistema, siendo Intellivision el único uso realmente generalizado con alrededor de tres millones de unidades. Cuando GI escindió su división de chips para formar Microchip Technology en 1985, terminó la producción del CP1600. En ese momento, sin embargo, el PIC había desarrollado un gran mercado de clientes que lo usaban para una amplia variedad de funciones, y el PIC pasó a convertirse en uno de los productos principales de la nueva empresa.
Después del 1600
En 1985, General Instrument vendió su división de microelectrónica y los nuevos propietarios cancelaron casi todo lo que en ese momento estaba en su mayoría desactualizado. Sin embargo, el PIC se actualizó con una EPROM interna para producir un controlador de canal programable. Al mismo tiempo, Plessey en el Reino Unido lanzó procesadores NMOS numerados PIC1650 y PIC1655 basados en el diseño GI, utilizando los mismos conjuntos de instrucciones, ya sea programable con máscara de usuario o versiones preprogramadas para interfaces de teclado y marcadores automáticos.
En 1998, Microchip presentó el PIC 16F84, una versión flash programable y borrable de su exitoso PIC16C84 programable en serie. En 2001, Microchip introdujo más dispositivos programables flash y la producción total comenzó en 2002.{
Hoy en día, hay disponible una gran variedad de PIC con varios periféricos integrados (módulos de comunicación en serie, UART, núcleos de control de motores, etc.) y memoria de programa de 256 palabras a 64 000 palabras y más (una "palabra& #34; es una instrucción en lenguaje ensamblador, que varía en longitud de 8 a 16 bits, dependiendo de la microfamilia PIC específica).
PIC y PICmicro ahora son marcas comerciales registradas de Microchip Technology. En general, se piensa que PIC significa Controlador de interfaz periférica, aunque General Instruments' El acrónimo original de los dispositivos PIC1640 y PIC1650 iniciales era "Controlador de interfaz programable". El acrónimo fue reemplazado rápidamente por "Computadora inteligente programable".
El Microchip 16C84 (PIC16x84), presentado en 1993, fue la primera CPU de Microchip con memoria EEPROM en chip.
Para 2013, Microchip enviaba más de mil millones de microcontroladores PIC cada año.
Familias de dispositivos
Los microchips PIC están diseñados con una arquitectura Harvard y se ofrecen en varias familias de dispositivos. Las familias de línea de base y de rango medio usan memoria de datos de 8 bits de ancho, y las familias de gama alta usan memoria de datos de 16 bits. La última serie, PIC32MZ, es un microcontrolador basado en MIPS de 32 bits. Los tamaños de palabra de instrucción son 12 bits (PIC10 y PIC12), 14 bits (PIC16) y 24 bits (PIC24 y dsPIC). Las representaciones binarias de las instrucciones de la máquina varían según la familia y se muestran en las listas de instrucciones PIC.
Dentro de estas familias, los dispositivos pueden denominarse PICnnCxxx (CMOS) o PICnnFxxx (Flash). "C" los dispositivos generalmente se clasifican como "No aptos para nuevos desarrollos" (no promocionado activamente por Microchip). La memoria de programa de "C" dispositivos se describe de diversas formas como OTP, ROM o EEPROM. A partir de octubre de 2016, el único producto OTP clasificado como "En producción" es el pic16HV540. "C" los dispositivos con ventanas de cuarzo (para el borrado UV) ya no están disponibles en general.
FOTO10 y FOTO12
Estos dispositivos cuentan con una memoria de código de 12 bits de ancho, un archivo de registro de 32 bytes y una pequeña pila de llamadas de dos niveles de profundidad. Están representados por la serie PIC10, así como por algunos dispositivos PIC12 y PIC16. Los dispositivos básicos están disponibles en paquetes de 6 a 40 pines.
Por lo general, los primeros 7 a 9 bytes del archivo de registro son registros de propósito especial y los bytes restantes son RAM de propósito general. Los punteros se implementan utilizando un par de registros: después de escribir una dirección en el FSR (registro de selección de archivo), el registro INDF (f indirecta) se convierte en un alias para el registro direccionado. Si se implementa RAM en bancos, el número de banco se selecciona mediante los 3 bits altos de la FSR. Esto afecta los números de registro 16–31; los registros 0–15 son globales y no se ven afectados por los bits de selección de banco.
Debido al espacio de registro muy limitado (5 bits), no se asignaron direcciones a 4 registros que rara vez se leen, sino que se escribieron mediante instrucciones especiales (OPTION
y TRIS
).
El espacio de direcciones de la ROM es 512 y solo puede especificar direcciones en la primera mitad de cada página de 512 palabras. Es decir, la instrucción CALL especifica los 9 bits bajos de la dirección, pero solo los 8 bits bajos de esa dirección son un parámetro de la instrucción, mientras que el noveno bit (bit 8) se especifica implícitamente como 0 por la propia instrucción CALL.
Las tablas de búsqueda se implementan utilizando un GOTO
calculado (asignación al registro PCL) en una tabla de instrucciones RETLW
. RETLW devuelve devolviendo en el registro W una constante inmediata de 8 bits que se codifica en la instrucción.
Este "núcleo de referencia" no admite interrupciones; todas las E/S deben ser encuestadas. Hay algunas "línea base mejorada" variantes con soporte de interrupción y una pila de llamadas de cuatro niveles.
Los dispositivos PIC10F32x cuentan con una memoria de código amplia de 14 bits de rango medio de 256 o 512 palabras, un archivo de registro SRAM de 64 bytes y una pila de hardware de 8 niveles de profundidad. Estos dispositivos están disponibles en paquetes SMD de 6 pines y DIP de 8 pines (con dos pines sin usar). Solo hay una entrada y tres pines de E/S disponibles. Hay disponible un conjunto complejo de interrupciones. Los relojes son un oscilador interno de alta frecuencia calibrado de 16 MHz con una selección de velocidades seleccionables mediante software y una fuente de baja potencia de 31 kHz.
FOTO16
Estos dispositivos cuentan con una memoria de código de 14 bits de ancho y una pila de llamadas profunda mejorada de 8 niveles. El conjunto de instrucciones difiere muy poco de los dispositivos básicos, pero los dos bits de código de operación adicionales permiten direccionar directamente 128 registros y 2048 palabras de código. Hay algunas instrucciones misceláneas adicionales y dos instrucciones literales adicionales de 8 bits, suma y resta. El núcleo de rango medio está disponible en la mayoría de los dispositivos etiquetados como PIC12 y PIC16.
Los primeros 32 bytes del espacio de registro se asignan a registros de propósito especial; los 96 bytes restantes se utilizan para RAM de propósito general. Si se usa RAM en bancos, los 16 registros altos (0x70–0x7F) son globales, al igual que algunos de los registros de propósito especial más importantes, incluido el registro STATUS, que contiene los bits de selección del banco de RAM. (Los otros registros globales son FSR e INDF, los 8 bits bajos del contador de programa PCL, el registro de precarga alta de PC PCLATH y el registro de control de interrupción maestro INTCON).
El registro PCLATH proporciona bits de dirección de instrucción de alto orden cuando los 8 bits proporcionados por una escritura en el registro PCL, o los 11 bits proporcionados por GOTO
o CALL
instrucción, no son suficientes para abordar el espacio ROM disponible.
FOTO17
La serie PIC17 nunca llegó a ser popular y ha sido reemplazada por la arquitectura PIC18 (sin embargo, vea los clones a continuación). La serie PIC17 no se recomienda para nuevos diseños y la disponibilidad puede estar limitada a los usuarios.
Las mejoras con respecto a los núcleos anteriores son códigos de operación de 16 bits de ancho (que permiten muchas instrucciones nuevas) y una pila de llamadas de 16 niveles de profundidad. Los dispositivos PIC17 se produjeron en paquetes de 40 a 68 pines.
La serie PIC17 introdujo una serie de características nuevas importantes:
- un acumulador de memoria mapeado
- leer acceso a la memoria de código (tabla lecturas)
- movimientos directos de registro a registro (los núcleos principales necesarios para mover registros a través del acumulador)
- una interfaz de memoria del programa externo para ampliar el espacio de código
- un multiplicador de hardware de 8 bits × 8 bits
- un segundo par de registro indirecto
- auto-incremento/auto-decremento controlado por bits de control en un registro de estado (ALUSTA)
Una limitación importante fue que el espacio de RAM estaba limitado a 256 bytes (26 bytes de registros de funciones especiales y 232 bytes de RAM de uso general), con cambios de banco incómodos en los modelos que admitían más.
FOTO18
En 2000, Microchip presentó la arquitectura PIC18. A diferencia de la serie PIC17, ha demostrado ser muy popular, con una gran cantidad de variantes de dispositivos actualmente en fabricación. A diferencia de los dispositivos anteriores, que en la mayoría de los casos estaban programados en lenguaje ensamblador, C se ha convertido en el lenguaje de desarrollo predominante.
La serie PIC18 hereda la mayoría de las funciones e instrucciones de la serie PIC17, al tiempo que agrega una serie de funciones nuevas importantes:
- la pila de llamadas es 21 bits de ancho y mucho más profundo (31 niveles de profundidad)
- la pila de llamadas puede ser leída y escrita (TOSU:TOSH: registradores de la llama)
- instrucciones de rama condicional
- modo de dirección indexado (PLUSW)
- los registros FSR se extienden a 12 bits, permitiéndoles abordar de forma lineal todo el espacio de dirección de datos
- la adición de otro registro FSR (bringing the number up to 3)
El espacio de RAM es de 12 bits, direccionados mediante un registro de selección de banco (BSR) de 4 bits y un desplazamiento de 8 bits en cada instrucción. Un "acceso" adicional bit en cada instrucción selecciona entre el banco 0 (a=0) y el banco seleccionado por el BSR (a=1).
También está disponible una pila de 1 nivel para los registros STATUS, WREG y BSR. Se guardan en cada interrupción y se pueden restaurar al regresar. Si las interrupciones están deshabilitadas, también se pueden usar en la llamada/retorno de la subrutina configurando el bit s (agregando ", FAST" a la instrucción).
La función de incremento/decremento automático se mejoró eliminando los bits de control y agregando cuatro nuevos registros indirectos por FSR. Según el registro de archivo indirecto al que se acceda, es posible posdecrementar, posincrementar o preincrementar FSR; o formar la dirección efectiva agregando W a FSR.
En dispositivos PIC18 más avanzados, un "modo extendido" está disponible, lo que hace que el direccionamiento sea aún más favorable para el código compilado:
- a new offset addressing mode; some addresses which were relative to the access bank are now interpreted relative to the FSR2 register
- la adición de varias nuevas instrucciones, especialmente para la manipulación de los registros FSR.
Los dispositivos PIC18 aún se desarrollan (2021) y están equipados con CIP (periféricos independientes centrales)
PIC24 y dsPIC
En 2001, Microchip presentó la serie de chips dsPIC, que entró en producción en masa a finales de 2004. Son los primeros microcontroladores inherentemente de 16 bits de Microchip. Los dispositivos PIC24 están diseñados como microcontroladores de propósito general. Los dispositivos dsPIC incluyen además capacidades de procesamiento de señales digitales.
Aunque sigue siendo similar a las arquitecturas PIC anteriores, hay mejoras significativas:
- Todos los registros son 16 bits de ancho
- El contador del programa es de 22 bits (bits 22:1; bit 0 es siempre 0)
- Las instrucciones son 24 bits de ancho
- Espacio de dirección de datos ampliado a 64 KiB
- First 2 KiB se reserva para registros de control periférico
- No se requiere conmutación del banco de datos a menos que la RAM exceda 62 KiB
- "f operand" dirección directa extendida a 13 bits (8 KiB)
- 16 W registros disponibles para operaciones registradas.
(Pero las operaciones en f operands siempre hacen referencia a W0.) - Las instrucciones vienen en formas de palabra byte y (16-bit)
- Stack está en RAM (con W15 como puntero de pila); no hay pila de hardware
- W14 es el puntero de marco
- Los datos almacenados en ROM se pueden acceder directamente ("Visibilidad del Espacio de Programación")
- Interrupciones vectoriales para diferentes fuentes de interrupción
Algunas características son:
- (16×16)-bit multiplicación de ciclo único y otras operaciones de procesamiento de señales digitales
- multiplicación de hardware – acumular (MAC)
- Asistencia para la división de hardware (19 ciclos para la división de 32/16 bits)
- cambio de barril - para los acumuladores y los registros de propósito general
- bit reversal
- soporte de hardware para indexación de bucle
- acceso directo a la memoria periférica
Los dsPIC se pueden programar en C con el compilador XC16 de Microchip (anteriormente llamado C30), que es una variante de GCC.
La ROM de instrucciones tiene 24 bits de ancho. El software puede acceder a la ROM en palabras de 16 bits, donde las palabras pares contienen los 16 bits menos significativos de cada instrucción y las palabras impares contienen los 8 bits más significativos. La mitad superior de las palabras impares se lee como cero. El contador del programa tiene 23 bits de ancho, pero el bit menos significativo siempre es 0, por lo que hay 22 bits modificables.
Las instrucciones vienen en dos variedades principales, con las operaciones más importantes (sumar, xor, turnos, etc.) que permiten ambas formas:
- El primero es como las instrucciones clásicas de PIC, con una operación entre un registro f especificado (es decir, el primer 8K de RAM) y un solo acumulador W0, con un destino seleccionando bits que se actualiza con el resultado. (Los registros W son de memoria. por lo que el f operand puede ser cualquier registro W.)
- La segunda forma es más convencional, permitiendo tres operandos, que pueden ser cualquiera de los registros de 16 W. El destino y una de las fuentes también apoyan los modos de abordaje, permitiendo que el operand esté en memoria apuntado por un registro W.
Línea basada en PIC32M MIPS
PIC32MX
En noviembre de 2007, Microchip presentó la familia PIC32MX de microcontroladores de 32 bits, basados en MIPS32 M4K Core. El dispositivo se puede programar con el compilador MPLAB C de Microchip para microcontroladores PIC32, una variante del compilador GCC. Los primeros 18 modelos actualmente en producción (PIC32MX3xx y PIC32MX4xx) son compatibles pin a pin y comparten el mismo conjunto de periféricos con la familia de dispositivos (16 bits) PIC24FxxGA0xx, lo que permite el uso de bibliotecas, software y herramientas de hardware comunes. Hoy en día, desde 28 pines en pequeños paquetes QFN hasta dispositivos de alto rendimiento con Ethernet, CAN y USB OTG, está disponible una gama completa de microcontroladores de 32 bits de gama media.
La arquitectura PIC32 aportó una serie de características nuevas a la cartera de Microchip, entre las que se incluyen:
- La velocidad de ejecución más alta 80 MIPS (120+ Dhrystone MIPS @ 80 MHz)
- La memoria flash más grande: 512 kB
- Una instrucción por ejecución del ciclo del reloj
- El primer procesador caché
- Permite la ejecución de RAM
- Soporte de velocidad completa / rol final y capacidades USB OTG
- Full JTAG and 2-wire programming and debugging
- Rastreo en tiempo real
PIC32MZ
En noviembre de 2013, Microchip presentó la serie de microcontroladores PIC32MZ, basados en el núcleo MIPS M14K. La serie PIC32MZ incluye:
- 252 MHz de velocidad básica, 415 DMIPS
- Hasta 2 MB Flash y 512KB RAM
- Nuevos periféricos incluyendo USB de alta velocidad, motor criptográfico y SQI
En 2015, Microchip lanzó la familia PIC32MZ EF, utilizando el procesador MIPS M5150 Warrior M-class actualizado.
En 2017, Microchip presentó la familia PIC32MZ DA, que cuenta con un controlador de gráficos integrado, un procesador de gráficos y 32 MB de DDR2 DRAM.
PIC32MM
En junio de 2016, Microchip presentó la familia PIC32MM, especializada en aplicaciones de bajo consumo y bajo costo. El PIC32MM cuenta con periféricos independientes del núcleo, modos de suspensión de hasta 500 nA y paquetes de 4 x 4 mm. Los microcontroladores PIC32MM utilizan MIPS Technologies M4K, un procesador MIPS32 de 32 bits. Están diseñados para un consumo de energía muy bajo y están limitados a 25 MHz. Su principal ventaja es admitir las instrucciones de 16 bits de MIPS, lo que hace que el tamaño del programa sea mucho más compacto (alrededor del 40 %).
PIC32MK
Microchip presentó la familia PIC32MK en 2017, especializada en control de motores, control industrial, Internet industrial de las cosas (IIoT) y aplicaciones CAN multicanal.
Arquitectura central
La arquitectura PIC se caracteriza por sus múltiples atributos:
- Código separado y espacios de datos (Arquitectura de Navarra).
- Excepto PIC32: Las trayectorias separadas de datos e instrucciones de la arquitectura MIPS M4K se fusionan efectivamente en un solo espacio de dirección común por el módulo System Bus Matrix.
- Un pequeño número de instrucciones de longitud fija
- La mayoría de las instrucciones son de ciclo único (2 ciclos de reloj, o 4 ciclos de reloj en modelos de 8 bits), con un ciclo de retraso en las ramas y saltos
- Un acumulador (W0), cuyo uso (como operand de origen) es implícito (es decir, no está codificado en el opcode)
- Todas las ubicaciones de RAM funcionan como registros como fuente y/o destino de matemáticas y otras funciones.
- Una pila de hardware para almacenar direcciones de retorno
- Una pequeña cantidad de espacio de datos accesible (32, 128 o 256 bytes, dependiendo de la familia), extendido a través de la banca
- Data-space mapped CPU, port, and perpheral registers
- Las banderas de estado de ALU se mapean en el espacio de datos
- El contador del programa también se mapea en el espacio de datos y escribible (esto se utiliza para implementar saltos indirectos).
No hay distinción entre el espacio de memoria y el espacio de registro porque la RAM sirve tanto para la memoria como para los registros, y la RAM generalmente se conoce como el archivo de registro o simplemente como los registros.
Espacio de datos (RAM)
Los PIC tienen un conjunto de registros que funcionan como RAM de propósito general. Los registros de control de propósito especial para los recursos de hardware en el chip también se asignan al espacio de datos. La capacidad de direccionamiento de la memoria varía según la serie del dispositivo, y todos los tipos de dispositivos PIC tienen algún mecanismo de banco para extender el direccionamiento a la memoria adicional (pero algunos modelos de dispositivos solo tienen un banco implementado). Las series posteriores de dispositivos cuentan con instrucciones de movimiento, que pueden cubrir todo el espacio direccionable, independientemente del banco seleccionado. En dispositivos anteriores, cualquier movimiento de registro debe lograrse a través del acumulador.
Para implementar el direccionamiento indirecto, un "registro de selección de archivo" (FSR) y "registro indirecto" (INDF) se utilizan. Se escribe un número de registro en el FSR, después de lo cual las lecturas o escrituras en INDF serán en realidad desde o hacia el registro al que apunta el FSR. Los dispositivos posteriores ampliaron este concepto con incrementos/decrementos posteriores y previos para una mayor eficiencia en el acceso a los datos almacenados secuencialmente. Esto también permite que FSR se trate casi como un puntero de pila (SP).
La memoria de datos externa no se puede direccionar directamente, excepto en algunos dispositivos PIC18 con una gran cantidad de pines. Sin embargo, los puertos de E/S generales se pueden usar para implementar un bus paralelo o una interfaz serial para acceder a la memoria externa y otros periféricos (usando subrutinas), con la advertencia de que dicho acceso a la memoria programada es (por supuesto) mucho más lento que el acceso a la memoria. memoria nativa de la MCU PIC.
Espacio de código
El espacio de código generalmente se implementa como ROM en chip, EPROM o ROM flash. En general, no existe ninguna disposición para almacenar código en la memoria externa debido a la falta de una interfaz de memoria externa. Las excepciones son PIC17 y seleccione dispositivos PIC18 de alto número de pines.
Tamaño de palabra
Todos los PIC manejan (y direccionan) datos en fragmentos de 8 bits. Sin embargo, la unidad de direccionabilidad del espacio de código generalmente no es la misma que la del espacio de datos. Por ejemplo, los PIC de las familias de línea de base (PIC12) y de rango medio (PIC16) tienen memoria de programa direccionable en el mismo tamaño de palabra que el ancho de la instrucción, es decir, 12 o 14 bits respectivamente. Por el contrario, en la serie PIC18, la memoria del programa se direcciona en incrementos de 8 bits (bytes), lo que difiere del ancho de instrucción de 16 bits.
Para que quede claro, la capacidad de la memoria del programa generalmente se expresa en número de instrucciones (de una sola palabra), en lugar de bytes.
Pilas
Los PIC tienen una pila de llamadas de hardware, que se utiliza para guardar las direcciones de retorno. La pila de hardware no es accesible por software en dispositivos anteriores, pero esto cambió con los dispositivos de la serie PIC18.
El soporte de hardware para una pila de parámetros de uso general no existía en las primeras series, pero esto mejoró enormemente en la serie PIC18, lo que hace que la arquitectura de la serie PIC18 sea más amigable para los compiladores de lenguaje de alto nivel.
Conjunto de instrucciones
Los conjuntos de instrucciones de PIC varían desde unas 35 instrucciones para los PIC de gama baja hasta más de 80 instrucciones para los PIC de gama alta. El conjunto de instrucciones incluye instrucciones para realizar una variedad de operaciones en registros directamente, en el acumulador y una constante literal, o en el acumulador y un registro, así como para ejecución condicional y bifurcación de programas.
Algunas operaciones, como la configuración y prueba de bits, se pueden realizar en cualquier registro numerado, pero las operaciones aritméticas de dos operandos siempre involucran W (el acumulador), escribiendo el resultado en W o en el otro registro de operandos. Para cargar una constante, es necesario cargarla en W antes de que pueda moverse a otro registro. En los núcleos más antiguos, todos los movimientos de registro debían pasar por W, pero esto cambió en los núcleos de "gama alta" núcleos
Los núcleos PIC tienen instrucciones de salto, que se utilizan para la ejecución condicional y la bifurcación. Las instrucciones de omisión son "omitir si se establece un bit" y "omitir si el bit no está configurado". Debido a que los núcleos anteriores a PIC18 solo tenían instrucciones de bifurcación incondicionales, los saltos condicionales se implementan mediante un salto condicional (con la condición opuesta) seguido de una bifurcación incondicional. Los saltos también son de utilidad para la ejecución condicional de cualquier instrucción inmediata siguiente. Es posible omitir instrucciones de omisión. Por ejemplo, la secuencia de instrucciones "saltar si A; saltar si B; C" ejecutará C si A es verdadero o si B es falso.
La serie PIC18 implementó registros de sombra: estos son registros que guardan varios registros importantes durante una interrupción, brindando soporte de hardware para guardar automáticamente el estado del procesador cuando se atienden interrupciones.
En general, las instrucciones PIC se dividen en cinco clases:
- Operación en registro de trabajo (WREG) con 8 bits inmediatos ("literal") operand. Por ejemplo.
movlw
(Move literal a WREG),andlw
(Y literal con WREG). Una instrucción peculiar de la PIC esretlw
, cargar inmediatamente en WREG y regresar, que se utiliza con ramas computadas para producir mesas de búsqueda. - Operación con WREG y registro indexado. El resultado se puede escribir a cualquiera de los registros de trabajo (por ejemplo.
addwf reg,w
). o el registro seleccionado (por ejemplo,addwf reg,f
). - Pequeñas operaciones. Estos toman un número de registro y un poco de número, y realizan una de las 4 acciones: establecer o aclarar un poco, y probar y saltar en set/clear. Estos últimos se utilizan para realizar ramas condicionales. Las banderas de estado ALU usuales están disponibles en un registro numerado, por lo que es posible realizar operaciones como "branch on carry clear".
- Transferencias de control. Aparte de las instrucciones mencionadas anteriormente, sólo hay dos:
goto
ycall
. - Algunas instrucciones de operación cero diversas, como el regreso de la subrutina, y
sleep
para entrar en modo de baja potencia.
Rendimiento
Las decisiones arquitectónicas están dirigidas a la maximización de la relación velocidad-costo. La arquitectura PIC fue uno de los primeros diseños de CPU escalares y todavía se encuentra entre los más simples y económicos. La arquitectura de Harvard, en la que las instrucciones y los datos provienen de fuentes separadas, simplifica en gran medida el tiempo y el diseño de microcircuitos, y esto beneficia la velocidad del reloj, el precio y el consumo de energía.
El conjunto de instrucciones PIC es adecuado para la implementación de tablas de búsqueda rápida en el espacio del programa. Tales búsquedas toman una instrucción y dos ciclos de instrucción. Muchas funciones se pueden modelar de esta manera. La optimización se ve facilitada por el espacio de programa relativamente grande del PIC (por ejemplo, palabras de 4096 × 14 bits en el 16F690) y por el diseño del conjunto de instrucciones, que permite constantes incrustadas. Por ejemplo, el objetivo de una instrucción de bifurcación puede estar indexado por W y ejecutar un 'RETLW', que hace lo que se le llama: regresar con literal en W.
La latencia de interrupción es constante en tres ciclos de instrucción. Las interrupciones externas deben sincronizarse con el ciclo de instrucción de cuatro relojes, de lo contrario puede haber una fluctuación de ciclo de instrucción. Las interrupciones internas ya están sincronizadas. La latencia de interrupción constante permite que los PIC logren secuencias de temporización de baja fluctuación impulsadas por interrupciones. Un ejemplo de esto es un generador de pulsos de sincronización de video. Esto ya no es cierto en los modelos PIC más nuevos, porque tienen una latencia de interrupción síncrona de tres o cuatro ciclos.
Ventajas
- Pequeñas instrucciones para aprender
- Arquitectura RISC
- oscilador incorporado con velocidades seleccionables
- Nivel de entrada fácil, programación en circuitos más unidades de PICkit en circuito disponibles por menos de $50
- Microcontroladores baratos
- Amplia gama de interfaces incluyendo I2C, SPI, USB, UART, A/D, comparadores programables, PWM, LIN, CAN, PSP y Ethernet
- Disponibilidad de procesadores en paquete DIL hace que sean fáciles de manejar para el uso de pasatiempos.
Limitaciones
- Un acumulador
- Para acceder a toda la memoria RAM de muchos dispositivos es necesario cambiar el registro bancario
- Las operaciones y los registros no son ortogonales; algunas instrucciones pueden abordar la RAM y/o las constantes inmediatas, mientras que otras pueden utilizar sólo el acumulador.
Las siguientes limitaciones de la pila se abordaron en la serie PIC18, pero aún se aplican a los núcleos anteriores:
- La pila de llamadas de hardware no es manejable, por lo que no se puede implementar la conmutación de tareas preventivas
- Las pilas implementadas por software no son eficientes, por lo que es difícil generar código de reentrant y apoyar variables locales
Con la memoria de programa paginada, hay dos tamaños de página de los que preocuparse: uno para CALL e GOTO y otro para GOTO calculado (normalmente se usa para búsquedas en tablas). Por ejemplo, en PIC16, CALL y GOTO tienen 11 bits de direccionamiento, por lo que el tamaño de la página es de 2048 palabras de instrucción. Para GOTO calculados, donde se agrega a PCL, el tamaño de página es de 256 palabras de instrucción. En ambos casos, los bits de dirección superiores los proporciona el registro PCLATH. Este registro debe cambiarse cada vez que se transfiere el control entre páginas. PCLATH también debe ser conservado por cualquier controlador de interrupción.
Desarrollo del compilador
Si bien hay varios compiladores comerciales disponibles, en 2008, Microchip lanzó sus propios compiladores C, C18 y C30, para la línea de procesadores 18F 24F y 30/33F.
A partir de 2013, Microchip ofrece su serie XC de compiladores para usar con MPLAB X. Microchip eliminará gradualmente sus compiladores más antiguos, como C18, y recomienda usar sus compiladores de la serie XC para nuevos diseños.
El conjunto de instrucciones RISC del código de lenguaje ensamblador PIC puede dificultar la comprensión del flujo general. El uso juicioso de macros simples puede aumentar la legibilidad del lenguaje ensamblador PIC. Por ejemplo, el ensamblador original de PIC de Parallax ("SPASM") tiene macros que ocultan W y hacen que el PIC parezca una máquina de dos direcciones. Tiene instrucciones macro como mov b, a
(mover los datos de la dirección a a la dirección b) y add b, a
(añade datos de la dirección a a los datos de la dirección b). También oculta las instrucciones de salto al proporcionar instrucciones de macro de rama de tres operandos, como cjne a, b, dest
(compare a con b y saltar a dest si no son iguales).
Funciones de hardware
Los dispositivos PIC generalmente cuentan con:
- memoria flash (memoria programada con dispositivos MPLAB)
- SRAM (recuerdo de datos)
- EEPROM (programable a tiempo de ejecución)
- Modo de sueño (horros de potencia)
- Reloj temporizador
- Varias configuraciones de osciladores de cristal o RC, o un reloj externo
Variantes
Dentro de una serie, todavía hay muchas variantes de dispositivos según los recursos de hardware que tenga el chip:
- Piezas de uso general I/O
- osciladores internos del reloj
- 8/16/32 bit timers
- Sincrónico/Sincrónico Interfaz de serie USART
- MSSP Peripheral for I2C and SPI communications
- Módulos Capture/Compare y PWM
- Convertidores analógicos a digitales (hasta ~1.0 Msps)
- Soporte USB, Ethernet, CAN interfacing
- Interfaz de memoria externa
- Puntos frontales RF analógicos integrados (PIC16F639, y rfPIC).
- KEELOQ Cifrado de código periférico (código/decódigo)
- Y muchos más
Tendencias
La primera generación de PIC con almacenamiento EPROM ha sido reemplazada casi por completo por chips con memoria flash. Asimismo, el conjunto de instrucciones original de 12 bits del PIC1650 y sus descendientes directos ha sido reemplazado por conjuntos de instrucciones de 14 y 16 bits. Microchip todavía vende versiones OTP (programables una sola vez) y con ventanas (borrables por UV) de algunos de sus PIC basados en EPROM para soporte heredado o pedidos de volumen. El sitio web de Microchip enumera los PIC que no se pueden borrar eléctricamente como OTP. Se pueden pedir versiones con ventana borrable UV de estos chips.
Número de pieza
La F en el número de pieza de un PICMicro generalmente indica que el PICmicro usa memoria flash y se puede borrar electrónicamente. Por el contrario, una C generalmente significa que solo se puede borrar exponiendo el troquel a la luz ultravioleta (lo que solo es posible si se usa un estilo de paquete con ventana). Una excepción a esta regla es el PIC16C84, que utiliza EEPROM y, por lo tanto, se puede borrar eléctricamente.
Una L en el nombre indica que la pieza funcionará a un voltaje más bajo, a menudo con límites de frecuencia impuestos. Las piezas diseñadas específicamente para funcionar con bajo voltaje, dentro de un rango estricto de 3 a 3,6 voltios, están marcadas con una J en el número de pieza. Estas piezas también son excepcionalmente tolerantes a E/S, ya que aceptarán hasta 5 V como entradas.
Herramientas de desarrollo
Microchip proporciona un paquete IDE gratuito llamado MPLAB X, que incluye un ensamblador, un enlazador, un simulador de software y un depurador. También venden compiladores C para PIC10, PIC12, PIC16, PIC18, PIC24, PIC32 y dsPIC, que se integran perfectamente con MPLAB X. Las versiones gratuitas de los compiladores C también están disponibles con todas las funciones. Pero para las versiones gratuitas, las optimizaciones se desactivarán después de 60 días.
Varios terceros desarrollan compiladores de lenguaje C para PIC, muchos de los cuales se integran a MPLAB y/o cuentan con su propio IDE. Un compilador con todas las funciones para el lenguaje PICBASIC para programar microcontroladores PIC está disponible en meLabs, Inc. Mikroelektronika ofrece compiladores PIC en los lenguajes de programación C, BASIC y Pascal.
Existe un lenguaje de programación gráfico, Flowcode, capaz de programar dispositivos PIC de 8 y 16 bits y generar código C compatible con PIC. Existe en numerosas versiones desde una demostración gratuita hasta una edición profesional más completa.
Proteus Design Suite puede simular muchos de los dispositivos PIC populares de 8 y 16 bits junto con otros circuitos que están conectados al PIC en el esquema. El programa a simular puede desarrollarse dentro del mismo Proteus, MPLAB o cualquier otra herramienta de desarrollo.
Programadores de dispositivos
Dispositivos llamados "programadores" se utilizan tradicionalmente para obtener el código del programa en el PIC de destino. La mayoría de los PIC que Microchip vende actualmente cuentan con capacidades ICSP (programación en serie en el circuito) y/o LVP (programación de bajo voltaje), lo que permite programar el PIC mientras se encuentra en el circuito de destino.
Microchip ofrece programadores/depuradores en las series MPLAB y PICKit. MPLAB ICD4 y MPLAB REAL ICE son los programadores y depuradores actuales para ingeniería profesional, mientras que PICKit 3 es una línea de programadores/depuradores de bajo costo para aficionados y estudiantes.
Cargando
Muchos de los PIC basados en flash de gama alta también pueden autoprogramarse (escribir en su propia memoria de programa), un proceso conocido como carga de arranque. Las placas de demostración están disponibles con un pequeño cargador de arranque programado de fábrica que se puede usar para cargar programas de usuario a través de una interfaz como RS-232 o USB, evitando así la necesidad de un dispositivo de programación.
Alternativamente, existe un firmware de gestor de arranque disponible que el usuario puede cargar en el PIC usando ICSP. Después de programar el gestor de arranque en el PIC, el usuario puede reprogramar el dispositivo mediante RS232 o USB, junto con un software informático especializado.
Las ventajas de un cargador de arranque sobre ICSP son velocidades de programación más rápidas, ejecución inmediata del programa después de la programación y la capacidad de depurar y programar usando el mismo cable.
Terceros
Hay muchos programadores para microcontroladores PIC, que van desde los diseños extremadamente simples que se basan en ICSP para permitir la descarga directa de código desde una computadora host, hasta programadores inteligentes que pueden verificar el dispositivo en varios voltajes de suministro. Muchos de estos programadores complejos utilizan ellos mismos un PIC preprogramado para enviar los comandos de programación al PIC que se va a programar. El tipo de programador inteligente es necesario para programar modelos PIC anteriores (principalmente tipo EPROM) que no admiten la programación en circuito.
Los programadores de terceros van desde planes para crear el suyo propio hasta kits de autoensamblaje y unidades listas para usar completamente probadas. Algunos son diseños simples que requieren una PC para realizar la señalización de programación de bajo nivel (por lo general, se conectan al puerto serie o paralelo y constan de algunos componentes simples), mientras que otros tienen la lógica de programación incorporada (por lo general, usan un puerto serie). o una conexión USB, suelen ser más rápidos y, a menudo, se construyen utilizando los propios PIC para el control).
Depuración
Depuración en circuito
Todos los dispositivos PIC más nuevos cuentan con una interfaz ICD (depuración en circuito), integrada en el núcleo de la CPU, que permite la depuración interactiva del programa junto con MPLAB IDE. Los depuradores MPLAB ICD y MPLAB REAL ICE pueden comunicarse con esta interfaz mediante la interfaz ICSP.
Sin embargo, este sistema de depuración tiene un precio, a saber, un recuento limitado de puntos de interrupción (1 en dispositivos más antiguos, 3 en dispositivos más nuevos), pérdida de algunas E/S (con la excepción de algunos PIC de 44 pines de montaje en superficie que tienen líneas dedicadas para la depuración) y la pérdida de algunas funciones en el chip.
Algunos dispositivos no son compatibles con la depuración en el chip debido al costo o la falta de pines. Algunos chips más grandes tampoco tienen módulo de depuración. Para depurar estos dispositivos, se requiere una versión especial -ICD del chip montada en una placa secundaria que proporcione puertos dedicados. Algunos de estos chips de depuración pueden funcionar como más de un tipo de chip mediante el uso de puentes seleccionables en la placa secundaria. Esto permite que las arquitecturas prácticamente idénticas que no cuentan con todos los dispositivos periféricos en el chip sean reemplazadas por un solo chip -ICD. Por ejemplo: el 16F690-ICD funcionará como una de seis partes diferentes, cada una de las cuales presenta ninguno, algunos o todos los cinco periféricos en chip.
Emuladores en circuito
Microchip ofrece tres emuladores completos en circuito: el MPLAB ICE2000 (interfaz paralela, un convertidor USB está disponible); el MPLAB ICE4000 más nuevo (conexión USB 2.0); y más recientemente, el REAL ICE (conexión USB 2.0). Todas estas herramientas se utilizan normalmente junto con MPLAB IDE para la depuración interactiva a nivel de fuente del código que se ejecuta en el destino.
Sistemas operativos
Los proyectos PIC pueden utilizar sistemas operativos en tiempo real como FreeRTOS, AVIX RTOS, uRTOS, Salvo RTOS u otras bibliotecas similares para la programación y priorización de tareas.
Un proyecto de código abierto de Serge Vakulenko adapta 2.11BSD a la arquitectura PIC32, bajo el nombre de RetroBSD. Esto trae un sistema operativo familiar similar a Unix, que incluye un entorno de desarrollo integrado, al microcontrolador, dentro de las limitaciones del hardware integrado.
Clones
Paralaje
Parallax produjo una serie de microcontroladores tipo PICmicro conocidos como Parallax SX. Actualmente está descontinuado. Diseñados para ser arquitectónicamente similares a los microcontroladores PIC utilizados en las versiones originales del BASIC Stamp, los microcontroladores SX reemplazaron al PIC en varias versiones posteriores de ese producto.
Los SX de Parallax son microcontroladores RISC de 8 bits, que usan una palabra de instrucción de 12 bits, que se ejecutan rápidamente a 75 MHz (75 MIPS). Incluyen hasta 4096 palabras de 12 bits de memoria flash y hasta 262 bytes de memoria de acceso aleatorio, un contador de ocho bits y otra lógica de soporte. Hay módulos de biblioteca de software para emular interfaces I²C y SPI, UART, generadores de frecuencia, contadores de medición y convertidores A/D PWM y sigma-delta. Otras interfaces son relativamente fáciles de escribir y los módulos existentes se pueden modificar para obtener nuevas funciones.
PKK Milandr
El PKK ruso Milandr produce microcontroladores utilizando la arquitectura PIC17 como la serie 1886. La memoria de programa consta de hasta 64 kB de memoria Flash en el 1886VE2U (ruso: 1886ВЕ2У) o 8kB EEPROM en el 1886VE5U (1886ВЕ5У). Los modelos 1886VE5U (1886ВЕ5У) a 1886VE7U (1886ВЕ7У) están especificados para el rango de temperatura militar de -60 °C a +125 °C. Las interfaces de hardware en las distintas partes incluyen USB, CAN, I2C, SPI, así como convertidores A/D y D/A. El 1886VE3U (1886ВЕ3У) contiene un acelerador de hardware para funciones criptográficas según GOST 28147-89. Incluso hay chips endurecidos por radiación con las designaciones 1886VE8U (1886ВЕ8У) y 1886VE10U (1886ВЕ10У).
ELAN Microelectrónica
ELAN Microelectronics Corp. en Taiwán fabrica una línea de microcontroladores basados en la arquitectura PIC16, con instrucciones de 13 bits y un espacio de direcciones RAM más pequeño (6 bits).
Semiconductor Holtek
Holtek Semiconductor fabrica una gran cantidad de microcontroladores muy económicos (tan bajos como 8,5 centavos en cantidad) con un conjunto de instrucciones de 14 bits sorprendentemente similar al PIC16.
Otros fabricantes en Asia
Muchos microcontroladores OTP de ultra bajo costo de fabricantes asiáticos, que se encuentran en la electrónica de consumo de bajo costo, se basan en la arquitectura PIC o en una forma modificada. La mayoría de los clones solo tienen como objetivo las piezas de referencia (PIC16C5x/PIC12C50x). Microchip ha intentado demandar a algunos fabricantes cuando la copia es particularmente atroz, sin éxito.
Contenido relacionado
Historia del motor a reacción (jet)
Motor radial
Motor V12
Microcontroladores AVR
CMOS