ACTUALIZACION: Gracias a Rando, ahora se puede ordenar la PCB en OSH Park. Gracias!!
ACTUALIZACION: Si estas interesado en montar la tarjeta, aqui está la lista de materiales (BOM). Feliz Soldadura!
Con un poco de retraso, aquí está mi último trabajo. Se trata del módulo PICnano basado en el microcontrolador PIC18F2550 de Microchip. Tengo en mente un nuevo proyecto y quiero utilizar una tarjeta pequeña, como la Arduino Nano. Este nuevo proyecto está alimentado por baterías (batería de 3,7V tipo Li-Ion). Después de revisar los esquemas de la tarjeta Arduino Nano, he visto que el microcontrolador se alimenta a +5V, por lo que no me sirve. Por supuesto, puedo desmontar el regulador lineal (U3) que está en la tarjeta, y hacer un puente de la alimentación de entrada VIN hasta la alimentación del microcontrolador. Pero creo que es más divertido desarrollar un nuevo módulo compatible con el Arduino Nano donde se tenga acceso a la alimentación del microcontrolador directamente! Además quiero volver a trabajar con los microcontroladores PIC, después de muchos años. Así que aquí está lo que he diseñado!
- El hardware
El objetivo de este nuevo diseño es intentar tener un módulo compatible con el Arduino Nano pero con algunas nuevas características, como el acceso directo a la alimentación del microcontrolador. El esquema de la tarjeta se puede descargar desde aquí: PICNANO BREADBOARD SCHEMATIC V1.0
La tarjeta está basada en el microcontrolador PIC18F2550, aqui se puede descargar el datasheet. Es un microcontrolador de 8 bits de la serie PIC18, y tiene las siguientes características (sacadas de la web de Microchip):
Program Memory Type | Flash |
Program Memory (KB) | 32 |
CPU Speed (MIPS) | 12 |
RAM Bytes | 2,048 |
Data EEPROM (bytes) | 256 |
Digital Communication Peripherals | 1-UART, 1-A/E/USART, 1-SPI, 1-I2C1-MSSP(SPI/I2C) |
Capture/Compare/PWM Peripherals | 2 CCP |
Timers | 1 x 8-bit, 3 x 16-bit |
ADC | 10 ch, 10-bit |
Comparators | 2 |
USB (ch, speed, compliance) | 1, FS Device, USB 2.0 |
Temperature Range (C) | -40 to 85 |
Operating Voltage Range (V) | 2 to 5.5 |
Pin Count | 28 |
Estas características son suficientes para la mayoría de pequeños proyectos que suelo hacer. Las dos características del microcontrolador mas importantes para mi en este momento son:
– Tiene un módulo interno USB 2.0, por lo que no se necesita ningún transceiver externo para tener una comunicación USB.
– La alimentación mínima de funcionamiento es de 2V, por lo que es perfecto para aplicaciones alimentadas a baterías.
El esquema está dividido en los siguientes bloques funcionales:
Microcontrolador PIC18F2550
La parte más importante de la tarjeta. Tiene los elementos básicos para poder trabajar con el PIC sin necesidad de componentes externos: condensadores de desacoplo, pulsador de reset, conector mini-USB y oscilador externo. Y, obviamente, el microcontrolador PIC18F2550 en encapsulado 28-pin SOIC.
Conectores de expansión
La tarjeta tiene dos conectores de expansión de 15 pines, J1 y J2. El espacio entre pines es el estándar de 0.1 pulgadas. La distancia entre ambos conectores es de 0.6 pulgadas. Esto permite utilizar la tarjeta en una placa de desarrollo para realizar prototipos rápidos. La mayoría de las señales son compatibles con las de la tarjeta Arduino Nano. Las diferencias están en los pines 13, 14 y 15 de J2. En esta tarjeta, estos pines se utilizan para las alimentaciones VUSB (puerto USB) y VCC_EXT (alimentación externa directa al microcontrolador).
Selección de alimentación
La alimentación del microcontrolador (VCC_UC en el esquema) puede venir de diferentes fuentes de alimentación:
– Desde el pin 14 del conector J2 (VCC_EXT). En este caso, la tensión de alimentación del microcontrolador es la que haya en este pin. Los límites de tensión por tanto, son los mismos que los de tensión de operación del microcontrolador (desde 2V hasta 5.5V). Se puede utilizar por ejemplo para alimentar la tarjeta desde una batería de Li-Ion directamente. MUCHO CUIDADO cuando se utiliza este pin para la alimentación, ya que se actúa directamente sobre el pin de alimentación (VDD) del microcontrolador!
– Desde un puerto USB externo (VCC_USB).
– Desde una fuente de alimentación externa VIN (pin 1 del conector J2). La tarjeta esta preparada para montar un regulador LDO (NCP1117), como el que lleva la tarjeta Arduino Nano. En este caso, la tensión máxima de entrada es de 20V. El regulador NCP1117 tiene muchas variantes de tensiones de salida, por lo que se puede montar aquel que proporcione una tensión acorde a la aplicación (1.5 V, 1.8 V, 2.0 V, 2.5 V, 2.85 V, 3.3 V, 5.0 V).
Para seleccionar la fuente de alimentación, hay un jumper en la tarjeta (SW2), de color amarillo en la siguiente imagen:
Con el jumper en la posición izquierda (visto desde el conector mini-USB), la alimentación puede ser desde un puerto USB o desde una fuente externa VIN. En la posición de la derecha, la alimentación es VCC_EXT, que va directamente al pin de alimentación del microcontrolador.
Conector ICSP
Se trata del conector estándar de Microchip para programar sus dispositivos. Yo uso la herramienta Pickit3, que además permite la depuración del código con el entorno MPLAB. Este conector es el que se puede ver detrás del jumper SW2.
Led de usuario
Un led de propósito general en el pin TxD de la UART. Es muy útil para comenzar a utilizar la tarjeta o para depurar la aplicación.
- Diseño de la PCB
La tarjeta ha sido diseñada con Altium Designer 13, y desde aquí se pueden descargar los ficheros Gerber: GBR_PICNANO_BREADBOARD_V10. Es un diseño a 4 caras, y las dimensiones de la tarjeta (sin conectores) son 46,5 mm x 18mm. Solo es 3mm más larga que la Arduino Nano. Para fabricar la PCB, he utilizado los servicios de DirtyPCB. Me gustó la calidad de las tarjetas a 2 caras que hice en mi anterior proyecto y quería ver que tal con los diseños a 4 caras. Y el resultado ha sido excelente otra vez:
[metaslider id=1125]
Y aquí algunas fotos con los componentes montados:
[metaslider id=1137]
- El software
Para testear la tarjeta y validar tanto el diseño como el montaje, he hecho un pequeño programa para hacer parpadear el led rojo (el clásico «Hola Mundo» con leds!). He usado el compilador Mikro C PRO compiler, de la casa MikroElektronika. Me gusta este compilador porque ofrece un montón de librerías con ejemplos y código listo para usar. Además, tienen un bootloader para este microcontrolador (puede descargarse aquí). De esta forma, se puede programar el PIC con este bootoader (utilizando una herramienta de programación) y a partir de ahí, se pueden grabar los programas en el PIC via USB con un software de PC, eliminando la necesidad de un programador externo.
El código es tan simple como se puede imaginar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
/*************************************************************************/ /* SW PRODUCT: PICNANO_HELLO_WORLD */ /* */ /* FILE: PICNANO_HELLO_WORLD.c */ /* CREATION DATE: 26/01/2015 */ /* AUTHOR: Jesus Echavarria Navarro */ /* http://www.jechavarria.com */ /* */ /*---------------------------------------------------------------------- */ /* FILE DESCRIPTION: */ /* */ /* Software to test the PICNANO breacboard. Makes flash the red led */ /* every 500mS. */ /* Based on the PIC18F2550 microcontroller and Mikro C PRO PIC Compiler. */ /* */ /*---------------------------------------------------------------------- */ /* REVIEWS: */ /* */ /* DATE VERSION DESCRIPTION */ /* */ /* 26/01/2015 1.0.0.0 File creation */ /* */ /*************************************************************************/ //======================================================================== // Pinout definition //======================================================================== sbit RED_LED at RC6_bit; //======================================================================== // Main Program //======================================================================== void main() { //----- Minimum setup: Configuring ports --------------------------------- CMCON = 0x07; // Disable comparators ADCON1 = 0x0E; // A0 as an analog input // VREF+ = VDD // VREF- = VSS //----- Ports Settings --------------------------------------------------- TRISA = 0xFF; // Port A as input TRISB = 0x00; // Port B as output TRISC = 0x00; // Port C as output //----- Infinite loop -------------------------------------------------- while (1) { RED_LED = 1; Delay_ms (500); RED_LED = 0; Delay_ms (500); } } |
Si estas interesado, puedes descargar el proyecto completo, incluyendo los ficheros fuente, el fichero *.hex para grabar en el microcontrolador y la configuración de los registros internos: PICNANO_HELLO_WORLD.
Finalmente, en el blog Embedded-Lab hay un gran artículo sobre como comenzar a trabajar con el microcontrolador PIC18F2550.
This post is also available in: Inglés