PICduino FreeSensors

A continuación se muestra una propuesta de placa controladora PICduino, es decir una placa con el form-factor y pines de la Arduino UNO, pero basada en un µControlador PIC. El objetivo es poder construir por uno mismo una placa controladora, logrando independencia de los µControladores AVR, y poder modularizar también esta parte del sistema.

DISEÑO

De las varias posibles soluciones, se decide implementar el proyecto Pingüino, de modo de aprovechar la posibilidad que tienen los PIC 18F2550/4550 de conectarse directamente al puerto USB de la computadora. El proyecto Pingüino desde el software plantea el uso específico de ciertos pines, y en la actualidad tiene algunas otras limitaciones. Si a esto sumamos el uso de 3 pines exclusivos para USB termina sucediendo una cierta escasez de pines, especialmente para el 18F2550. Sin embargo, se considera que esto se compensa ampliamente por las ventajas obtenidas:

- En la PCB solo va el chip del µControlador en zócalo común mas el regulador de voltaje de 5 V, no hay componentes SMD.

- Se puede hacer con PCB de simple faz por cualquier aficionado a la electrónica

Debido a la similitud entre el 18F2550 y el 4550, se decide colocar zócalos para ambos micros en la PCB, de modo de poder optar en cualquier momento por cualquiera de los dos, de la misma forma planteada en la placa Icaro NP06, también basada en Pingüino.

En la siguiente tabla se define la equivalencia entre los pines de salida de la controladora y los pines de ambos modelos de PIC, pero teniendo el cuenta el uso dado para conectar las shields del sistema FreeSensors. En la última columna se muestran los pines definidos en Pinguino para el 2550 (lamentablemente no se sigue la misma numeración en el 4550).

Notas:

(1) Por una limitación actual del bootloader de Pingüino, si al menos una de las entradas del puerto RA es usada como entrada analógica AI, entonces las 5 entradas deben ser AI. Esto hace que por ahora RA5 = AN4 no pueda usarse como un pin digital adicional en vez de usarlo como analógico. En Arduino UNO no se estaban usando ni A4 ni A5 por haber reservado esos pines para I2C, por lo que la falta de A5 no hubiera sido un problema. Por otro lado, RA5=AN4 es usado como Slave Select en SPI según la datasheet del 18F2550 (aunque no necesariamente es asi en la Pingüino API) en cuyo caso debiera reconfigurarse como digital en vez de analógico.

(2) Se elige RB2 por ser la única INT hardware que queda disponible (INT2) luego de haber reservado RB0 y RB1 para I2C.

(3) En Arduino el P13 es usado para el Led del usuario y puede ser salida o entrada. En Pinguino RA4 puede usarse como salida digital (está asociado al led de RUN), de hecho internamente se define como USERLED. La lógica de ese led verde de Run es negativa.

(4) Esos pines podrían configurarse con jumpers para poder opcionalmente conectarse con RC1 y RC2 que tienen salidas PWM. De esta forma, las únicas 2 salidas PWM del PIC podrían usarse en la Motor shield para controlar 2 servos (por defecto en P9 y P10) o bien para controlar la velocidad de los 2 motores DC (en P5 y P6). En el caso del 4550 se podría conectar a otros 2 pines (RD5, RD6) cuando no se conectan a las salidas PWM. Por otro lado, la Pingüino servo library podría controlar servos en cualquiera de los pines.

(5) Es un regulador de 3.3V interno usado para comunicaciones USB. Requiere tener conectado un capacitor de 220 nF.

En la datasheet del PIC, tanto las comunicaciones SPI como las I2C usan los pines RB0 y RB1. Resta determinar cuales son los pines usados por SPI en el software (libreria Pingüino SPI) y/o usar otros pines disponibles en el caso del 4550. También se podrían realizar pruebas para determinar la factibilidad de uso no-simultáneo de los pines para poder compartirlos. En el caso de SPI resta también definir el tema del Slave Select (SS), por ejemplo, en la libreria Pingüino para leer tarjetas SD, para SS usa otro pin diferente.

