Recomendaciones de microcontroladores PIC

3

Ya que algunos de ustedes ya han leído algunas de mis publicaciones aquí donde escribí que prefería que los AVR / ARM se pregunten por qué ahora quiero saber algo acerca de los PIC.

Aunque a uno le guste u odie, ofrece muchas ventajas a precios muy bajos (CANbus y Ethernet, RTCC, muchos puertos I2C y SPI y UART).

Finalmente, parecen estar entre algunos de los MCU más ampliamente utilizados en la industria (además, por ejemplo, del 8051, que aunque antiguo todavía se usa ampliamente), por lo que aprenderlos podría ser positivo para un trabajo.

Por lo tanto, quería preguntar: ¿qué arquitectura de MCU elegirías entre las muchas disponibles? PIC16 / PIC18 / PIC24F / PIC24H / dsPIC30 / dsPIC33 / PIC32?

Lo pregunto porque me parece que sus arquitecturas son muy diferentes entre sí. Por lo tanto, las instrucciones de montaje diferirán significativamente. Realmente no si en C estas diferencias son menos importantes.

Sé que no puedes realmente darme una respuesta "general" ya que cada MCU es más adecuada para una aplicación específica, pero espero que puedas darme consejos para evitar el uso de algunos MCU obsoletos y elegir los más nuevos para ~ el mismo precio.

Esto es AFAIK, donde estarían mejor preparados para:

  • PIC12 / PIC16 / PIC18: circuitos básicos (controles LED, interruptores, ADC básico, DAC, SPI e I2C y UART), 8 bits [básicamente lo que haces con cualquier AVR] (muy barato)
  • PIC24F / PIC24H: circuitos más complejos, ethernet MAC, 16 bits
  • dsPIC30 / dsPIC33: operaciones que involucran el procesamiento de señales digitales (no planeo hacerlas en este momento)
  • PIC32: la mayoría de los circuitos complejos, CAN / CANbus, ethernet MAC, 32 bits ( relativamente caro)

Ya que tengo algunos proyectos en mente, ilustraré lo que elegí para algunas aplicaciones pequeñas, para que puedas demostrar que estoy equivocado :)

  • Medidor de energía: PIC32, ya que con SPI / I2C se comunicará con un medidor de potencia IC, mientras que CAN / CANbus pasará la información medida a un host (básicamente un sistema de medidor de energía distribuido con un medidor en cada enchufe [significativo] )
  • Convertidor CC / CC, cargador de batería, ...: PIC12 / PIC16 / PIC18 / PIC24F / PIC24H, básicamente para hacer un PWM y retroalimentación negativa con ADC

Aceptaré cualquier declaración en la que las MCU prefieran / eviten para una aplicación en particular. Sé que algunos de ustedes pueden querer usar AVRs / ARMs / MSP430 y cada MCU tiene su propio campo de aplicación. Y, por cierto, no estoy diciendo que solo use PIC. Solo que para empezar puede ser mejor usar no todas las arquitecturas a la vez.

Por ejemplo, en mi opinión:

  • Tomaría un MSP430 para aplicaciones de bajo consumo o para ADC > = 16 bits integrado
  • Tomaría un AVR para un conjunto de instrucciones muy rápido (la mayoría son instrucciones de 1 ciclo)
  • Tomaría un ARM para funciones más avanzadas y velocidad / memoria

Sin embargo, como los PIC suelen ser los más baratos y con la mayoría de los periféricos, creo que es mejor conocer las características de cada familia de PIC. No sé si hoy en día PIC12 / PIC16 están en desuso, especialmente porque escuché algunas cosas malas sobre su "conjunto de instrucciones complicadas", pero AFAIK hoy en día es un poco mejor.

    
pregunta user51166

2 respuestas

3

Estéticamente, mi arquitectura favorita en muchos fue la serie de 14 bits. La arquitectura PIC18Fxx de 16 bits mejora algunas cosas, pero me parece que el diseño es menos estético. La arquitectura que más te guste probablemente dependerá de la estética de tu diseño, de la medida en que te encuentres deseando que las cosas se hayan diseñado de manera diferente y de la medida en que dichos deseos disminuyan tu disfrute al trabajar con ellas.

Desde una perspectiva de diseño, no hay ninguna razón particular por la que las direcciones de código y las de datos deban ser iguales. Una cosa que me gusta de los PIC de 14 bits es que agregar un número a una dirección de instrucciones avanza con tantas instrucciones. Por el contrario, en el PIC18X, cada instrucción toma dos direcciones. En consecuencia, los saltos computados que usan un selector de 8 bits se limitan a un rango de 128 instrucciones en lugar de 256. Es un pequeño detalle, pero tener un contador de programa cuyo bit más bajo no es funcional parece poco estético.

Además, las partes de PIC18xx agregan un hardware de ciclo único, pero desafortunadamente ya que requiere que un operando esté en W pero coloca los resultados en un par fijo de otros registros, no se puede usar de manera muy efectiva para múltiples Operaciones de precisión. Si tuviera mis druthers, habría dos tipos de instrucciones de multiplicación:

  1. Multiplicación simple: almacene W en el registro multiplicador y almacene op * W en PRODH: W
  2. Multply-add --Store PRODH + op * multiplicar registro en PRODH: W

Con este patrón, una operación 16x16 se representaría como:

  movf  OP1L,W
  mul   OP2L
  movwf RESULT0
  mula  OP2H
  movff OP2L,MULTR
  mula  OP2L
  movwf RESULT1
  mula  OP2H
  muvwf RESULT2
  movff PRODH,RESULT3

Además, se podrían realizar multiplicaciones de longitud arbitraria con un costo promedio de poco más de dos ciclos por producto parcial 8x8, utilizando el patrón repetido:

  mula   POSTINC0,c
  addwfc POSTINC1,f,c

Ese patrón multiplicaría un número de múltiples bytes por un valor de 8 bits y agregaría el resultado a otro número de múltiples bytes.

Tal como está, creo que lo mejor que se puede hacer para una multiplicación extendida es hacer la multiplicación a un búfer de destino sin hacer un agregado incorporado, a un costo de seis ciclos por producto parcial de 8x8, y luego gastar otro dos ciclos por producto parcial que agregan ese resultado al resultado parcial anterior de 8xN.

  movf   multiplier,w
  mulwf  POSTINC0,c
  movf   PRODL,w,c
  addwfc POSTINC1,w
  movff  PRODH,INDF1

Cuatro veces más que lo que se podría lograr con un conjunto de instrucciones ligeramente diferente. No sé si he visto ningún procesador que incluyera una función para calcular PRODH + Op1 * Op2, pero sería una función muy simple de incluir en multiplicados basados en desplazadores, y facilita el cálculo de anchos de productos arbitrarios con un costo fijo de hardware. . En realidad, dado que el PIC toma cuatro relojes de hardware por instrucción, el hardware requerido para permitir una multiplicación de 16xN o 32xN sería bastante modesto; al computar productos grandes, un 16xN o 32xN se multiplica con un uso de registro adecuado que ofrecería una aceleración de 2x o 4x.

    
respondido por el supercat
-3

Stick to ARM. Son más poderosos en todas las áreas y algunos de ellos son menos costosos que muchos PIC de 16 bits.

    
respondido por el Jayprakash Shet

Lea otras preguntas en las etiquetas