En la siguiente tabla se procede a una comparativa entre los distintos PICduino, ahora desde el punto de vista de los pines de un 18F2550. En algunas de esas otras PICduino no hay relativa escasez de pines porque no usan la comunicación USB directa, liberando en esos casos los tres pines RC3, RC4, RC5 del PIC. La última columna no corresponde a una PICduino, sino al hardware original del proyecto Pingüino:

Notas:

(1) Usando jumpers, las únicas 2 salidas PWM del PIC podrían usarse en la Motor shield para controlar 2 servos (por defecto en P9 y P10) o bien para controlar la velocidad de los 2 motores DC (conectados en P5 y P6).

(2) Las pines del bus A4 y A5 van a jumpers que permiten direccionarlos o bien a RA4 y RA5 para usarlos como entradas analógicas, o bien direccionarlos a RC4 y RC3 para usarlos en comunicaciones I2C, no usando los pines RB0 y RB1 para ese propósito.

(3) Esos pines también son usados para la comunicación serial con el chip FTDI que comunica via USB con la computadora.

(4) Mediante jumpers se elige entre usar USB directo al PIC o comunicar USB con el chip FTDI (por eso reserva el pin 14 para Vusb).

(5) Se agregan dos pines digitales adicionales a continuación, haciendo que esta placa sea totalmente incompatible con shields Arduino.

(6) Es la salida del led verde de RUN, y se puede usar en modo "output only" con bootloaders Pingüino versión 2+.

Observando la tabla, la compatibilidad entre la PICduino FreeSensors y Pingüino es completa. Por un lado, las comunicaciones seriales e I2C se manejan por las mismas lineas, los pines reservados para USB son los mismos, y el caso de la linea RA4 no debiera causar inconvenientes, ya que en FreeSensors la linea P13 es solo de salida para los dos usos posibles: Tanto como parte del direccionamiento de 3 bits LSB, como para la señal CLK de SPI.

Para el diseño se parte del esquema electrónico actual de Pingüino (desde su Wiki) para 18F2550 y para 18F4550. En el mismo no se dispone del botón de Run de la versión tradicional, y no se incluyen las resistencias limitadoras de corriente en cada pin. La placa realizada soporta tanto el 2550 (28 pins) como el 4550 (40 pins) en dos zócalos superpuestos.

Por otro lado se resuelve la alimentación colocando un regulador 7805 y un jumper J1 para elegir entre alimentar por USB o usando el regulador 7805 que se alimenta desde una fuente externa. Esa parte de la alimentación es igual a la propuesta en Pingüino tradicional, solo que se agrega un capacitor de 100 nF en paralelo con el primer electrolítico para que filtre frecuencias elevadas. La idea del diodo LFV (Low Forward Voltage) a la entrada fue tomada de la alimentación de Arduino UNO, con la idea de proteger en caso de entradas simultaneas desde Vin en otra shield. Por otro lado, no se colocó un regulador de voltaje para 3.3V, y el pin respectivo se encuentra desconectado, no pudiéndose alimentar shields que requieran ese voltaje. No se conectaron tampoco los pines AREF e IOREF de Arduino.

Además se colocan dos jumpers J2 y J3 para poder elegir donde van las dos salidas PWM RC1 y RC2: Pueden ir hacia los pines P9 y P10 (por defecto) o bien hacia los pines P5 y P6 respectivamente. En el caso de usar el 4550 se puede optar por conectar los pines P5 y P6 directamente a las patas RD5 y RD6 del µcontrolador soldando dos pequeños jumpers (por defecto abiertos). Si se hacen esas soldaduras debiera asegurarse que los jumpers J2 y J3 estén colocados de modo de siempre conectar P9 y P10 con las patas RC1 y RC2 del µcontrolador (por ejemplo eliminando los pines de J2 y J3 y soldando permanentemente la conexión de los jumpers con un puente por arriba).

Al igual que en el proyecto Pinguino no se tuvieron en cuenta los pines ICSP para programación "in-circuit" del PIC, y tampoco se colocó ningún conector para ICSP. De esta forma, el PIC debe ser programado con el bootloader antes de ser colocado en esta placa PICduino.

En el diseño de la placa se cuidó colocar el botón de RESET en el borde para que se pueda acceder fácilmente, y se colocaron los dos leds Rojo (POWER) y Verde (RUN) también en el borde para facilitar su visualización (en la Arduino UNO los leds se encuentran completamente tapados cuando se coloca una shield).

En la PCB se respeta de la Arduino UNO R3:

- La forma y dimensiones físicas externas de la PCB

- La ubicación y cantidad de pines de las 4 tiras de conectores hembra

- La ubicación y tamaño de los 4 agujeros pasantes de la placa

- La ubicación del conector USB (tipo B) y del conector de power

CIRCUITO

El circuito fue dibujado con el programa Fritzing. En el circuito siguiente solo se muestra la parte de la alimentación y lo que se corresponde con el proyecto Pinguino. No se incluyeron las lineas que van hacia los pines digitales y analógicos, y no se incluyeron las lineas que van hacia el PIC 18F4550, ya que las mismas se superponen con todas las lineas del 2550 restándole claridad al esquema. Sin embargo, las lineas están todas presentes como ratsnest en el archivo que puede descargarse mas abajo y abrirse con Fritzing.

PLACA

En la primer fotografía se muestra el programador PICkit2 por USB grabando el bootloader de Pinguino 4.14. Luego se hizo un prototipo en protoboard para probar la funcionalidad y el IDE de Pinguino haciendo proyectos simples como prender un led. En la tercer imagen se muestra el diseño PCB (vista superior) realizado con el programa Fritzing. Finalmente se muestra la placa PICduino ya terminada.

https://sites.google.com/site/freesensors/controladores/picduino-fs/picduino-2550-v2-pcb.png

RELEASE

Los archivos de PCB lado cobre y de carátula son archivos SVG (Scalar Vector Graphics) que pueden ser visualizados en el navegadro web. Para editarlos e imprimirlos se puede usar el programa Inkscape. Para visualizar correctamente los textos en Inkscape se deben tener instalados previamente los fonts DroidSans y OCR-A.

Listado de Materiales:

    • 1 x PIC 18F2550 µControlador con booloader Pingüino versión 4.14 ya cargado
    • 1 x LM7805 regulador de voltaje 5 Volt 1 Amp encapsulado TO-220
  • 1 x 1N5817 diodo Low Forward Voltage 1 Amp
  • 1 x LED 3 mm rojo para Power
    • 1 x LED 3 mm verde para Run
    • 1 x 22 µF x 16V capacitor electrolítico radial
    • 1 x 1 µF x 50V capacitor electrolítico radial
    • 1 x 220 nF capacitor cerámico
    • 2 x 100 nF capacitor cerámico
  • 2 x 22 pF capacitor cerámico
  • 2 x 470 ohm resistencia
  • 1 x 10 Kohm resistencia
  • 1 x XTAL 20 Mhz oscilador de cristal low profile
  • 1 x Conector USB tipo B hembra
  • 1 x Conector Power Plug 2.1 mm de 3 patas
  • 1 x zócalo para CI 28 pins de 0.3" ancho (o dos zócalos de 14 pines)
  • 1 x zócalo para CI 40 pins de 0.6" ancho (opcional)
  • 4 x tiras pines hembra 0.1" de 6, 8, 8, 10 pines de 8 mm
  • 3 x tiras de 3 pines macho 0.1" para jumpers
  • 3 x cierres jumpers 2 pines hembra
  • 1 x tact switch de 4 pines para botón de Reset
  • 1 x placa PCB simple faz perforada

RECURSOS