diseño hardware y desarrollo de librerías para la

133
Trabajo Final de Grado GRADO EN INGENIERÍA ELECTRÓNICA INDUSTRIAL Y AUTOMÁTICA Diseño hardware y desarrollo de librerías para la implementación de una plataforma open source basada en un microcontrolador PIC como alternativa a la plataforma Arduino UNO. IKER RAMÍREZ GOROSTIZAGA Tutor Cristian Carmona Gómez Escuela Politécnica Superior Universidad de las Islas Baleares Palma, 2 de septiembre de 2016

Upload: others

Post on 01-Jul-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diseño hardware y desarrollo de librerías para la

Trab

ajo

Fin

ald

eG

rad

o

GRADO EN INGENIERÍA ELECTRÓNICA INDUSTRIAL YAUTOMÁTICA

Diseño hardware y desarrollo de libreríaspara la implementación de una plataforma

open source basada en unmicrocontrolador PIC como alternativa a la

plataforma Arduino UNO.

IKER RAMÍREZ GOROSTIZAGA

TutorCristian Carmona Gómez

Escuela Politécnica SuperiorUniversidad de las Islas BalearesPalma, 2 de septiembre de 2016

Page 2: Diseño hardware y desarrollo de librerías para la
Page 3: Diseño hardware y desarrollo de librerías para la

ÍNDICE GENERAL

Índice general i

Índice de figuras iii

Índice de cuadros v

Resumen vii

1 INTRODUCCIÓN 11.1 Estado del arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Motivación del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 PLATAFORMA ARDUINO 72.1 Comunidad Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Proyectos basados en Arduino . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 BASES DE DISEÑO 133.1 Bases de diseño hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1.1 Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1.2 Etapa de comunicación . . . . . . . . . . . . . . . . . . . . . . . . 143.1.3 Etapa de comunicación . . . . . . . . . . . . . . . . . . . . . . . . 173.1.4 Nivel básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.5 Nivel avanzado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.1.6 Tabla comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2 Bases de diseño software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.1 Lenguaje Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . 243.2.2 Lenguaje JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2.3 Lenguaje C y C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2.4 Concepto de librería . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4 ARDUINO UNO 294.1 Etapa de comunicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.1.1 UART TTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.1.2 ICSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.2 Etapa de potencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2.1 Método de conversión a 5 V . . . . . . . . . . . . . . . . . . . . . 334.2.2 Método de conversión a 3,3 V . . . . . . . . . . . . . . . . . . . . 35

i

Page 4: Diseño hardware y desarrollo de librerías para la

ii ÍNDICE GENERAL

5 DESARROLLO HARDWARE 395.1 Selección del microcontrolador alternativo . . . . . . . . . . . . . . . . . 395.2 Sección de comunicación . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.3 Sección de potencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.4 Elementos de seguridad y protección . . . . . . . . . . . . . . . . . . . . 50

5.4.1 Seguridad y protección ante sobrecargas de corriente . . . . . . 515.4.2 Seguridad y protección ante ruido . . . . . . . . . . . . . . . . . . 52

5.5 Diseño asistido por computador . . . . . . . . . . . . . . . . . . . . . . . 545.5.1 CADSOFT EAGLE PCB . . . . . . . . . . . . . . . . . . . . . . . . . 545.5.2 Archivo .SCH (Schematic) . . . . . . . . . . . . . . . . . . . . . . . 545.5.3 Archivo .BRD (Board) . . . . . . . . . . . . . . . . . . . . . . . . . 63

6 DESARROLLO SOFTWARE 696.1 MPLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

6.1.1 MPLAB 8.X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.1.2 MPLAB X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6.2 Librerías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.2.1 I/O digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.2.2 Módulo ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766.2.3 Módulo PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826.2.4 Módulo USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856.2.5 Temporizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

6.3 Gestor de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956.3.1 Tiny Multi Bootloader+ . . . . . . . . . . . . . . . . . . . . . . . . 97

7 CONCLUSIÓN: PLATAFORMA FINAL 1017.0.1 Información técnica . . . . . . . . . . . . . . . . . . . . . . . . . . 1017.0.2 Comparativa final . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

8 ANEXO I: PRUEBAS REALIZADAS 1058.1 Parpadeo de led con selección de frecuencia . . . . . . . . . . . . . . . . 1058.2 Comprobación de potencia . . . . . . . . . . . . . . . . . . . . . . . . . . 108

8.2.1 Regulador a 5 V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088.2.2 Regulador a 3,3 V . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

8.3 Salida de voltaje a partir del módulo PWM . . . . . . . . . . . . . . . . . 1108.4 Lectura de entrada analógica a partir del módulo ADC . . . . . . . . . . 112

9 Acrónimos 117

Bibliografía 121

Page 5: Diseño hardware y desarrollo de librerías para la

ÍNDICE DE FIGURAS

2.1 Arduino UNO Rev3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.1 Arduino MICRO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2 Arduino NANO: (izquierda) vista frontal, (derecha) vista trasera. . . . . . . . 193.3 Arduino UNO Rev3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.4 Arduino 101. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.5 Arduino PRO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.6 Arduino MEGA 2560. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.7 Arduino DUE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.8 Arduino ZERO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1 Cabezal de cable Jack de 2,1mm. . . . . . . . . . . . . . . . . . . . . . . . . . 324.2 Esquemático: Etapa de regulación de tensión a 5 V. . . . . . . . . . . . . . . 334.3 Esquemático: Etapa de regulación de tensión a 3,3 V. . . . . . . . . . . . . . 35

5.1 Plataforma de búsqueda de Microchip. . . . . . . . . . . . . . . . . . . . . . . 415.2 Plataforma de búsqueda de Microchip®. . . . . . . . . . . . . . . . . . . . . 435.3 PIC18F25K80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.4 Chip FT232R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.5 Conector USB tipo mini-B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.6 Pulsador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.7 Conector Jack de 2,1mm hembra. . . . . . . . . . . . . . . . . . . . . . . . . . 505.8 Gráfica de comportamiento de un condensador. . . . . . . . . . . . . . . . . 525.9 Diagrama esquemático del microcontrolador. . . . . . . . . . . . . . . . . . 555.10 Diagrama esquemático de la etapa de conversión a 3,3 V. . . . . . . . . . . . 575.11 Diagrama esquemático de la etapa de conversión a 5 V. . . . . . . . . . . . . 595.12 Diagrama esquemático de la fase de comunicación USB. . . . . . . . . . . . 615.13 Plataforma finalizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.14 Resultado del diseño de la placa mediante Eagle. . . . . . . . . . . . . . . . . 655.15 Plataforma finalizada conectada al PICKIT3. . . . . . . . . . . . . . . . . . . 67

6.1 Ciclo de trabajo de la señal PWM. . . . . . . . . . . . . . . . . . . . . . . . . . 826.2 Software de gestión del gestor de arranque. . . . . . . . . . . . . . . . . . . . 98

7.1 Plataforma final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017.2 Relación de los cabezales de la plataforma con los pines del MCU. . . . . . 102

8.1 Parpadeo de led con selección de frecuencia. . . . . . . . . . . . . . . . . . . 107

iii

Page 6: Diseño hardware y desarrollo de librerías para la

iv Índice de figuras

8.2 Alimentación externa de 7,5 V y alimentación de placa de 5 V. . . . . . . . . 1088.3 Alimentación externa de 7,5 V y alimentación de placa de 3,3 V. . . . . . . . 1098.4 Proceso seguido por el módulo PWM en su progreso de 0 V a 5 V. . . . . . . 1128.5 Visualización por el terminal de datos de los valores analógicos de entrada. 113

Page 7: Diseño hardware y desarrollo de librerías para la

ÍNDICE DE CUADROS

3.1 Tabla comparativa. Sección: Nivel básico (entry level). . . . . . . . . . . . . . 233.2 Tabla comparativa. Sección: Nivel avanzado (enhanced features). . . . . . . 23

4.1 Tabla comparativa: Microcontrolador convertidor de UART a USB de Ar-duino UNO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.1 Tabla de propiedades del microcontrolador ATmega328P. . . . . . . . . . . . 405.2 Tabla de requisitos mínimos del microcontrolador Microchip. . . . . . . . . 405.3 Tabla de comparativa: ATmega328P y PIC18F25K80. . . . . . . . . . . . . . . 455.4 Tabla de características: ON SEMICONDUCTOR NCP1117ST50T3G. . . . . 495.5 Tabla de características: Texas Instruments LP2985-33DBVR. . . . . . . . . . 495.6 Tabla de características: Texas Instruments LMV358IDGKR. . . . . . . . . . 495.7 Tabla de características: NPX-NX2301P. . . . . . . . . . . . . . . . . . . . . . . 505.8 Tabla de características: Fairchild-S1M. . . . . . . . . . . . . . . . . . . . . . 515.9 Tabla comparativa de pines entre el microcontrolador y la placa. . . . . . . 565.10 Pines del microcontrolador sin relación con las salidas de la placa. . . . . . 57

6.1 Tabla de funciones: I/O digital. . . . . . . . . . . . . . . . . . . . . . . . . . . 726.2 Función initDIG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.3 Función ReadDIG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.4 Función WriteDIG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.5 Función ToogleDIG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.6 Tabla de funciones: Módulo ADC. . . . . . . . . . . . . . . . . . . . . . . . . . 796.7 Función initADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.8 Función OnADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.9 Función StartADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.10 Función StopADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.11 Función BusyADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.12 Función GetValueADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.13 Tabla de funciones: Módulo PWM. . . . . . . . . . . . . . . . . . . . . . . . . 836.14 Función initPWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.15 Función StartPWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846.16 Función StopPWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846.17 Tabla de configuración del registro del baud rate. . . . . . . . . . . . . . . . . 876.18 Tabla de funciones: Módulo USART. . . . . . . . . . . . . . . . . . . . . . . . 876.19 Función initUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.20 Función BusyUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

v

Page 8: Diseño hardware y desarrollo de librerías para la

vi Índice de cuadros

6.21 Función PutUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.22 Función PutsUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.23 Función DataReceivedUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.24 Función ReadUART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.25 Relación de tiempos y registro TMR0. . . . . . . . . . . . . . . . . . . . . . . . 936.26 Tabla de funciones: Temporizador 0. . . . . . . . . . . . . . . . . . . . . . . . 936.27 Función initT0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.28 Función T0start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

7.1 Tabla de comparativa: ATmega328P y PIC18F25K80. . . . . . . . . . . . . . . 103

Page 9: Diseño hardware y desarrollo de librerías para la

RESUMEN

En este proyecto, por un lado se ha diseñado una plataforma electrónica de desarrolloque permite la realización de proyectos electrónicos tanto a nivel usuario como a nivelprofesional y, por otro lado se han desarrollado cinco librerías básicas para la utilizaciónde la misma.

El proyecto está basado en la plataforma ampliamente conocida: Arduino UNO,con la particularidad de estar diseñada con un microcontrolador PIC de la marcaMicrochip. La innovación en este sentido viene de la necesidad palpable en el mundo dela electrónica de disponer de una plataforma multifuncional para diseños electrónicosque reciba todo el soporte de Microchip, cosa que a día de hoy no existe.

Arduino fue creado por David Cuartielles, ingeniero electrónico, y Massimo Banzi,diseñador y desarrollador web, en 2005 en Italia. Surgió por la necesidad de poder acce-der a una plataforma de desarrollo de proyectos electrónicos de bajo coste, funcional ypara múltiples usos y en base a esta motivación se creó lo que ahora conocemos comoArduino.

Arduino, como marca, ofrece un amplio catálogo de placas de desarrollo con lascuales abarca un gran nicho de mercado en cuanto a diseño electrónico se refiere.Dentro de todos los productos que Arduino ofrece, podemos encontrar desde placasbásicas multifuncionales, como es la conocida Arduino UNO, hasta robots sobre ruedas,como el Arduino Robot.

La plataforma PIC resultante de la realización de este proyecto integra en su in-terior un microcontrolador PIC18F25K80 que, además de incluir todos los módulosdisponibles en la plataforma Arduino UNO, integra en su interior un módulo de comu-nicación CAN-Controller Area Network y más memoria RAM, factores que hacen deesta plataforma una implementación superior a la plataforma Arduino UNO.

La plataforma PIC resultante del desarrollo de este proyecto utiliza un gestor dearranque llamado Tiny Multi Bootloader+ que nos ofrece una manera rápida y sencillade programar el microcontrolador sin necesidad de disponer de hardware o softwareadicional más que la plataforma y un cable conector de USB. Además, Microchipnos ofrece una herramienta de desarrollo software gratuita conocida como MPLABque integra la información pertinente de cada uno de los microcontroladores PIC, estedispone de diferentes compiladores tanto para lenguaje C/C++ como para ensambladoro assembler. La programación externa de la plataforma, sin utilizar el gestor de arranque,corre a cargo de un dispositivo hardware, proporcionado también por Microchip, que

vii

Page 10: Diseño hardware y desarrollo de librerías para la

viii RESUMEN

nos permite programar el microcontrolador a partir del puerto de comunicación ICSP-In-Circuit Serial Programming.

En este proyecto se desarrollan cinco librerías que se pueden considerar fundamen-tales para la utilización de cualquier plataforma electrónica.

• IODigital: Se encarga de gestionar todo lo relativo a los pines de entrada y salidaconfigurados como digitales.

• UART: Encargada de facilitar la comunicación serie utilizando el protocolo UART.

• ADC: Nos ofrece una interfaz sencilla para poder leer valores de tensión prove-nientes de una fuente externa.

• PWM: Nos permite obtener una salida de tensión regulable por software en unode los pines de la plataforma.

• T0: Nos permite configurar lapsos programables de tiempo y hacer uso de larutina de servicio de interrupción.

Page 11: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

1INTRODUCCIÓN

1.1 Estado del arte

El número de personas capaces de acceder a una plataforma de diseño de sistemaselectrónicos y de hacer un uso práctico de las mismas ha crecido exponencialmentedesde el nacimiento de internet. Internet provee a un ingente número de personas lacapacidad de aprender cualquier cosa imaginable y, dentro de ellas, se encuentra, porsupuesto, el diseño de sistemas electrónicos. En la red podemos aprender de formaautodidacta lenguajes de programación, obtener información de primera de manode las plataformas más utilizadas, con más prestaciones y más adecuadas, así comolas últimas novedades o últimos proyectos realizados, por ello es una herramientafundamental a la hora de analizar el nicho de mercado al cual va dirigido este tipo deartículos.

A raíz de internet, de la curiosidad y motivación de mucha gente corriente congran ingenio que hace algunos años no podían imaginar el hecho de programar unmicrocontrolador, así como la motivación de muchos profesionales en el campo de laelectrónica, nació lo que hoy en día se conoce como Maker Movement[2] o movimientomaker.

El movimiento maker describe una de las tendencias que está redefiniendo larelación entre las personas y la tecnología. Hace unos años, la innovación tecnológicaera cosa de grandes compañías que invertían fortunas en I+D+i para encontrar aquelloque toda persona necesita y sacar un beneficio económico a cambio, pero hoy en díatodas las personas tienen a su disposición las herramientas y la metodología necesariapara crear sus propios productos.

La base de este movimiento es, sin duda, el conocimiento abierto. El conocimientoabierto se puede entender como un sentimiento altruista de la gente que componedicho movimiento, y que ofrecen sus avances e ideas de forma gratuita para que toda

1

Page 12: Diseño hardware y desarrollo de librerías para la

1. INTRODUCCIÓN

persona interesada pueda aprender e incluso mejorar los sistemas diseñados hastael momento. De esta forma se promueve que la gente realice dichos diseños por sucuenta, bajo el concepto DIY - Do It Yourself [3] (hazlo tú mismo), término acuñadopor Chris Anderson en 2010, y de esta manera conseguir que un producto final hayasurgido del trabajo en equipo de mucha gente cooperando por el mismo fin.

A partir de la globalización producida por la aparición de internet surgió el conceptode crowdsourcing[4], que se podría definir como la externalización de tareas que unaempresa delega en un grupo de personas o comunidad a través de una convocatoriaabierta a todo el mundo. De esta forma, a través de la red, puedes tener en contactodirecto a un indeterminado número de personas expertas en el problema planteado,aumentando así las posibilidades de encontrar la mejor solución posible, mediante lacolaboración de todos los interesados.

A medida que avanza la tecnología, avanza también la forma en que entendemosnuestra vida diaria. Es por ello que, hoy en día, no imaginamos pasar un día separadosde nuestros teléfonos inteligentes o smartphones, ya que nos sentimos totalmentedesamparados si salimos de la tela de araña que se ha creado en el mundo para tenernosa todos conectados los unos a los otros en cualquier momento o situación.

La tecnología avanza a pasos agigantados y, cada vez más, se precisan herramientasmás potentes para mantener la oferta tecnológica equiparada con los avances que ofer-tan los laboratorios de investigación. Por ello, es fundamental la rapidez de adaptacióna este ritmo frenético de crecimiento tecnológico. Hay que tener en cuenta que, cadauna de las innovaciones que salen a la luz, abre un nuevo nicho de mercado al cualva dirigido y, hoy en día, pequeños detalles marcan la diferencia entre el triunfo y elfracaso. Por ello, es imprescindible saber analizar qué necesidades se están creandocontinuamente en nuestra sociedad a causa de los avances tecnológicos que vivimos ysatisfacerla lo antes posible, ya que esto te da experiencia en el sector y exclusividad.

Hace unos años, cuando internet todavía se encontraba en fase de desarrollo y solounos pocos privilegiados podían acceder a él, ya existían expertos tecnológicos comoingenieros informáticos o electrónicos que desarrollaban proyectos a gran escala, peroque no tenían un canal fluido para transmitir sus conocimientos al resto del mundo. Espor ello que ahora, donde internet es la herramienta más utilizada mundialmente ynos interconecta a todos, el acceso a prácticamente cualquier tipo de información estáen la palma de nuestras manos y, cómo no, hay una ingente cantidad de expertos endiversos campos tecnológicos dispuestos a compartir toda su información teórica enrelación a sus especialidades.

El problema que se plantea es que con internet cualquier persona puede aprenderun lenguaje de programación desde su casa, qué es un microcontrolador o comofunciona el sistema binario, es decir, se puede aprender, pero resulta más difícil sercapaz de desarrollar. Esto se debe a que, al final, cualquier idea, proyecto o diseño quese te ocurra precisa de un componente físico que muchas veces no es el ordenador quetienes en casa, sino que se trata de un sistema hardware específico que, en ocasiones,requiere una inversión económica tal que ninguna persona amateur en este campoesta dispuesta a gastar.

2

Page 13: Diseño hardware y desarrollo de librerías para la

1.2. Motivación del proyecto

Además de este sector social, existe una necesidad real y palpable en el sector pro-fesional. Hoy en día, en cualquier laboratorio podemos encontrar un gran número decomputadoras a disposición de los investigadores o desarrolladores, y esto es algo quetodo el mundo da por hecho y por ello, a la hora de diseñar un proyecto ya cuentascon que dispones de un ordenador con el que podrás acceder a todo el software queprecises. En cambio, a la hora de diseñar o plasmar un proyecto relacionado con laelectrónica todavía existe la necesidad de diseñar primero la plataforma donde confi-gurar tu proyecto. Es decir, en muchos casos, no solo debes preocuparte de desarrollarel proyecto en sí, sino que debes preocuparte también de crear una plataforma dondese sustente dicho proyecto.

La conclusión de este análisis es que existen varios nichos de mercado por explotar,relacionados con la tecnología, que hacen referencia a toda esa gente nutrida intelec-tualmente de internet que no pueden desarrollar al cien por cien su potencial por faltade un medio de aplicación físico donde plasmar su idea, así como la gente experta endiseños electrónicos que encuentra un impedimento en el desarrollo de sus proyectospor la falta de una plataforma que incorpore un microcontrolador PIC y que les sirvade base para su diseño.

Para tratar de satisfacer esta necesidad se ha creado lo que comúnmente se conocecomo plataforma multifunción, que provee al usuario de un determinado número deentradas y salidas, tanto analógicas como digitales, así como un microcrontroladory diversos puertos de comunicación que, de forma generalizada, permiten realizarprácticamente cualquier proyecto electrónico.

1.2 Motivación del proyecto

Como ya hemos avanzado en el capítulo de resumen, basaremos el desarrollo delproyecto tomando como base y referencia la plataforma Arduino. Dicha plataformaincluye un entorno de desarrollo con entradas y salidas, tanto analógicas como digitales,que facilitan el diseño y montaje de sistemas electrónicos basados en un lenguaje deprogramación de código abierto. Al tratarse de una plataforma open source[5], tanto sudiseño como distribución puede realizarse libremente sin necesidad de licencia.

La intención y motivación de este proyecto es realizar el diseño y la implementaciónde una alternativa a la, ya existe, plataforma Arduino UNO. Se trata de la versión másutilizada de Arduino por su equilibro entre prestaciones y tamaño, aspecto que le dauna versatilidad difícil de igualar.

Al analizar toda la oferta que tiene Arduino en sus productos, parece difícil imaginarque una alternativa a este diseño pueda salir rentable, pero hay un detalle que haceque Arduino sea exclusivo y que a su vez deja en el aire una posible implementaciónalternativa con hueco en este nicho de mercado: el microcontrolador utilizado.

La marca más importante de microcontroladores podría decirse, de forma gene-ralizada, que es Microchip[6]. Microchip tiene una serie de productos en su catálo-go, de entre los cuales destacan los mundialmente conocidos microcontroladoresPIC-Periphereal Interface Controller. Además, Microchip ofrece un programa llamado

3

Page 14: Diseño hardware y desarrollo de librerías para la

1. INTRODUCCIÓN

MPLAB, que sirve para programar absolutamente todas las familias de microcontrola-dores de la casa. Entre los expertos en programación de microcontroladores existe unanecesidad específica que no ha sido satisfecha a nivel mundial, que es la existencia deuna plataforma multifunción con componentes Microchip.

Arduino integra en todas sus plataformas microcontroladores de la casa Atmel,pero la comparación no se establece únicamente en la marca utilizada o en la cali-dad de ambos microcontroladores, ya que tanto los de la casa Microchip como losde la casa Atmel son microcontroladores fiables y con un gran soporte por parte desus empresa. La cuestión es que Arduino ha querido facilitar tanto el trabajo a losdiseñadores y desarrolladores, creando una interfaz de usuario y un lenguaje propiode programación orientado a sus plataformas, que han dejado de lado a esa ingentecantidad de desarrolladores de sistemas electrónicos que son expertos en programa-ción de microcontroladores y que utilizan microcontroladores PIC para integrar ensus proyectos debido al enorme apoyo social que tienen dichos microcontroladoresdentro del ámbito de la electrónica profesional. Por este motivo se venden millones demicrocontroladores de la marca Microchip para desarrollo de proyectos electrónicos y,aun así, no existe ninguna plataforma de alcance mundial que integre estos microcon-troladores. Es por ello que se hace necesario el diseño de una plataforma multifunciónalternativa a la ofrecida por Arduino y que integre componentes Microchip.

Cabe destacar en esta sección algunas de las ventajas que ofrecen los microcontro-ladores de la casa Microchip respecto a sus competidores[7].

• Eficiencia de código, ya que permite una gran compactación de los programasgracias a los compiladores específicos que nos ofrece el software de programaciónMPLAB.

• Gran velocidad de procesamiento de datos. Es cierto que todas las marcas tienenmicrocontroladores que ofrecen altas velocidades de reloj, pero al compararmicrocontroladores equivalentes en prestaciones dentro de las diversas opcionesdel mercado, se observa una superioridad de Microchip en cuanto a velocidadde procesamiento de datos.

• Número reducido de instrucciones que facilitan el aprendizaje y la programación.Microchip es una de las compañías más grandes en cuanto a venta de microcon-troladores y, es por ello, que han desarrollado un sistema de instrucciones parasus microcontroladores muy logrado y sencillo en cuanto al número.

• Compatibilidad de código y pines entre diferentes versiones. Este es un factormuy importante en cuanto a diferenciación entre Microchip y otras marcas. En elcaso de que tengas programado un sistema electrónico con un microcontroladorespecífico, pero tengas la necesidad de incrementar alguna de sus propiedades,como la memoria o la velocidad de procesamiento, es posible encontrar micro-controladores compatibles en cuanto a pines y a código, pero con propiedadesdiferentes. Por tanto, sería tan fácil como cambiar el microcontrolador y no tenerque adaptar ni el sistema ni el código de programación de un dispositivo a otro.

4

Page 15: Diseño hardware y desarrollo de librerías para la

1.2. Motivación del proyecto

• Abundantes herramientas de desarrollo hardware y software. Este es un factorque marcará la diferencia en nuestro proyecto, ya que, al tratarse de una de lasempresas más importantes en venta de microcontrolador, también disponen deuna comunidad de desarrolladores muy grande dando soporte tanto hardwarecomo software a los usuarios de dichos dispositivos.

Por tanto, como conclusión, en este proyecto vamos a diseñar una plataformamultifunción y multiusos que integre un microcontrolador de la marca Microchip.Dicha plataforma será la alternativa equivalente a la plataforma Arduino UNO, que sepuede considerar la plataforma estándar por antonomasia de la marca Arduino.

5

Page 16: Diseño hardware y desarrollo de librerías para la
Page 17: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

2PLATAFORMA ARDUINO

[1]Como ya se ha expuesto en el apartado de resumen, Arduino fue creado por DavidCuartielles, ingeniero electrónico, y Massimo Banzi, diseñador y desarrollador web, en2005 en Italia.

La idea surgió por la necesidad de poder acceder a una plataforma para desarrollode proyectos electrónicos de bajo coste, funcional y para múltiples usos y en base aesta motivación se creo lo que ahora conocemos como Arduino.

Figura 2.1: Arduino UNO Rev3

Arduino, como marca, tiene una ofer-ta de productos muy amplia que va des-de placas multifunción, como la que esobjeto de este estudio, hasta impresoras3D. En este apartado analizaremos todoslos aspectos a tener en consideración porparte de la marca Arduino así como lasalternativas existentes en el mercado[8].

Arduino se podría considerar la plata-forma más utilizada en cuanto a diseñoelectrónico debido a que han enfocadoel desarrollo de la plataforma a un públi-

co tanto básico como experto. Por ello, dentro del sector de desarrollo amateur, estaplataforma es la más conocida y más utilizada, pero dentro del sector profesional en-contramos alternativas igual de válidas aunque requieran unos conocimientos másavanzados de electrónica. Dentro de las alternativas más conocidas destacan:

7

Page 18: Diseño hardware y desarrollo de librerías para la

2. PLATAFORMA ARDUINO

Raspberry Pi

[9]Raspberry Pi es un ordenador de placa reducida o SBC-Single Board Computer debajo coste desarrollada por la fundación británica con el mismo nombre. La placadispone de un microprocesador Broadcom BCM2835 de 700 MHz con un procesadorgráfico y una memoria RAM de 512 MB. En lugar de disco duro, utiliza una tarjeta SD ydispone de dos puertos USB, uno Ethernet y una salida HDMI. Todo integrado en unaplaca con un tamaño de 8,5 x 5,3 cm.

De entre los proyectos potencialmente realizables con este micro ordenador sepuede destacar el montaje de un acceso Wi-Fi dentro de una casa, diseñar una pantallatáctil o, incluso, llevar a cabo el control de un robot.

BeagleBone

[10]BeagleBone integra un microprocesador ARM A8 Cortex a 700 MHz de velocidadde procesamiento de datos con una memoria RAM de 256 MB. Dispone de ranura paratarjetas microSD, tiene un puerto USB y un puerto micro USB, así como un conectorEthernet, un conector RJ45 y un tamaño de 9 x 5,5 cm.

Lo que hace exclusivo en su sector a esta plataforma es que funciona con Linux. Deesta manera cualquier desarrollador puede hacer su propio software en una gran varie-dad de lenguajes de programación (C, C++, Java, Python, etc). Además, es compatiblecon sistemas operativos como Android, Ubuntu o Debian.

MinnowBoard MAX

[11]Se trata de la opción low cost de Intel, en conjunción con CircuitCo, que lanzaronuna plataforma con un microprocesador Intel Atom de 64 bits a 1,46 GHz y con 1 GB dememoria RAM. En este caso todos los ficheros de diseño se encuentran bajo licencia,por lo que no se podría definir como open source.

Nanode

[12]Nanode es un proyecto open source donde se diseñó una placa evolutiva a Arduinocon la peculiaridad de que era capaz de conectarse a internet a través de un navega-dor. Esto permite a cualquier desarrollador utilizarlo como servidor privado o comoconexión con otros dispositivos.

Como vemos, existen varias alternativas a las placas Arduino, pero como podemosapreciar en el análisis de cada una de ellas se trata de plataformas enfocadas a unuso semi profesional. Por ejemplo, con Arduino es muy sencillo aprender a programarplataformas multifunción y diseñar sistemas electrónicos sencillos como un sistema deencendido de led, uso de temporizadores o comunicación en serie a partir del móduloUART, pero en el caso de Raspberry Pi es más complicado saber cómo funciona unmicroprocesador o cómo configurar correctamente un puerto HDMI o Ethernet.

En cualquier caso, con este análisis queda claro el objetivo y el motivo del triunfode Arduino: llevar la electrónica profesional al terreno amateur, adaptándolo para queuso sea sencillo y global.

8

Page 19: Diseño hardware y desarrollo de librerías para la

2.1. Comunidad Arduino

2.1 Comunidad Arduino

Como hemos expuesto en el capítulo de introducción, estamos viviendo un momentode aumento sin freno del libre comercio de información por internet hasta el punto deser capaces de encontrar solución prácticamente a cualquier problema que te puedasplantear en tu vida cotidiana, desde cómo arreglar el microondas de tu casa a cómocambiar la caja de cambios de tu coche. Esto ha provocado que, en la red, se creen forosy comunidades de desarrollo o de intercambio de conocimientos de forma parecidaa cómo se dividen los sectores industriales en gremios de especialización, donde secrean foros de debate y ayuda con gente profesional en esos campos dispuesta a ayudarde forma libre y gratuita a cualquier persona que solicite información.

En el caso de Arduino se creó un foro[13] de debate de aspectos relacionados consus plataformas. Este foro se ha convertido en la herramienta de uso mayoritario encuanto a desarrollo de proyectos con Arduino se refiere puesto que siempre habráalguien que haya tenido el mismo problema que tú con anterioridad y sepa resolverlo.De esta manera se crea un feedback que hace que tú, en un futuro, puedas ayudar aresolver los problemas de los demás.

Dentro del foro de Arduino hay un apartado que tiene una importante relevanciatanto para nuestro proyecto como para entender mejor el concepto de open source.Este apartado se denomina Development o Desarrollo, y se compone de los siguientesapartados:

1. Sugerencias para el proyecto Arduino: En este apartado Arduino pone a tu dis-posición un foro de debate de las cosas que consideras que puede o deben sermejoradas. De esta manera, te ofrecen una herramienta para exponer tanto lascaracterísticas que crees que deben tener las plataformas como los bugs o fallosque encuentres mientras utilizas sus productos. Esto es de vital importancia ala hora de ofrecer un producto cuyo diseño software y hardware es gratuito, yaque al no cobrar por él no hay fondos económicos para contratar a expertos querevisen tus productos. De esta manera, consigues averiguar los fallos que van apa-reciendo en las plataformas y, además, adquieres información de primera manoacerca de las necesidades de tus clientes para poder ofrecer nuevos productos enun futuro.

2. Desarrollo de hardware alternativo: En este apartado Arduino te ofrece un forodonde puedes exponer cualquier tipo de shield o módulo que hayas podidocrear tú personalmente para desarrollar una función que no está contempladapor los diseñadores de Arduino de forma que cualquier persona pueda ver tudiseño y utilizar tu aportación. Además sirve de foro de sugerencias para futurosproductos de la marca.

3. Desarrollo de software alternativo: En este apartado de la sección de desarrollote ofrecen la posibilidad de publicar cualquier modificación de software quehayas realizado con la finalidad de mejorar las aplicaciones que ofrece Arduinopara el desarrollo de proyectos electrónicos con sus plataformas. Además te per-mite compartir con los demás usuarios de Arduino mejores gestores de arranque

9

Page 20: Diseño hardware y desarrollo de librerías para la

2. PLATAFORMA ARDUINO

y, lo más importante, librerías alternativas que se encarguen de predefinir fun-ciones relacionadas con el microcontrolador o periféricos, y que no hayan sidodesarrolladas por Arduino.

Además de lo expuesto, en el foro general podemos encontrar gran variedad desubforos donde se debaten temas relacionados con el uso general de Arduino, tutorialesde instalación y solución de problemas, ámbitos tecnológicos de aplicación de lasplataformas y, cómo no, un subforo independiente para cada una de las plataformasque oferta Arduino.

Como conclusión podemos afirmar que Arduino vende plataformas de desarrolloelectrónico, pero es de vital importancia su foro donde la comunidad experta en diseñoscon plataformas Arduino se encarga de solucionar gran cantidad de problemas y aportaruna enorme cantidad de información práctica y útil acerca de sus productos sin queellos, directamente, deban preocuparse de gestionar todo el asesoramiento técnico desus plataformas.

2.2 Proyectos basados en Arduino

De forma teórica sabemos que las plataformas Arduino tienen un abanico de usosprácticamente infinito, donde es más importante el hecho de tener una idea novedosa,que las limitaciones que pueda tener la plataforma electrónica. Por ello, a modo dereferencia es importante señalar algunos de los proyectos que se han desarrollado conplataformas Arduino, para entender mejor la gran variedad de usos que se le puede dara una plataforma multifunción:

• Alternativa para la detección y monitorización de amenazas sísmicas basadasen Arduino[14]: En este proyecto se utiliza el hardware libre de Arduino pararecopilar datos de movimientos sísmicos con sensores especiales y procesar lainformación utilizando una plataforma Arduino para la detección de amenazassísmicas.

• Desarrollo de un prototipo controlador para un sistema domótico:[15] En esteproyecto, se utiliza una plataforma Arduino para utilizarla como cerebro de unainstalación domótica, de modo que la información de los sensores de la casallegan a la plataforma y, esta, procesa los datos y recibe comandos externos pararealizar determinadas acciones.

• Sistema de control para la estabilidad y orientación de un helicóptero quadrotor[16]:En este proyecto se utiliza una plataforma Arduino como Unidad Central de Pro-cesamiento para el control de estabilidad de un helicóptero con cuatro hélices.De esta forma, la plataforma adquiere los datos relacionados con la posición ac-tual del helicóptero, por medio de acelerómetros y brújulas, y ejecuta las accionesnecesarias para que la posición del helicóptero se mantenga estable.

• Vehículo submarino no tripulado de bajo coste para inspección oceanográfica[17]:En este proyecto se lleva a cabo la construcción de un submarino con una plata-

10

Page 21: Diseño hardware y desarrollo de librerías para la

2.2. Proyectos basados en Arduino

forma Arduino, que será el cerebro del submarino, y a partir de la cual podremostanto gobernar el submarino, como recopilar datos del fondo marino.

• Prototipo de robot semiautónomo especializado en fumigación agrícola bajola tecnología Arduino[18]: En este proyecto se ha utilizado una plataformaArduino para el diseño de un robot encargado de fumigar campos de cultivos deforma automática.

• Evaluación de la plataforma arduino e implementación de un sistema de con-trol de posición horizontal[19]: En este caso se hace uso de la plataforma hard-ware de Arduino para la implementación de un sistema de control de posiciónhorizontal. Esto es, la orientación de un vehículo en el plano tierra. Para ello sehace uso de un servo motor conectado a la placa Arduino, donde se encuentraprogramado el controlador de posición.

Como vemos, los campos donde se aplican plataformas Arduino son muy variadosy, en realidad, lo expuesto es solo una ínfima parte de la gran variedad de proyectos quese han realizado utilizando plataformas basadas en un microcontrolador. Esta es unaprueba más de la necesidad real que existe actualmente por disponer de este tipo deplataformas para el desarrollo de cualquier sistema electrónico, y de la versatilidad deeste tipo de plataformas, ya que permiten el desarrollo de proyectos en prácticamentecualquier medio, tanto acuático, aéreo y terrestre.

11

Page 22: Diseño hardware y desarrollo de librerías para la
Page 23: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

3BASES DE DISEÑO

3.1 Bases de diseño hardware

En esta sección se va a exponer toda la información relacionada con los aspectos hard-ware que hemos tenido en consideración a la hora de diseñar nuestra placa. Por un ladoanalizaremos las partes fundamentales en que se divide una plataforma multifunciónpara concluir analizando cada una de las opciones ofertadas por la marca Arduino.

A la hora de realizar dicho análisis, vamos a dividir el conjunto de componenteshardware de una plataforma multifunción en tres grupos fundamentales: el microcon-trolador o MCU, cerebro de cualquier sistema electrónico; la etapa de comunicación,que nos proveerá de un sistema de transmisión y recepción de datos entre la placa yel exterior; y la etapa de potencia, que definirá el funcionamiento de la plataforma encuanto a lo que alimentación eléctrica se refiere.

3.1.1 Microcontrolador

Para definir el concepto de microcontrolador es necesario analizar las partes fun-damentales de las que se compone una computadora, así como la diferencia entremicrocontrolador[20] y microprocesador[21].

Las partes fundamentales de una computadora son: la memoria (tanto RAM comoROM), la CPU o Unidad Central de Procesamiento y los periféricos de entrada/salida.Dentro de la computadora, un microprocesador se podría entender como sinónimo deCPU, ya que solo integra en su interior la Unidad Central de Procesamiento de maneraque, externamente, se debe incorporar la memoria y los periféricos de entrada/salidapara formar un sistema completo de computación. En cambio, un microcontroladorintegra en su interior tanto la CPU como la memoria, de forma que podría ser de-finido como: «Circuito integrado programable, el cual incorpora en su interior unaCPU, memoria (tanto RAM como ROM) y pines de entrada/salida (tanto digital como

13

Page 24: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

analógico).»

De esta manera se hace posible la creación de sistemas electrónicos en un espacioreducido y sin necesidad de incorporar dispositivos adicionales.

Un microcontrolador es indispensable en cualquier proyecto electrónico y será elencargado de procesar los datos provenientes de los sensores y de ejecutar las accionesrequeridas por la aplicación a través de los actuadores. Además, nos ofrecerá una seriede pines que podremos utilizar tanto para interactuar con el microcontrolador comopara que el propio microcontrolador sea capaz de interactuar con el exterior.

3.1.2 Etapa de comunicación

Otro aspecto importante a tener en consideración a la hora de diseñar un sistemaelectrónico es la manera en que el microcontrolador se comunicará con el exterior.Comunicarse con el exterior se puede entender como la manera en que la UnidadCentral de Procesamiento intercambiará información con dispositivos externos a lapropia plataforma. Este concepto engloba tanto a otras plataformas que podrían estarinterconectadas a través de un bus CAN, como la interfaz de usuario que se encarguede monitorizar los datos del sistema, donde podríamos optar por una comunicaciónserie como UART, entre otras.

Los módulos más comunes y que son de utilidad a la hora de diseñar un sistemaelectrónico son: UART, ICSP y USB[22].

UART (Universal Asynchronous Receiver-Transmitter)

Se trata de unos de los protocolos serie más utilizados, ya que la mayoría de micro-controladores disponen de dicho módulo. Se diseñó para transformar las señales quemaneja la CPU (tensiones, señales de control, etc.) y adaptarlas a fin de poder transmitiro recibir información. Además, es necesaria la transformación de señales en paralelo aserie y viceversa.

Utiliza una línea de datos simples para transmitir y otra simple para la recepción delos mismos. La información se transmite en bytes, bloques de ocho bits, y los mensajescontienen un bit de inicio (nivel bajo - ’0’) precedido de un bit opcional de paridad y unbit de final de trama (nivel alto - ’1’). Funciona con un voltaje de 5 V o 3,3 V dependiendodel microcontrolador, aunque para distancias largas de comunicación es convenienteaumentar dicho voltaje de manera que si alcanzamos una diferencia de potencialmínima de ± 6 V nos encontraremos ante el famoso protocolo de comunicaciones serieRS232.

Un punto donde flaquea este protocolo de comunicación es en el hecho de que setrata de un protocolo asíncrono, el cual se basa en la transmisión de caracteres, normal-mente de un byte de tamaño, donde cada carácter debe ser delimitado individualmen-te. Esto motivó el diseño del protocolo USART (Universal Synchronous/AsynchronousReceiver- Transmitter) que puede ser utilizado en modo asíncrono, pero también comoprotocolo de comunicación sincronizado donde una vez establecida la comunicación

14

Page 25: Diseño hardware y desarrollo de librerías para la

3.1. Bases de diseño hardware

entre dos dispositivos, la información se envía en tramas pudiendo estas incorporar ungran número de caracteres en su interior.

Un parámetro característico de este tipo de módulo es el baud rate, que informaacerca del número de señales de datos que se envían o reciben por segundo. Es unparámetro muy importante ya que, en modo asíncrono, tanto el dispositivo emisorcomo el dispositivo receptor deben estar configurado con el mismo baud rate para quepuede intercambiar información.

Los baud rate más utilizados son 2400, 9600, 19 200, 57 600 y 115 200.

ICSP (In-Circuit Serial Programming)

Se podría decir que ICSP es la propiedad que tienen algunos microcontrolador de serprogramados cuando ya se encuentran instalados en un sistema y, así, no tener lanecesidad de ser programados previamente. De esta manera se ahorra mucho dineroy tiempo en la depuración de sistemas electrónicos, ya que podemos construir lainstalación e ir programando y depurando el sistema in situ. Antes de la aparición deeste sistema de programación de microcontroladores las empresas tenían que pedira los distribuidores de circuitos impresos que programaran los dispositivos por ellos,de manera que los diseñadores electrónicos recibían el dispositivo programado y eranincapaces de programarlos de nuevo si, a la hora de realizar la comprobación delsistema, se daban cuenta de algún error en el diseño software. La marca Microchip fuela primera en ofrecer este protocolo en sus microcontroladores. Este sistema hace usode cinco (5) señales:

1. VPP: Voltaje del modo programación. Cuando aplicamos un voltaje específicoen el pin MCLR del PIC este entra en modo programación.

2. VDD: Voltaje de alimentación.

3. VSS: Referencia de tierra.

4. ICSPCLK: Reloj de la transferencia de datos.

5. ICSPDAT: Línea de datos.

Este es un protocolo de gran importancia para la comunidad relacionada con losmicrocontroladores PIC, ya que Microchip ofrece un dispositivo hardware conocidocomo PICKIT que, conectado con su programa MPLAB, permite la programación demicrocontroladores de la firma Microchip.

USB (Universal Serial Bus)

[23]Se trata de un estándar que define los cables, conectores y protocolos usados paraconectar, comunicar y proveer de alimentación eléctrica a periféricos y a dispositivoselectrónicos. Se creó de forma global con la intención de unificar la manera de conectarlos periféricos a los ordenadores y, a día de hoy, ha sustituido prácticamente a todos lostipos de conectores existentes.

15

Page 26: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

La primera especificación completa, la versión 1.0, se publicó en 1996, pero no fuehasta 1998 con la versión 1.1 que comenzó a utilizarse de forma masiva.

A pesar de que el estándar USB empezó a diseñarse hace muchos años y hay muchasversiones del mismo, las últimas tres versiones son las que utilizan la gran mayoría dedispositivos.

En nuestro proyecto haremos uso de un puerto mini USB 2.0, por tanto, basaremosel análisis en dicha versión.

USB 2.0

Es la primera versión que se considera de alta velocidad admitiendo una tasa de trans-ferencia de hasta 480 Mbits/s. Casi todos los dispositivos actuales trabajan bajo estaversión aunque, cada vez más a menudo, los diseñadores de computadores empiezan aimplementar la siguiente versión.

Esta versión de USB es la utilizada en periféricos como ratones, teclados, impreso-ras, cámaras, etc. Aun siendo la versión más utilizada, encontró su limitación con laincorporación al mercado de dispositivos en alta definición o con muy alta capacidadde información, ya que su velocidad de transmisión es demasiado pequeña como paratransmitir un alto volumen de datos en un espacio de tiempo razonable. Para solventardicha limitación surgió la versión 3.0 que transfiere datos a 600 MB/s.

En cualquier caso, si consideramos ambas versiones en relación a las aplicacionesque tiene una plataforma multifunción, no resulta importante la velocidad de trans-misión, ya que no se van a realizar transmisiones de información muy elevadas, sinoque la transmisión es de tramas relativamente simples de forma que la versión 2.0 deUSB es más que suficiente y, por ello, es la versión que hemos escogido para nuestraplataforma.

La versión 2.0, que vamos a incorporar en nuestra plataforma, dispone de cuatroseñales:

• VDD: Señal de alimentación por la cual, el puerto USB, nos proporciona 5 V detensión y una corriente de hasta 900 mA, dependiendo de la versión.

• DATA+: Señal de datos positiva.

• DATA-: Señal de datos negativa.

• GND: Referencia de tierra.

El protocolo USB se caracteriza por ser diferencial en cuanto a la señal de datos,esto significa que la señal que viaja por DATA+, viajará por DATA-, pero invertida. Deesta forma, las alteraciones electromagnéticas que pueda sufrir el medio de transmisiónafectará a ambas señalas por igual, y la diferencia entre dichas señales se mantendráconstante. Esta diferencia entre DATA+ y DATA-, se corresponderá con la señal originalque se pretende transmitir.

16

Page 27: Diseño hardware y desarrollo de librerías para la

3.1. Bases de diseño hardware

3.1.3 Etapa de comunicación

En cuanto al sistema de alimentación que precisa nuestra plataforma debemos analizarlos voltajes de alimentación que utilizan cada uno de los dispositivos que utilicemos.Una vez sepamos con qué voltaje se van a alimentar cada uno de ellos debemos analizarqué fuentes de alimentación tendremos conectadas a nuestro sistema, tanto fuentesde alimentación externas como el propio puerto USB, y dotar a nuestro sistema con losreguladores de tensión LDO-Low-DropOut Regulator adecuados que nos conviertanel voltaje de alimentación a un rango adecuado para alimentar los dispositivos de laplaca.

También podemos ofrecer salidas de alimentación desde la placa al exterior paraalimentar dispositivos externos como, por ejemplo, motores o cualquier tipo de actua-dor. Por ello es común dotar a las plataformas con una salida de 5 V y con otra de 3,3V.

De forma complementaria, todos los sistemas de alimentación precisan de protec-ciones ante diferentes aspectos eléctricos por lo que existen tres dispositivos que todosistema electrónico debe incorporar:

• Diodo rectificador: Existen diferentes puntos sensibles en toda etapa de alimen-tación, como las entradas de voltaje, que necesitan un diodo rectificador queimpida el paso de corriente eléctrica en contra dirección, ya que esto podría que-mar la fuente de alimentación. Por ello es necesario colocar diodos rectificadoresque permitan el paso de la corriente eléctrica en una sola dirección e impidan elflujo de corriente en dirección opuesta a la deseada.

• Fusible: Todo sistema electrónico debe incorporar un fusible que limite el vol-taje que alimenta la plataforma. Hay que tener en cuenta que los dispositivossoldados en la placa tienen un rango específico de voltaje de funcionamiento y,sobrepasar dicho límite podría quemar determinados componentes.

• Resistencias: Siguiendo el principio de la ley de Ohm, donde el voltaje es igualal producto de la resistencia y la intensidad, es fácil deducir que con un deter-minado valor de resistencia y un rango de voltaje podemos limitar la intensidadde entrada de nuestros circuitos integrados. Por tanto, de la misma forma queexisten protecciones ante voltaje, existen protecciones ante intensidad y unaresistencia es necesaria en determinados dispositivos.

17

Page 28: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

Una vez concluida la exposición de toda la información acerca del hardware en eldiseño de plataformas multifunción vamos a proceder a realizar un análisis completode todas las plataformas ofertadas por la casa Arduino[24].

Antes de empezar con el análisis de productos debemos destacar el hecho de queArduino tiene varias empresas encargadas del diseño de placas. Es por ello que, enocasiones, existen placas aparentemente parecidas en cuanto a prestaciones y tamañoy, en las cuales, la diferencia primordial recae en la empresa que ha realizado el diseñode la placa. Las placas realizadas en Italia están diseñadas por la empresa Smart Projects,pero otras han sido diseñadas en EE.UU. bajo el nombre de SparkFun Electronics oGravitech.

Separaremos el análisis diferenciando dos grandes familias de placas: Entry Level onivel básico, y Enhanced Features o nivel avanzado.

3.1.4 Nivel básico

Esta sección se centra en productos básicos y sencillos con los que podemos empezara manejar el mundo de las placas multifunción y realizar nuestros primeros proyec-tos electrónicos, así como establecer una toma de contacto con la programación demicrocontroladores.

Arduino MICRO

La plataforma Arduino MICRO es la placa más pequeña y sencilla con plena funcio-nalidad que existe en el mercado de Arduino, junto con la Arduino NANO. Es unaplataforma pensada para prestar una gran autonomía en un tamaño muy reducido. Enocasiones existen proyectos que no requieren una gran potencia de procesamiento dedatos y cuya programación es ligera, por lo que no requieren gran cantidad de memoria.En este caso, la plataforma Arduino MICRO es la mejor opción. Para conseguir unespectacular tamaño de 48mm x 18mm han integrado en la placa un microcontroladorATmega32u4 con un módulo USB integrado (built-in), por lo que no tienen la necesidadde incorporar un segundo chip para comunicarse por USB. En cuanto a especifica-ciones, dispone de veinte (20) pines digitales (doce (12) de ellos configurables comoentradas analógicas). Incorpora 32 KB de memoria flash, 2,5 KB de memoria RAM y 1KB de memoria EEPROM.

Figura 3.1: Arduino MICRO.

18

Page 29: Diseño hardware y desarrollo de librerías para la

3.1. Bases de diseño hardware

Arduino NANO

La plataforma Arduino NANO tiene unas especificaciones parecidas a la Arduino MI-CRO, ya que son placas de tamaño muy reducido en las que la calidad del diseño recaeen aumentar la autonomía y disminuir el tamaño, y no en aumentar únicamente lasprestaciones. La diferencia básica entre las dos placas recae en el fabricante, ya que laplataforma Arduino NANO ha sido diseñada por la empresa estadounidense Gravitech.El tamaño de esta placa es de 43,2mm x 18,5mm y dispone de un microcontroladorATmega328 que nos ofrece catorce (14) pines digitales y ocho (8) pines analógicos. Estaplataforma monta un chip de la marca FTDI que se encarga de convertir las señalesUART a USB y viceversa, que podemos encontrar en la parte trasera de la placa, y queutilizamos para establecer la comunicación por USB. Además nos ofrece 32 KB dememoria flash, 2 KB de memoria RAM y 1 KB de memoria EEPROM.

Figura 3.2: Arduino NANO: (izquierda) vista frontal, (derecha) vista trasera.

Arduino UNO

Figura 3.3: Arduino UNO Rev3.

La plataforma Arduino UNO es la más uti-lizada de toda la familia de productos deArduino. Es la placa más robusta y sen-cilla con la que empezar a programar unmicrocontrolador y realizar nuestros pri-meros proyectos electrónicos. Está consi-derada como una plataforma estándar dereferencia por la comunidad de diseñado-res electrónicos y está diseñada con unmicrocontrolador ATmega328P que ofre-ce catorce (14) pines de entrada/salidadigitales, seis (6) entradas analógicas, ade-más de todo tipo de conectores tanto pa-ra comunicación, por USB y ICSP, como para alimentación, a través del conector Jack,batería o el mismo puerto USB. En cuanto a memoria, encontramos 32 KB de memo-ria flash, 2 KB de memoria RAM y 1 KB de memoria EEPROM. Esta plataforma tieneespecial relevancia en nuestro estudio, ya que se trata de la placa que utilizaremoscomo referencia para el diseño de nuestro proyecto, pero con componentes de marcaMicrochip.

19

Page 30: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

Arduino 101

Figura 3.4: Arduino 101.

La plataforma Arduino 101 ha sido dise-ñada conjuntamente con Intel y ha sidobautizada como la sucesora de la plata-forma Arduino UNO. Se trata de una ac-tualización de la misma que incorpora unmicrocontrolador de la casa Intel y quedispone de una tecnología mucho másavanzada que su antecesora. Dentro delas mejoras relevantes encontramos re-conocimiento de gestos, acelerómetro ygiroscopio de seis ejes, así como un siste-ma bluetooth para controlar la placa conun smartphone. Esta placa nos ofrece catorce (14) pines de entrada/salida digitales,seis (6) entradas analógicas, conector USB para comunicación en serie y programación,conector Jack de 2,1 mm, conectores para programar el microcontrolador a través deICSP y pines específicos para comunicación SPI-Serial Periphereal Interface. Ademásdispone de 196 KB de memoria flash y 24 KB de memoria RAM.

Arduino PRO

Figura 3.5: Arduino PRO.

Por último encontramos la plataformaArduino PRO. Esta ha sido diseñada porSparkFun Electronics y, a pesar de tenerel calificativo PRO, no destaca en excesopor sus especificaciones con respecto aotros productos como la Arduino UNO,sino que se denomina PRO debido a quela placa te ofrece diferentes posibilidadesy eres tú el que, en relación a tus necesi-dades, debes soldar en la placa los com-ponentes que precises. La placa está pen-sada para instalaciones permanentes. Co-mo se puede apreciar en la figura 3.5, la

placa no tiene cabezales soldados en los pines ni el conector Jack de 2,1 mm. De estamanera la placa tiene un margen de diseño personal. Así, eres tú el que, dependiendode las necesidades de tu instalación diseñas la versión final de la plataforma. En cuantoa sus especificaciones, tiene incorporado un microcontrolador ATmega328 que nosproporciona catorce (14) pines de entrada/salida digital y seis (6) pines de entradaanalógica. Además, disponemos de 32 KB de memoria flash, 2 KB de memoria RAM y 1KB de memoria EEPROM.

20

Page 31: Diseño hardware y desarrollo de librerías para la

3.1. Bases de diseño hardware

3.1.5 Nivel avanzado

En esta sección vamos a encontrar plataformas con una sustancial mejora en cuantoa prestaciones. Veremos que el punto común de dichas ampliaciones recaen en lacantidad tanto del número de pines como de conexiones; y el microcontrolador, enrelación a la velocidad de procesamiento de datos o a la capacidad de memoria. Estetipo de plataformas están orientadas a proyectos complejos que precisan más potenciay velocidad. Se podrían considerar placas avanzadas, las cuales precisan conocimientossuperiores en cuanto a dispositivos electrónicos y programación.

Arduino MEGA 2560

Figura 3.6: Arduino MEGA 2560.

La plataforma Arduino MEGA se podríaver como la hermana mayor de la placaArduino UNO, ya que sigue la misma filo-sofía pero con un mayor número de pinesy algo más de potencia de procesamiento,aunque conservando una arquitectura de8-bit en el microcontrolador. Esta sería laplataforma multifunción idónea para in-corporar a la impresora 3D de Arduino.En comparación a su hermana pequeña,la versión MEGA de Arduino nos propor-ciona cincuenta y cuatro (54) pines deentrada/salida digital y dieciséis (16) entradas analógicas, así como 256 KB de memoriaflash, 8 KB de memoria RAM y 4 KB de memoria EEPROM integrado en un chip ATme-ga2560. Además dispone de las mismos módulos de comunicación que la placa ArduinoUNO: cuatro módulos UART, comunicación por USB y permite la programación a travésdel protocolo ICSP.

21

Page 32: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

Arduino DUE

La plataforma Arduino DUE es la primera plataforma de Arduino basada en una ar-quitectura de 32-bit con un microcontrolador SAM3X8E ARM Cortex-M3. Esta placadispone de cincuenta y cuatro (54) pines de entrada/salida digital y doce (12) pines deentrada analógica. Además, se diferencia de las placas anteriores en el hecho de quepresenta una velocidad de procesamiento muy superior que alcanza los 84 MHz (encomparación a los 16 MHz de las placas anteriores) y dispone de dos convertidoresdigital-analógico DAC. Esta placa es la opción perfecta para realizar proyectos a granescala.

Figura 3.7: Arduino DUE.

Arduino ZERO

Figura 3.8: Arduino ZERO.

La plataforma Arduino ZERO es una actualizaciónde la plataforma Arduino UNO. Así como la pla-ca Arduino MEGA 2560 ampliaba el tamaño dela versión UNO añadiendo más pines y algo másde potencia, aunque conservando la arquitecturade 8-bits, la version ZERO de Arduino amplía lacapacidad de procesamiento de datos incorporan-do un microcontrolador SAMD21 ARM Cortex-M0con arquitectura de 32-bit que proporciona unavelocidad de reloj de 48 MHz, 256 KB de memoriaflash y 32 KB de memoria RAM. En cuanto a pinesencontramos veinte (20) pines de entrada/salidadigital, seis (6) entradas analógicas, con un con-vertidor analógico-digital de 12-bit de resolución y una (1) salida analógica, con unmódulo DAC-Digital to Analog Converter de 10-bit de resolución. Esta plataforma seríala alternativa idónea si la plataforma Arduino UNO no pudiera satisfacer todas lasnecesidades de nuestros diseños.

22

Page 33: Diseño hardware y desarrollo de librerías para la

3.1. Bases de diseño hardware

3.1.6 Tabla comparativa

Placa Arduino MICRO Arduino NANO Arduino UNO Arduino 101 Arduino PRO

Marca Atmel Atmel Atmel Intel AtmelMCU ATmega32u4 ATmega328 ATmega328P Intel Curie ATmega328Arquitectura 8-bit 8-bit 8-bit 32-bit 8-bitM.FLASH 32 KB 32 KB 32 KB 196 KB 32 KBM.RAM 2,5 KB 2 KB 2 KB 24 KB 2 KBM.EEPROM 1 KB 1 KB 1 KB – 1 KBReloj 16 MHz 16 MHz 16 MHz 32 MHz 16 MHzDig. PIN (20) (14) (14) (14) (14)Ana. PIN (12) (8) (6) (6) (6)

Cuadro 3.1: Tabla comparativa. Sección: Nivel básico (entry level).

Placa Arduino MEGA 2560 Arduino DUE Arduino ZERO

Marca Atmel Atmel AtmelMCU ATmega2560 SAM3X8E ARM Cortex-M3 SAMD21G18 ARM Cortex-M0Arquitectura 8-bit 32-bit 32-bitM.FLASH 256 KB 512 KB 256 KBM.RAM 8 KB 96 KB 32 KBM.EEPROM 4 KB – –Reloj 16 MHz 84 MHz 48 MHzDig. PIN (54) (54) (20)Ana. PIN (16) (12) (7)

Cuadro 3.2: Tabla comparativa. Sección: Nivel avanzado (enhanced features).

23

Page 34: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

3.2 Bases de diseño software

Hasta el momento hemos tratado al completo el análisis de los aspectos de hardware deuna plataforma multifunción. El concepto de hardware, como ya sabemos, engloba atodos los elementos físicos que forman la placa, así como todos los circuitos integrados,ya sea el microcontrolador o el conversor de UART a USB; todos los dispositivos depotencia, como reguladores de tensión o fusibles; dispositivos que utilizamos paraconseguir estabilidad eléctrica en la placa, como condensadores o resistencias; y, ade-más, los dispositivos que utilizamos para alimentar a la placa desde el exterior o paracomunicarnos con un sistema de gestión como el puerto USB o la entrada Jack de 2,1mm para alimentación.

En este apartado vamos a centrar nuestro estudio en el aspecto de software quese podría definir como el conjunto de componentes lógicos, y por tanto no físicos,que hacen posible la realización de tareas específicas. Desde un punto de vista gene-ral se podría entender el concepto de software como los programas que utilizamospara realizar funciones determinadas con un sistema computacional. Para generarprogramas o para crear software es necesario saber qué es la programación y qué len-guajes de programación son los más comunes para aplicaciones como las plataformasmultifunción.

En la actualidad la noción de programación se encuentra muy asociada a la creaciónde aplicaciones informáticas y videojuegos; es el proceso por el cual una personadesarrolla un programa valiéndose de una herramienta que le permita escribir el código(el cual puede estar en uno o varios lenguajes de programación) y de otra que sea capazde traducirlo a lo que se conoce como lenguaje de máquina, el cual puede ser entendidopor un microprocesador o microcontrolador. A continuación vamos a analizar loslenguajes más comunes para programar, pero antes debemos definir una serie deconceptos importantes:

• Lenguaje de bajo nivel: es el lenguaje orientado a lo que entiende la máquinaencargada de procesar y ejecutar el programa.

• Lenguaje de alto nivel: es el lenguaje orientado a nuestras capacidades cogniti-vas que utiliza estructuras lógicas más adaptadas al entendimiento humano queal entendimiento de la máquina.

• Lenguaje orientado a objetos: es un tipo de lenguaje en el que tú creas entidadeso métodos dentro del código que permiten un tipo de programación ágil de altonivel.

3.2.1 Lenguaje Ensamblador

El lenguaje ensamblador es el lenguaje de programación más parecido al lenguaje demáquina. Se trata de un lenguaje de bajo nivel que implementa una representaciónsimbólica de los códigos de máquina.

24

Page 35: Diseño hardware y desarrollo de librerías para la

3.2. Bases de diseño software

3.2.2 Lenguaje JAVA

Java es un lenguaje de programación de propósito general orientado a objetos quefue diseñado específicamente para tener tan pocas dependencias de implementacióncomo fuera posible. Su intención es permitir que los desarrolladores de aplicacionesescriban el programa una vez y lo ejecuten en cualquier dispositivo sin tener que sercompilado de nuevo para ser ejecutado en otra. Java es, a partir de 2012, uno de loslenguajes de programación más populares en uso.

Dada esta definición es fácil imaginar uno de los usos fundamentales de este len-guaje de programación: la elaboración de aplicaciones y páginas web. Efectivamente,estos dos aspectos de la programación requieren que un programa puede ser ejecutadoen diversos dispositivos con una compatibilidad absoluta sin tener que adaptarse alsistema operativo o a requisitos específicos del dispositivo donde se ejecuten.

3.2.3 Lenguaje C y C++

El lenguaje de programación C es un lenguaje de programación orientado a la imple-mentación de sistemas operativos, concretamente Unix. Unix es un tipo de sistemaoperativo a partir del cual se han implementado sistemas operativos posteriores comoel tan conocido Mac OS X de Apple.

Este lenguaje de programación es apreciado por su eficiencia del código. Esto sedebe a que conserva muchas características de bajo nivel (ensamblador o lenguaje demáquina) y otras muchas de alto nivel. Esto permite un equilibrio entre los beneficiosde programar en alto nivel sin prescindir de la eficacia de programar en lenguaje demáquina.

El lenguaje de programación C++ se podría definir como una actualización dellenguaje C, con la característica de estar orientado a objetos (como el lenguaje JAVA).

3.2.4 Concepto de librería

Hasta ahora hemos definido el concepto de programación y los tipos de lenguajes máscomunes. A la hora de programar una placa multifunción debemos seguir una serie depasos fundamentales para conocer a la perfección las características de nuestra placa yde nuestro microcontrolador para poder realizar la programación de manera correcta.

Como primer paso, debemos conocer de qué módulos dispone nuestro microcon-trolador. En el caso de la placa Arduino UNO, esta lleva incorporado un microcontro-lador Atmel ATmega328P, y cada microcontrolador dispone de un datasheet dondepodemos encontrar absolutamente toda la información relativa a dicho microcontrola-dor. A grandes rasgos, este microcontrolador dispone de los siguientes módulos:

• Temporizador de 8 bits: configurable como contador o comparador.

• Temporizador de 16 bits: configurable como contador o comparador.

• Seis canales PWM: para poder obtener una salida analógica.

25

Page 36: Diseño hardware y desarrollo de librerías para la

3. BASES DE DISEÑO

• Convertidor analógico-digital: para poder leer entradas analógicas y convertir-las a señales digitales que le microcontrolador pueda operar.

• USART: para poder comunicar el microcontrolador con el exterior utilizando unprotocolo serie.

• SPI: para poder comunicar el microcontrolador con el exterior utilizando unprotocolo serie.

• I2C: normalmente utilizado para comunicar dispositivos entre si, en este casoplataformas multifuncionales.

Una vez conocemos los módulos de que dispone nuestro microcontrolador po-demos diseñar programas nutriéndonos de dichos módulos, pero hay funciones de-terminadas que vamos a utilizar innumerables veces como por ejemplo: comunicarel microcontrolador con un ordenador para monitorizar datos, leer y escribir datosdigitales, leer y escribir datos analógicos, utilizar temporizadores o contadores, y unlargo etcétera. Es por ello que es importante el concepto de librería.

Las librerías están formadas por una serie de métodos programados con anteriori-dad al diseño del proyecto que nos ahorrarán mucho tiempo a la hora de programar. Esdecir, se trata de un conjunto de implementaciones funcionales que nos ofrecen unainterfaz bien definida para facilitar la programación. Estas librerías no están diseñadaspara actuar como un programa autónomo, es decir, no tienen ninguna función asociadapor si solas, pero al utilizarlas dentro de nuestro programa adquieren sentido.

Por tanto, al analizar las librerías de Arduino vemos que para poner en valor altode voltaje un pin digital del microcontrolador, no es necesario recurrir al data sheetdel microcontrolador, sino que es suficiente con escribir la función digitalWrite(pin,value) y especificar el pin que nos interesa y el valor que deseamos, en este caso valoralto de tensión. Como podemos apreciar en el ejemplo esto agiliza mucho el procesode programación y es precisamente por este motivo por el que es tan importante esteconcepto.

Librerías relevantes de Arduino

[25]En esta sección vamos a analizar de forma breve las librerías más importantes quenos ofrece Arduino para programar sus placas.

• EEPROM: encontramos todas las funciones relacionadas con ese tipo de memo-ria.

• ETHERNET: funciones para conectar a internet la placa Arduino (precisa de undispositivo extra llamado Arduino Ethernet Shield.

• LiquidCrystal: funciones relativas a la configuración de la pantalla LCD.

• SERVO: aquí encontramos todo lo necesario para controlar motores conectadosa nuestra placa.

26

Page 37: Diseño hardware y desarrollo de librerías para la

3.2. Bases de diseño software

• SPI: para comunicarse con otros dispositivos utilizando un protocolo serie SPI.

• SoftwareSerial: para establecer comunicaciones serie a partir de un pin digital.

• Digital: para configurar todo lo relacionado con pines digitales y sus funciones.

• Analógico: para configurar todo lo relacionado con pines analógicos y sus funcio-nes.

• Timers: para utilizar los timers incorporados en el microcontrolador, así comocontadores y comparadores.

De forma general, las librerías expuestas forman parte importante de la gran canti-dad de librerías que ofrece Arduino de forma oficial. Al atribuirle el calificativo de oficialhacemos referencia a que se trata de librerías que han sido diseñadas por Arduino yque no provienen de la comunidad Arduino.

A parte de las librerías oficiales de Arduino, que sirven para controlar los productosofertados por la misma, existen librerías que han sido desarrolladas por la comunidadde utilitarios de plataformas Arduino y que están a nuestra disposición a través del forode Arduino. Estas librerías no configuran funciones propias de los productos Arduino,sino que configuran módulos y dispositivos ajenos a Arduino, pero que se utilizan muyhabitualmente acompañando a dichas plataformas.

A modo de ejemplo, si dispones de una plataforma Arduino y quieres desarrollarun proyecto que integre en su diseño un motor paso a paso, comúnmente se opta porun motor BYJ-48 por su bajo precio y su gran utilidad para proyectos sencillos. Se tratade un motor paso a paso que funciona a 5 V y ofrece una frecuencia de 100 Hz. Portanto, si te adentras dentro de la comunidad Arduino y terminas haciendo uso de unmotor como en el ejemplo verás que Arduino no dispone de ninguna librería oficialpara utilizar dicho motor, aunque este sea utilizado muy a menudo junto a plataformasArduino, pero en el foro de desarrollo software se ofrecen de forma gratuita libreríaspara este motor que funcionan con las placas Arduino.

Es por este motivo por el cual el foro de Arduino, junto a su comunidad de desarro-lladores, son uno de los factores más importantes a tener en consideración a la hora deiniciarse en el uso de plataformas multifunción de dicha marca. Estos foros siempreson de utilidad, tanto para encontrar soporte técnico, como soporte software, comopara hacer uso de todo el material gratuito que los desarrolladores ponen a nuestradisposición en dicho foro.

27

Page 38: Diseño hardware y desarrollo de librerías para la
Page 39: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

4ARDUINO UNO

En este apartado vamos a enfocar el estudio en el análisis de una de las plataformasanteriormente expuestas: Arduino UNO[26]. El motivo de hacer un análisis particularrecae en que, como hemos mencionado anteriormente, la placa que vamos a diseñar yque es objeto de este proyecto está basada en la versión UNO de las placas de Arduino.

Para analizar las características de esta placa vamos a dividir los campos de estudioen dos grandes grupos: etapa de comunicación y etapa de potencia.

4.1 Etapa de comunicación

La placa Arduino UNO tiene varios métodos de comunicación, ya sea con otra placa ocon una interfaz de usuario a partir de un terminal de datos en un ordenador conven-cional, aunque la utilidad más importante de poder conectar la placa a un ordenador esla programación del microcontrolador a través del gestor de arranque y sin necesidadde conectar ningún dispositivo hardware adicional más que el cable USB.

En el nacimiento de los microcontroladores no existía ninguna forma de que tú,como diseñador de proyectos, pudieras comprar por tu cuenta un microcontrolador yprogramarlo en casa, además de poder realizar una depuración rápida y ágil, sino que elproveedor de microcontroladores entregaba los dispositivos previamente programadoscon tu código. Esto dificultaba mucho la depuración de los sistemas, ya que cada vezque se encontraba un fallo y se corregía el código del programa debías solicitar unmicrocontrolador nuevo.

Todo cambió con la aparición del protocolo de comunicación ICSP-In-Circuit SerialProgramming, a partir del cual el microcontrolador podía ser programado todas lasveces que fueran necesarias por el usuario de forma sencilla. Este protocolo es elutilizado por la empresa Microchip para programar sus microcontroladores a partirdel dispositivo PICKIT y del programa de desarrollo MPLAB. De esta forma, se crea un

29

Page 40: Diseño hardware y desarrollo de librerías para la

4. ARDUINO UNO

sistema de gran utilidad para programar el software desde MPLAB y luego grabarlo enel microcontrolador a partir del dispositivo hardware PICKIT.

El problema que aparece con este sistema es que no todo el mundo utiliza la mismamarca de microcontroladores sumado a que no todo el mundo utiliza el programaMPLAB para escribir sus códigos. Entonces apareció lo que se conoce como bootloadero gestor de arranque. Este programa esta compuesto por un trozo de código sencilloy de poco peso que se integra en la base de la memoria del microcontrolador y quepermite programar el microcontrolador a partir del puerto USB siguiendo el protocolode comunicación UART.

La aparición de los gestores de arranque para la programación de microcontro-ladores es un factor clave para entender la universalización que están sufriendo estetipo de dispositivos en el sector de diseño de sistemas electrónicos, ya que no solo tepermite programar tu microcontrolador desde cualquier ordenador a través del gestorde arranque, sino que puedes crear tu propio gestor de arranque para satisfacer tusnecesidades particulares como consumidor.

Es por ello que los protocolos de comunicación UART y ICSP tienen una gran rele-vancia a la hora de estudiar la etapa de comunicación de una plataforma multifuncióncomo Arduino UNO.

4.1.1 UART TTL

El protocolo de comunicación UART es uno de los protocolos más utilizados por losusuarios de microcontroladores para comunicación en serie, por tanto, como era deesperar, el microcontrolador de la versión UNO de Arduino incorpora dicho módulo.Aun así, como sabemos, en la gran mayoría de casos la comunicación se realiza apartir del puerto USB, tanto para programar el dispositivo como para monitorizar lasfunciones del programa, y es por ello que Arduino integró en su plataforma un chipadicional que se encargara de la conversión de datos de UART a USB.

En las primeras placas de Arduino como NG, Diecimila o Duemilanove, Arduinooptó por incorporar en la placa un chip de la casa FTDI-Future Technology DevicesInternational conocido como FT232RL. Este chip es uno de los más utilizados enel mundo de la electrónica para convertir las señales de UART a USB. Estas placasevolucionaron hasta que en el año 2010, Arduino sacó a la venta la versión UNO congrandes cambios respecto a sus antecesoras. Uno de esos cambios fue reemplazarel chip FT232RL por otro microcontrolador de la casa Atmel para programarlo comoconvertidor de UART a USB y no tener que depender de un chip específico para estafinalidad.

El cambio del chip trajo consigo numerosos beneficios, aunque la mayoría de ellossolo están al alcance de programadores avanzados. El cambio más relevante fue elprecio, ya que optaron por incorporar en la placa un microcontrolador ATmega8u2 queresulta más barato que el chip de FTDI. Dentro de los beneficios mencionados destacala capacidad de poder programar de nuevo el chip para que sea reconocido como unteclado, ratón o cualquier periférico y no solo como un puerto serie, cosa que si ocurríacon el chip FT232RL. Esta nueva funcionalidad aporta más versatilidad al gran abanico

30

Page 41: Diseño hardware y desarrollo de librerías para la

4.2. Etapa de potencia

de posibilidades que tienen las plataformas multifunción.

En la actualidad, la última versión de Arduino UNO (la versión Rev3) ha actuali-zado el microcontrolador a un ATmega16u2 de forma que amplía la memoria flashdisponible para disminuir así la restricción de memoria que tenía la anterior versión. Acontinuación podemos apreciar las principales diferencias.

Plataforma Arduino UNO Arduino UNO

Marca Atmel AtmelMCU ATmega8u2 ATmega16u2Arquitectura 8-bit 8-bitM.FLASH 8 KB 16 KBM.RAM 512 B 512 BM.EEPROM 512 B 512 BReloj 16 MHz 16 MHz

Cuadro 4.1: Tabla comparativa: Microcontrolador convertidor de UART a USB de Ar-duino UNO.

4.1.2 ICSP

La placa Arduino UNO lleva incorporado un cabezal de seis puntas que forma partede la conexión ICSP. A pesar de tener poca utilidad, esta es de vital importancia, yaque es la única manera de programar el dispositivo sin necesidad de recurrir al gestorde arranque. Además, en caso de querer actualizar el gestor de arranque o de querersustituirlo por uno mejor, la única forma de hacerlo es a través de la conexión ICSP.

Por tanto, se trata de un sistema de programación del microcontrolador que, deforma amateur, probablemente tenga poca utilidad hasta el punto de que no se lleguea utilizar nunca, pero en el caso de gente profesional puede ayudar a sacar el máximopartido a nuestro proyectos.

4.2 Etapa de potencia

A la hora de proveer de alimentación a la plataforma Arduino diseñó tres métodospor los cuales poder alimentar a la placa de tensión eléctrica. Estos tres métodosno son incompatibles entre ellos, sino que la placa tiene incorporado un sistema deselección automático de alimentación. Los tres sistemas de alimentación se exponen acontinuación:

1. Puerto USB: El puerto USB de un ordenador convencional ofrece un voltaje dealimentación de 5 V por lo que podemos alimentar nuestra placa a partir de laalimentación proveniente del puerto USB. Además dispone de un fusible queprotege el sistema de alimentación por USB ante posibles sobrecargas.

2. AC-to-DC: Podemos alimentar la placa a partir de un adaptador que convierta lacorriente alterna de cualquier enchufe convencional, en corriente continua apta

31

Page 42: Diseño hardware y desarrollo de librerías para la

4. ARDUINO UNO

para alimentar la placa. En concreto, la plataforma de Arduino utiliza un puertoJack de 2,1 mm.

Figura 4.1: Cabezal de cable Jack de 2,1mm.

3. Fuente externa: El tercer y último método de alimentación de la placa ArduinoUNO es a partir de una fuente de alimentación externa, como una batería o unafuente de tensión. Es lógico que dicha plataforma tenga la capacidad de alimen-tarse a partir de una fuente externa, ya que la placa podría estar incorporada enun sistema más grande que deba estar en movimiento y no pueda conectarse a unenchufe convencional o al puerto USB de un ordenador. Por tanto, la opción másefectiva es la de utilizar una fuente externa. Dicha fuente deberá conectarse porsus dos polos a dos de los pines de la plataforma que se encuentran referenciadoscomo Vin y GND.

A la hora de analizar la etapa de potencia de una placa debemos tener en totalconsideración los voltajes que precisamos para alimentar todos los chips integradosque tendremos soldados a la placa. De forma estándar los dos voltajes más utilizadospor los chips, así como los posibles periféricos conectados a la plataforma, suelenser 5 V o 3,3 V. En concreto, la plataforma Arduino UNO se alimenta a 5 V, por tantodeberemos asegurarnos de que con cualquiera de los tres métodos de alimentaciónque nos ofrece la placa, el voltaje resultante que alimente la placa sea de 5 V. Para elloes necesario integrar en la plataforma un regulador de tensión a 5 V, también conocidocomo LDO-Low-DropOut Regulator, que tienen la característica especial de ofrecer unasalida muy estable incluso cuando la entrada tiene un valor muy cercano al de salida.En los casos en que la entrada es muy parecida a la salida, los reguladores convencio-nales tienen problemas para convertir ese voltaje ya que no pueden determinar conexactitud si deben convertir el voltaje o no hacerlo, por lo que se encuentran cambiandocontinuamente su modo de operación de encendido a apagado y esto genera ruido enla salida, es decir variaciones aleatorias de voltaje. Por ello, es conveniente integrar enlas plataformas, que son especialmente delicadas en cuanto a alimentación eléctrica,un regulador LDO para asegurar una alimentación constante de voltaje en la placa.

Ahora que hemos analizado qué tensión precisamos en la placa debemos analizarel rango de voltajes de entrada que admiten tanto los dispositivos de seguridad comofusible, resistencias o diodos como los dispositivos reguladores de tensión, ya que es

32

Page 43: Diseño hardware y desarrollo de librerías para la

4.2. Etapa de potencia

fundamental que estos no sufran daños por exceso de voltaje y que, a la vez, puedanfuncionar correctamente con una alimentación suficiente. En particular, la placa deArduino admite un rango de tensiones de 6 V a 20 V, pero, estrictamente, si alimentamosa la placa con un voltaje menor a 7 V la salida de 5 V podría verse alterada provocandoun mal funcionamiento de la placa. Además, si alimentamos con una tensión mayora 12 V corremos el riesgo de que algunos dispositivos internos de la placa se sobreca-lienten pudiendo quemarse. Por lo tanto, como conclusión final, debemos tener enconsideración que el rango de tensiones idóneo para alimentar la placa es de entre 7 Vy 12 V.

Adicionalmente, la placa Arduino UNO incorpora un regulador de tensión a 3,3 V elcual se encuentra conectado a uno de los cabezales de la placa de forma que la propiaplaca ofrece al usuario una salida de 3,3 V para utilizar dispositivos externos.

A continuación vamos a analizar cada uno de los dos métodos de conversión detensión por separado de forma más concreta y técnica:

4.2.1 Método de conversión a 5 V

Figura 4.2: Esquemático: Etapa de regulación de tensión a 5 V.

En la figura 4.2 vemos el circuito esquemático diseñado por Arduino para convertirla tensión de entrada en un voltaje regulado de 5 V. En dicha figura podemos apreciardos dispositivos que son de gran interés: el conector X1-POWERSUPPLY y el reguladorU1-NCP1117ST50T3G.

1. X1-POWERSUPPLY: Este componente representa el puerto de entrada de tensiónDC de la placa a partir del Jack 2,1 mm. Se trata, por tanto, de uno de los métodosde alimentación que ofrece la plataforma para alimentarse desde un enchufe decorriente alterna convencional.

2. U1-NCP1117ST50T3G: Este dispositivo representa el regulador LDO a 5 V. En elpin INPUT entrará el voltaje proveniente del conector Jack 2,1 mm y en el pinOUTPUT obtendremos la tensión deseada de 5 V.

33

Page 44: Diseño hardware y desarrollo de librerías para la

4. ARDUINO UNO

FUNCIONAMIENTO:

1. Por el conector Jack 2,1 mm obtendremos la tensión de entrada que, como yaavanzamos anteriormente, debe encontrarse dentro del rango de entre 7 V y 12 V.

2. El diodo con la referencia D1-M7 nos servirá como dispositivo de seguridad paraflujos invertidos de corriente. De esta manera, será imposible que haya un flujode corriente que entre dentro del conector Jack 2,1 mm.

3. El condensador cerámico con la referencia PC1 (47u) nos filtrará la señal prove-niente del conector Jack 2,1 mm. De esta manera, evitaremos picos de voltaje enla entrada del regulador de tensión, es decir, hace la función de filtrado de ruido.

4. El regulador de tensión LDO convierte el voltaje de entrada del conector Jack 2,1mm en una tensión de 5 V.

5. En la salida del regulador encontramos dos condensadores, uno cerámico con lareferencia (PC2 (47u) y otro electrolítico con la referencia C2 (100n). La funciona-lidad de estos dos condensadores es la de filtrado de señal. De esta manera, lasalida de 5 V no presentará picos y será estable.

Debemos tener en consideración diferentes aspectos dentro de este análisis. Porun lado, en la entrada del regulador de tensión LDO podemos apreciar la etiqueta VIN.Esto significa que el cabezal de la placa por el cual podemos alimentar la misma a partirde una fuente externa se encuentra conectado a la entrada del regulador de tensión.Por tanto, este regulador va a convertir la tensión de entrada tanto del Jack 2,1 mmcomo el voltaje proveniente del cabezal de entrada de una fuente externa. Por otro lado,también vemos que en este proceso de conversión la entrada USB no interfiere. Estoes debido a que, como ya hemos comentado anteriormente, la entrada de voltaje delpuerto USB es de 5 V y, por tanto, no es necesario este tipo de conversión de tensión.

34

Page 45: Diseño hardware y desarrollo de librerías para la

4.2. Etapa de potencia

4.2.2 Método de conversión a 3,3 V

Figura 4.3: Esquemático: Etapa de regulación de tensión a 3,3 V.

En la figura 4.3 podemos ver el circuito esquemático diseñado por Arduino paraconvertir la señal de 5 V a 3,3 V. En dicha figura, vamos a diferenciar los siguientescomponentes:

1. U5A-LMV358IDGKR: Este dispositivo representa un amplificador operacional(AO). Cuando un AO no se encuentra realimentado por ninguno de sus pinesde entrada, hace la función de comparador. Es decir, cuando la tensión en suentrada positiva (+) sea superior a la tensión en su entrada negativa (-), en lasalida (señal GATE-CMD) encontraremos un valor alto de voltaje (un ’1’ lógico).En caso contrario, en la salida encontraremos un valor bajo de tensión (un ’0’lógico).

2. FDN340P: Este dispositivo representa un transistor MOSFET tipo-P. El compor-tamiento de este dispositivo se podría entender como si fuera un interruptor, esdecir, si la salida del AO (señal GATE-CMD) es un valor bajo de tensión (un ’0’lógico), la señal USBVCC, que se corresponde con la tensión de 5 V provenientedel puerto USB pasará por el transistor y llegará a la entrada del regulador detensión LDO. En caso contrario, el interruptor se cerrará y la señal de tensión delUSB no podrá llegar al regulador.

3. U2-LP2985-33DBVR: Este dispositivo representa el regulador de tensión LDOa 3,3 V. En el pin IN entrará el voltaje a regular, ya sea del puerto USB o de unafuente externa, y en el pin OUT encontraremos el voltaje de 3,3 V.

35

Page 46: Diseño hardware y desarrollo de librerías para la

4. ARDUINO UNO

FUNCIONAMIENTO:

1. La señal VIN es la misma que encontramos en el circuito de conversión a 5 V yque, como dijimos anteriormente, se corresponde con el cabezal de entrada detensión si alimentamos la placa desde una batería externa.

2. Esta señal, VIN, que como ya hemos analizado debe tener un valor mínimo de 7V, se somete a un divisor de tensión con dos resistencias iguales de 10 KΩ, por loque en el nodo central de dicho divisor, el valor de tensión VIN se verá reducidoun factor 1

2 .

3. La mitad del valor de entrada VIN será comparado con la salida del regulador detensión a 3,3 V, por tanto, si alimentamos la placa a partir de una fuente externao del puerto Jack 2,1 mm, la salida del AO será un valor alto de tensión (un ’1’lógico), mientras que si alimentamos la placa a partir del puerto USB, de maneraque la entrada VIN es nula, la salida del AO nos devolverá un valor bajo de tensión(un ’0’ lógico).

4. Debemos fijarnos que en la entrada del regulador a 3,3 V encontramos la señal5 V, que nos indica que la salida del regulador a 5 V está conectada a la entradadel regulador a 3,3 V. Por tanto, siempre que la alimentación de la placa se realicea partir de una batería o de la entrada Jack 2,1 mm, en la entrada del reguladora 3,3 V encontraremos 5 V provenientes de la conversión de alguno de los dossistemas de alimentación antes mencionados. En el caso de que la alimentaciónse haga por USB, la señal 5V será de 0 V, por lo que el interruptor deberá abrirsepara que el voltaje del puerto USB pueda ser convertido a 3,3 V.

5. Si alimentamos la placa a partir de una batería, mediante el cabezal de la placacon la referencia VIN:

a) La salida del AO será positiva, es decir, un valor alto de tensión o ’1’ lógico.

b) El interruptor, o transistor MOSFET tipo-P, se cerrará y no permitirá el pasode tensión desde el puerto USB.

c) La salida del regulador a 5 V será convertida a 3,3 V.

6. Si alimentamos la placa a partir del puerto Jack 2,1 mm:

a) La señal VIN también será de un valor entre 7 V y 12 V, ya que si recordamosel esquema de conversión a 5 V, la señal VIN se encuentra conectada a laseñal proveniente del puerto Jack 2,1 mm.

b) La salida del AO será positiva, es decir, un valor alto de tensión o ’1’ lógico.

c) El interruptor, o transistor MOSFET tipo-P, se cerrará y no permitirá el pasode tensión desde el puerto USB.

d) La salida del regulador a 5 V será convertida a 3,3 V.

36

Page 47: Diseño hardware y desarrollo de librerías para la

4.2. Etapa de potencia

7. Si alimentamos la placa a partir del puerto USB:

a) La señal VIN será nula. Por tanto, la salida del AO será negativa, es decir, unvalor bajo de tensión o ’0’ lógico.

b) El interruptor, o transistor MOSFET tipo-P, se abrirá y permitirá el paso detensión proveniente del puerto USB.

c) La entrada de tensión del USB, que es de 5 V, será convertida a 3,3 V.

Para finalizar este análisis hay que tener en cuenta el sistema de prioridad quesigue este sistema en el caso de que varios sistemas de alimentación sean conectadosa la placa. Al analizar los dos sistemas de regulación anteriores podemos ver que enel caso de que el puerto USB se encuentre conectado mientras alguno de los sistemasde alimentación externos se encuentren también conectados tendrán prioridad lossistemas externos de alimentación, ya que el AO siempre tendrá un valor alto de tensióno ’1’ lógico y el transistor MOSFET tipo-P no permitirá el paso de tensión del puertoUSB. Por lo tanto, en orden de prioridad:

1. CONECTOR JACK 2,1 mm O ALIMENTACIÓN EXTERNA: Estos dos sistemasde alimentación comparten prioridad, ya que los dos tienen prioridad ante laalimentación a través del puerto USB. En cualquier caso, ambos no puedenestar alimentando a la placa a la vez, ya que en la entrada del regulador LDO a5 V encontraríamos dos voltajes diferentes y se podría romper la plataforma oalgunos de los sistemas de alimentación. Por tanto, los sistemas de alimentaciónexternos deben conectarse por separado, aunque ambos son compatibles con laconexión USB de la placa.

2. PUERTO USB: Este es el sistema de alimentación con menos prioridad. Eslógico que, si hay un sistema externo de alimentación conectado a la placa, elpuerto USB no transfiera de potencia eléctrica a la placa, ya que se podría darel caso de tener conectada la placa a través de una batería, puesto que estamosutilizando la plataforma en un sistema en movimiento, y que debamos programarel microcontrolador en un momento determinado. De esta manera, podemosconectar de forma segura el conector USB para programar el microcontrolador,sin tener que desconectar el sistema de alimentación externo.

37

Page 48: Diseño hardware y desarrollo de librerías para la
Page 49: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

5DESARROLLO HARDWARE

El objetivo de este proyecto es el desarrollo de una plataforma multifunción basadaen el modelo Arduino UNO. En el apartado anterior hemos desgranado todos losaspectos hardware y software de dicha plataforma, por lo que en el capítulo actualvamos a realizar una búsqueda de todos los componentes hardware que utilizaremospara realizar nuestro proyecto, siempre tomando como referencia el análisis de laplataforma Arduino UNO. Además, se va a analizar el proceso seguido para el diseñode la placa física mediante programas de diseño asistido por ordenador.

El capítulo actual se divide en cinco secciones fundamentales que hacen referenciaa las cinco partes más importantes en las que se divide el diseño y desarrollo de unaplataforma multifunción desde un punto de vista de hardware, a pesar de que para ellose haga uso de herramientas software. De esta manera, vamos a analizar el proceso se-guido a la hora de seleccionar un microcontrolador alternativo al utilizado por Arduinoen su plataforma, así como la selección de los diferentes componentes que formaránla etapa de potencia y de comunicación. Además, vamos a incluir una sección dondeanalizar todos y cada uno de los elementos de seguridad y protección que vamos autilizar en nuestra plataforma. Por último, se va a exponer detalladamente todos lospasos seguidos a la hora de diseñar y desarrollar mediante software toda la estructura yconexiones de la placa para su posterior impresión.

Al final del proceso detallado en este capítulo, se habrán expuesto todos los pasosnecesarios para disponer de una plataforma multifunción plenamente funcional.

5.1 Selección del microcontrolador alternativo

El primer componente que debemos buscar es el microcontrolador, ya que es la partemás importante de cualquier sistema electrónico y realiza la función de procesamientode datos de la plataforma. Es importante determinar primero el microcontroladorutilizado, puesto que el resto de componentes serán seleccionados siempre en relación

39

Page 50: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

al microcontrolador.

La primera referencia a partir de la cual comenzar la búsqueda es el microcontrola-dor de la plataforma Arduino UNO. Dicho dispositivo, como ya hemos analizado encapítulos anteriores de este proyecto, es un ATmega328P de la casa Atmel que reúne lassiguientes propiedades:

Placa Arduino UNO

Marca AtmelMCU ATmega328PArquitectura 8-bitM.FLASH 32 KBM.RAM 2 KBM.EEPROM 1 KBReloj 16 MHz

Cuadro 5.1: Tabla de propiedades del microcontrolador ATmega328P.

Lo primero que haremos antes de iniciar la búsqueda será establecer unos paráme-tros mínimos que tenemos que cumplir. De esta manera acotaremos sustancialmentela ingente cantidad de microcontroladores que ofrece Microchip. Dichos requisitosquedan reflejados en la siguiente tabla:

Marca MicrochipArquitectura 8-bitM.FLASH 32 KBM.RAM 1 KBM.EEPROM 256 BReloj 16 MHzNúmero de pines 28Encapsulado SOIC-28

Cuadro 5.2: Tabla de requisitos mínimos del microcontrolador Microchip.

Los microcontroladores de Microchip, conocidos mundialmente como PIC-PeripherealInterface Controller, se dividen en familias. Dichas familias engloban diferentes tiposde microcontroladores con propiedades exclusivas. Por ello, debemos conocer lascaracterísticas básicas de cada tipo de familia para empezar a reducir el número demicrocontroladores que son potencialmente aptos para nuestro proyecto.

• ARQUITECTURA 8-BIT: Los microcontroladores de Microchip con arquitecturade 8-bit engloban a las familias PIC10, PIC12, PIC16 y PIC18, con un número depines de seis (6) hasta cien (100), una memoria flash de hasta 128 KB, una memo-ria RAM de hasta 4 KB y una memoria EEPROM integrada en el microcontrolador.Estas familias de microcontroladores son las familias básicas más utilizadas y

40

Page 51: Diseño hardware y desarrollo de librerías para la

5.1. Selección del microcontrolador alternativo

de precio más reducido con propiedades más que suficientes para llevar a cabodiseños electrónicos relativamente sencillos.

• ARQUITECTURA 16-BIT: La oferta de microcontroladores de 16-bit bajo lareferencia Microchip engloba a las familias PIC24 y dsPIC, con un número depines de catorce (14) a ciento cuarenta y cuatro (144), memoria flash de hasta1024 KB, hasta 98 KB. Estas familias de microcontroladores encuentran su huecoen el mercado como mejora de los microcontroladores de 8-bit, pero sin llegar alas aplicaciones profesionales de la siguiente familia. De esta manera se sitúa enun punto intermedio dentro del rango de oferta de Microchip.

• ARQUITECTURA 32-BIT: Solo existe una familia de microcontroladores Mi-crochip con arquitectura de 32-bit: PIC32. Esta familia de microcontroladoresengloba a los dispositivos de gama alta de la compañía Microchip tanto en po-tencia como en número de módulos integrados. Ofrecen variantes de veinte (20),veintiocho (28) y cuarenta (40) pines, con una memoria flash de hasta 2 MB y unamemoria RAM de alta velocidad, conocida como SRAM de hasta 512 KB.

Como podemos observar en el análisis de las familias de microcontroladores deMicrochip la familia predilecta que nos ofrece un tipo de microcontroladores acordes anuestros requisitos de diseño es la familia PIC18, ya que dentro de los microcontrola-dores de 8-bit son los dispositivos con mejores prestaciones.

En la propia página web de Microchip encontramos una plataforma de búsquedacon diferentes parámetros de filtrado. Al empezar el filtrado con los parámetros mí-nimos de memoria flash y de número de pines, vemos que Microchip nos ofrece lossiguientes productos:

Figura 5.1: Plataforma de búsqueda de Microchip.

41

Page 52: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

Como se puede apreciar perfectamente en la tabla de productos de Microchip, alincluir los requisitos mínimos dentro de los casilleros de filtrado encontramos quepodemos acotar la búsqueda ya no solo a la familia PIC18, sino al modelo PIC18F25.

Entre los microcontroladores que vemos en la figura 5.1, podemos diferenciar trestipos básicos: PIC18F25(K)XX, PIC18F25(J)XX y PIC18F25()XX. Para seleccionar uno delos tres tipos como favorito para nuestro diseño vamos a diferenciar entre dos factores:el primero es el precio, puesto que precisamos una buena relación calidad-precio; y elsegundo tendrá que ver con las particularidades de uno y otro tipo.

• Precio: En cuanto al precio, podemos observar como la familia de microcon-troladores PIC18F25()XX supera considerablemente a los otros dos tipos de dis-positivos mientras que las especificaciones a simple vista no se alejan tanto losunos a los otros. Por ello, comenzaremos descartando los modelos PIC18F25()XXy seguiremos el análisis con los otros dos tipos de microcontroladores.

• Diferencia entre los modelos (K) y (J): La diferencia fundamental entre estosdos tipos de microcontroladores reside en la posibilidad de cambiar la distri-bución de pines del microcontrolador a partir de una función conocida comoPPS-Peripheral Pin Select. Los microcontroladores están compuestos por el nú-cleo donde se procesa toda la información que se encuentra conectado a lospines de entrada/salida, de manera que tú puedas definir el entorno exterior querodea al microcontrolador. Pues bien, cuando un microcontrolador dispone de lapropiedad de selección de pines periféricos puedes redistribuir estas conexionesinternas entre el núcleo y los pines de entrada/salida. Esta propiedad nos ofreceuna mayor libertad a la hora de diseñar sistemas electrónicos, pero en nuestrocaso no resulta un factor a tener en consideración ya que accederemos a los pinesdel microcontrolador a partir de los cabezales de la placa, por tanto solo nosinteresa la distribución de pines a la hora de diseñar la placa, pero una vez dise-ñada no es necesario redistribuir dichos pines. Dicho de otra manera, nosotrosdiseñaremos la placa multifunción con el microcontrolador como cerebro. En esemomento, la placa se comportará como un sistema estático que pasará a formarparte de un sistema superior. Por ello, la posibilidad de cambiar la distribuciónde pines no nos es de utilidad.

Considerando lo expuesto llegamos a la conclusión de la familia que vamos a utilizares la familia PIC18 y, dentro de esta familia, optamos por el subgrupo PIC18F25(K)XX.

42

Page 53: Diseño hardware y desarrollo de librerías para la

5.1. Selección del microcontrolador alternativo

Figura 5.2: Plataforma de búsqueda de Microchip®.

Al aplicar los filtros y realizar los descartes señalados en el punto anterior nosencontramos ante cuatro posibles microcontroladores que son potencialmente aptospara nuestro sistema. Por tanto, llegados a este punto, debemos establecer requisitosmás específicos para decantarnos por uno u otro.

Como criterio principal de selección vamos a fijar la velocidad de procesamiento dedatos de los microcontroladores, ya que tener la máxima velocidad de reloj posible nosserá de gran utilidad si utilizamos la placa dentro de un sistema que precise tiemposde respuesta críticos en los que la velocidad de procesamiento de datos es un factorfundamental. En la tabla de búsqueda nos aparece como MAX. CPU speed. Comopodemos observar tres microcontroladores poseen una velocidad de reloj de 64 MHz,mientras que uno de ellos posee una velocidad de reloj algo inferior de 48 MHz. En estecaso, el primer microcontrolador que descartaremos de la lista será el PIC18F25K50debido a su baja velocidad de reloj en comparación con los demás.

Como segundo criterio de selección vamos a considerar la memoria RAM del dis-positivo. La memoria RAM-Random Access Memory es una memoria volátil de accesoaleatorio que utiliza el microcontrolador para cargar todas las instrucciones que eje-cuta la unidad central de procesamiento o CPU. Como se puede deducir de la propiadefinición de memoria RAM este un factor muy importante para que no se produzcaun cuello de botella en nuestro sistema a la hora de ejecutar instrucciones, por tantodebemos intentar que nuestro microcontrolador disponga de la mayor memoria RAMposible. En este caso el microcontrolador con unas especificaciones más suculentas encuanto a memoria RAM es el PIC18F25K80.

Además de analizar la memoria RAM de los dispositivos vamos a analizar el apar-tado de memoria EEPROM (Electrically Erasable Programmable Read-Only Memory).Dicha memoria nos ofrece un banco de datos donde podemos guardar datos que con-sideremos no volátiles, es decir, datos fijos. Esto nos puede ser de utilidad para guardarconstantes que debemos usar en nuestros sistemas y que no deben ser borrados denuestro microcontrolador. En nuestra lista de microcontroladores podemos apreciardos tipos de memoria EEPROM: la memoria EEPROM en sí y la memoria HEF-HighEndurance Flash. La diferencia básica entre estos dos tipos de memoria es la velocidadde lectura y escritura, en la cual sale aventajado el sistema HEF por tratarse de un tipo

43

Page 54: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

de memoria flash. En cualquier caso, este no es un requisito fundamental en nuestrosistema, ya que al tratarse de datos no volátiles la velocidad de lectura y escritura eneste memoria no son altamente relevantes en la eficiencia de nuestro sistema. Entre lostres microcontroladores finales, tenemos dos que incorporan 256 B de memoria HEF, elPIC18F25K20 y el PIC18F25K22, y uno que incorpora 1 MB de memoria EEPROM: elPIC18F25K80.

Como vemos, por el momento los tres microcontroladores parecen aptos para serutilizados en nuestro sistema y para ser implementados en nuestro diseño, pero hay unfactor fundamental en este tipo de placas: el módulo CAN.

Figura 5.3: PIC18F25K80.

El protocolo CAN (Controller AreaNetwork) nos permite establecer un siste-ma de comunicación de tipología bus en-tre dos o más nodos a fin de crear una redde comunicación donde cada nodo po-dría ser una plataforma diferente. De estaforma se abre un nuevo sector de posibi-lidades con nuestra plataforma, ya quese podría incrementar considerablemen-te la complejidad del sistema deseado sidisponemos de una o más plataformasconectadas por un bus CAN. Además, el

módulo CAN es uno de los protocolos más utilizados para comunicación entre disposi-tivos, por lo que resulta de importante relevancia para nuestro sistema y más cuandointentamos diferenciarnos en nuestro nicho de mercado de los demás competidores. Esimportante destacar que la plataforma Arduino UNO no dispone de dicho módulo, porlo que se debe adquirir un dispositivo hardware externo a la plataforma que dispongade un módulo CAN.

De los tres microcontroladores restantes, solo uno de ellos incorpora en su interiorun módulo CAN y, esta razón junto al tamaño de la memoria RAM hace que solo unode ellos tenga todos los parámetros fundamentales que necesitamos: el PIC18F25K80.

En la siguiente tabla vamos a poder apreciar la comparativa entre ambos micro-controladores y ver qué aspectos hacen que la opción de Microchip sea más apta quela opción de Arduino con Atmel. Como veremos, las diferencias claves que hacen denuestro microcontrolador una opción más premium serán la memoria RAM y, sin dudaalguna, la integración del módulo CAN en el chip.

44

Page 55: Diseño hardware y desarrollo de librerías para la

5.1. Selección del microcontrolador alternativo

Placa Arduino UNO Plataforma PIC

Marca Atmel MicrochipMCU ATmega328P PIC18F25K80Arquitectura 8-bit 8-bitM.FLASH 32 KB 32 KBM.RAM 2 KB 3,6 KBM.EEPROM 1 KB 1 KBReloj 16 MHz 16 MHzADC 1 x 6CH, 10-bit 1 x 8CH, 12-bitPWM SI SICAN NO CAN 2.0BComparadores SI SIUSART 1 módulo 2 módulosSPI SI SII2C SI SI

Cuadro 5.3: Tabla de comparativa: ATmega328P y PIC18F25K80.

45

Page 56: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

5.2 Sección de comunicación

Tal y como quedó expuesto en capítulos anteriores donde analizamos la estructura delas plataformas multifunción y su etapa de comunicación, debemos incorporar en laplataforma un mecanismo de comunicación con el exterior.

A la hora de diseñar la etapa de comunicación de una plataforma multifunción sedebe analizar qué protocolos son los más utilizados para establecer una comunicaciónentre dispositivos y cual es el protocolo utilizado por nuestro microcontrolador pararecibir y transmitir datos.

En el primer caso, y como ya hemos comentado en capítulos anteriores, el sistemade comunicación entre dispositivos más utilizado hoy en día es el protocolo USB. USBes un protocolo de comunicación en serie que permite, entre otras muchas cosas,conectar dispositivos periféricos a una computadora personal. Es por ello que tantopara programar el microcontrolador como para gestionar todos los datos que procesadebemos ser capaces de comunicarnos con el microcontrolador a través del protocoloUSB.

El protocolo utilizado por nuestro microcontrolador para establecer una comunica-ción serie es el protocolo UART. El módulo UART se utiliza para que el microcontroladorreciba y transmita datos en forma de caracteres y se trata de un protocolo asíncrono, porlo que es fundamental configurar la velocidad de transmisión de señales por segundo,también conocido como baud rate, en ambos dispositivos para que la comunicaciónsea satisfactoria.

Del análisis expuesto, es fácil llegar a la conclusión de que el método más utilizadopara que la plataforma se comunique con el exterior es siguiendo el protocolo USB,mientras que el microcontrolador hace uso de su módulo UART para transmitir y recibirdatos. Por tanto, es necesario dotar a la plataforma de un sistema de traducción entreUSB y UART para que el microcontrolador emita y reciba datos siguiendo el protocoloUART mientras que la plataforma emita y reciba datos siguiendo el protocolo USB.

La marca dueña del mercado en encapsulados encargados de transformar las se-ñales de USB a UART y viceversa es FTDI-Future Technology Devices International.Dentro del amplio catálogo de productos que ofrece FTDI, es de nuestro interés unapartado en concreto donde se ofrecen los dispositivos de la serie FT ICs. Esta familiade dispositivos se encarga de la conversión de USB a diversos protocolos, dentro de loscuales encontramos el protocolo UART.

FT232RL

Los dispositivos de FTDI que cumplen con nuestros requisitos se encuentran bajo lareferencia FT232R, dentro de la cual existen dos productos: FT232R(L) y FT232R(Q). Ladiferencia básica entre estos dos dispositivos no es más que el tipo de encapsulado quepara la versión FT232R(L) es del tipo SSOP con 28 pines, y para la versión FT232R(Q) esdel tipo QFN con 32 pines.

Por todo lo demás, ambos realizan las mismas funciones y tienen el mismo número

46

Page 57: Diseño hardware y desarrollo de librerías para la

5.2. Sección de comunicación

Figura 5.4: Chip FT232R.

de pines funcionales. En el caso de la versión FT232R(L) encontramos veintiséis (26)pines funcionales y dos (2) pines sin conexiones internas, y en la versión FT232R(Q)encontramos treinta y dos (32) pines funcionales y ocho (8) pines sin conexiones.

Hoy en día, los encapsulados de los chips tienen que cumplir unos estándares quenos sirven de referencia a la hora de diseñar placas donde soldar los componentes yrespetar estos estándares es un requisito a la hora de comercializar circuitos integrados.El hecho de adaptar ambos chips a los estándares es lo que hace que encontremospines sin conexiones internas.

Decidir qué chip es el idóneo para nuestro proyecto es sencillo partiendo de la basede que tenemos que soldar los componentes manualmente. Por tanto nuestra elecciónes, sin duda, la versión FT232R(L), ya que para los encapsulados QFN es necesario unproceso diferente de soldado y las herramientas convencionales de soldado no sirven.

Conector USB

Para poder establecer una comunicación mediante el protocolo USB y, además, sercapaz de alimentar la plataforma de potencia eléctrica es necesario integrar física-mente un conector que permita establecer dicha conexión. Dentro de los conecto-res USB estandarizados a día de hoy se pueden encontrar tres tipologías básicas:

Figura 5.5: Conector USBtipo mini-B.

• Versión estándar: Se trata de la versión más cono-cida de conectores USB y que podemos encontraren cualquier ordenador convencional. Se caracterizapor ser el conector USB de mayor tamaño.

• Versión mini: Esta versión reduce el tamaño del co-nector estándar de USB y se sitúa dentro del tamañomedio estandarizado para el protocolo USB. Este esel utilizado normalmente en conexiones de cámarasdigitales o plataformas como la que es objeto de esteproyecto.

47

Page 58: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

• Versión micro: La versión micro de este conector es la más pequeña que seha estandarizado y es fácilmente reconocible, ya que es el utilizado por la granmayoría de teléfonos inteligentes o smartphones, exceptuando los dispositivosde la marca Apple, que utiliza conectores propios.

Para nuestro proyecto vamos a optar por integrar en nuestra plataforma con unconector USB mini, ya que es el conector más pequeño dentro del grupo de conectoresque puedan ser soldados manualmente en una plataforma.

Dispositivo de reset

En la sección de comunicación es importante señalar el dispositivo diseñado pararealizar el reset del micrcontrolador, ya que a la hora de establecer comunicación conel gestor de arranque será necesario realizar un reset del microcontrolador antes deprogramar la plataforma.

Figura 5.6: Pulsador.

El gestor de arranque se compone básicamente de unprograma ejecutable en un ordenador convencional y deun pequeño código de programación que debe ser escritoen la base de la memoria flash del microcontrolador. En-tonces, cada vez que queremos enlazar ambos dispositivosdebemos realizar un reset del microcontrolador para queeste ejecute el código situado en la base de su memoria y,así, el software del gestor de arranque pueda reconocer a la plataforma.

Para ello, haremos servir un pulsador como el de la figura 5.6 que se encontrarásoldado en la esquina superior izquierda de la plataforma.

5.3 Sección de potencia

En esta sección nos centraremos en todos los componentes necesarios que guardenrelación con la alimentación de la placa. Dichos componentes serán: los reguladoresde tensión, el amplificador operacional, el transistor MOSFET tipo-P y el resto de com-ponentes de seguridad que protegerán a la plataforma de variaciones eléctricas nodeseadas.

Reguladores de tensión

En relación a los reguladores de tensión, utilizaremos los mismos que utiliza Arduinoen su plataforma multifunción Arduino UNO. Por tanto, los componentes utilizadosserán los siguientes:

1. Para regular la tensión de alimentación de la placa a 5 V hemos seleccionado unregulador de tensión LDO-Low Drop-Out de la casa ON SEMICONDUCTOR.

48

Page 59: Diseño hardware y desarrollo de librerías para la

5.3. Sección de potencia

Marca ON SEMICONDUCTORReferencia NCP1117ST50T3G

Corriente de salida 1 ATensión de entrada 3,5 V - 20 VTensión de salida 5 VNúmero de pines 3

Cuadro 5.4: Tabla de características: ON SEMICONDUCTOR NCP1117ST50T3G.

2. Para regular la tensión de alimentación a 3,3 V utilizaremos un regulador detensión LDO de la marca Texas Instruments.

Marca Texas InstrumentsReferencia LP2985-33DBVR

Corriente de salida 150 mATensión de entrada 2,2 V - 16 VTensión de salida 3,3 VNúmero de pines 5

Cuadro 5.5: Tabla de características: Texas Instruments LP2985-33DBVR.

Amplificador operacional

La plataforma multifunción que vamos a diseñar tiene incorporado un sistema auto-mático de selección del tipo de alimentación, por lo que no es necesario alterar nadade la placa cada vez que cambiemos de método de alimentación. Para ello necesitamosun amplificador operacional configurado como comparador. El dispositivo elegidoen este caso también pertenece a la marca Texas Instruments y tiene las siguientescaracterísticas:

Marca Texas InstrumentsReferencia LMV358IDGKR

Tensión de entrada 2,7 V - 5,5 VAncho de banda 1 MHzNúmero de pines 8

Cuadro 5.6: Tabla de características: Texas Instruments LMV358IDGKR.

Transistor MOSFET tipo-P

El sistema de selección del tipo de alimentación que hemos mencionado en la sub-sección anterior también precisa de un transistor configurado como interruptor. Sufunción principal será la de permitir o impedir el paso de tensión del puerto USB a laplaca. En este caso el componente seleccionado pertenece a la marca NPX.

49

Page 60: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

Marca NPXReferencia NX2301P

Intensidad drenador (-)2 ATensión drenador-fuente (-)20 VTensión Vgs (-)4 VNúmero de pines 3

Cuadro 5.7: Tabla de características: NPX-NX2301P.

Conector Jack de 2,1 mm

Figura 5.7: Conector Jackde 2,1mm hembra.

Como último componente relacionado con la sección depotencia de nuestra plataforma cabe mencionar el conec-tor Jack de 2,1 mm. Este conector se sitúa en la esquinainferior izquierda de nuestra plataforma y va a permitir laconexión de un conector que proporcione a la plataformaun voltaje DC a partir de una toma común de corriente.De esta forma, si tenemos integrada la plataforma en unsistema estático que puede conectarse permanentemen-te a una toma de corriente común no será necesaria unaconexión por USB o mediante una fuente externa que no haría más que complicar elsistema.

5.4 Elementos de seguridad y protección

A parte de todos los circuitos integrados que hemos utilizado para las tres partesfundamentales de una plataforma multifunción y que han sido desarrollados en lassecciones anteriores de este capítulo, uno de los factores más importantes a la hora deintegrar todos los componentes y dispositivos en una plataforma es el de seguridad yprotección eléctrica.

Entendemos por componentes de seguridad y protección eléctrica como todos loscomponentes cuya función es prevenir tanto el mal funcionamiento de los circuitosintegrados, como posibles roturas de los dispositivos. Tenemos que tener en conside-ración que los diferentes chips que integra nuestra plataforma tienen característicaseléctricas determinadas para su buen funcionamiento y, por ello requieren elemen-tos de protección ante sobrecargas de corriente eléctrica. Además, hay un factor muyimportante que debemos controlar a la perfección: el ruido.

Para analizar el apartado de seguridad y protección de la plataforma vamos adiferenciar entre las siguientes tipologías de protección:

50

Page 61: Diseño hardware y desarrollo de librerías para la

5.4. Elementos de seguridad y protección

5.4.1 Seguridad y protección ante sobrecargas de corriente

Diodo

El diodo es un componente que permite el paso de corriente solo en una dirección. Esdecir, en una dirección permite el paso de corriente y en dirección contraria corta elpaso de corriente. Este es un componente de seguridad para evitar desviaciones decorriente ya que, por ejemplo, si hubiera un flujo de corriente en dirección contrariahacia la entrada del conector Jack 2,1 mm podría quemarse el adaptador de AC-DC.De esta manera, al incorporar en el circuito un diodo nos aseguramos de que nuncase dará el caso de flujos de corriente indeseados. Para el caso hemos optado por uncomponente de la marca Fairchild.

Marca FairchildReferencia S1M

Corriente directa máxima 30 ATensión directa máxima 1,1 VTensión inversa máxima 1 KVNúmero de pines 2

Cuadro 5.8: Tabla de características: Fairchild-S1M.

Fusible

Los fusibles son componentes de seguridad que protegen a la placa ante picos decorriente abruptos que puedan dañar los dispositivos que están siendo alimentados através de esa señal. En nuestro caso, vamos a utilizar el mismo componente que integraArduino en su placa: un fusible de 500mA de la marca Bourns.

Resistencias

Las resistencias son componentes pasivos muy útiles a la hora de delimitar la corrientede entrada en un circuito. Como sabemos, los diferentes dispositivos que componenun sistema electrónico tienen características eléctricas diferentes por las cuales sedeterminan tanto los voltajes máximos como las corrientes máximas permitidas. Ennuestro caso, las resistencias son especialmente útiles para delimitar la corriente deentrada de los led y, así, evitar que se sobrecarguen y acaben por romperse.

Para calcular un valor medio que nos sirva de protección para los led debemosanalizar el data sheet del led y extraer de él los valores de tensión e intensidad en loscuales funciona. En nuestro caso, dichos valores son los siguientes:

• Tensión media: 3 V.

• Corriente de funcionamiento: 20 mA.

Por lo tanto, sabiendo que nosotros alimentamos nuestra placa con un voltaje de 5V, y aplicando la ley de Ohm, obtenemos:

51

Page 62: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

R = 5V −3V

20m A= 1000 (5.1)

Por ello, utilizaremos resistencias de 1 KOmeg a para proteger a los led de sobrecar-gas.

5.4.2 Seguridad y protección ante ruido

Por ruido se entiende a cualquier tipo de interferencia que haga variar el valor desea-do de una señal. Por ello, en nuestro caso entenderemos como ruido a las posiblesvariaciones de voltaje de la señal de alimentación de la plataforma.

Para evitar o minimizar las consecuencias de la aparición de ruido, cosa que puedeprovocar un mal funcionamiento de los componentes de la plataforma, vamos a integraren las entradas de alimentación de nuestros circuitos integrados condensadores.

Los condensadores son los componentes utilizados comúnmente para minimizarel ruido en las señales de tensión, puesto que mientras tengamos una alimentacióneléctrica los condensadores estarán cargados y si se produce un pico negativo detensión el condensador se descargará progresivamente aportando tensión eléctrica a laentrada del dispositivo. De esta manera, el pico negativo de tensión se verá suavizado ylas consecuencias de dicha variación se verán anuladas.

Para entender este fenómeno con más claridad vamos a hacer servir la siguientefigura:

Figura 5.8: Gráfica de comportamiento de un condensador.

Como podemos observar, la gráfica superior de color rojo (1) equivale a la alimen-tación que sufre el condensador y que durante un tiempo P/2 ofrece tensión, y duranteun tiempo P/2 corta el aporte de tensión al condensador. En la gráfica azul (2) po-demos apreciar el comportamiento del condensador. Como vemos cuando se aplica

52

Page 63: Diseño hardware y desarrollo de librerías para la

5.4. Elementos de seguridad y protección

tensión eléctrica, este se va cargando de tensión hasta llegar al mismo valor que latensión de alimentación. Cuando se corta el aporte de tensión este se va descargandoprogresivamente en lugar de hacerlo de manera abrupta como en la gráfica roja (1).

Este es exactamente el mismo efecto que produce en los circuitos integrados: cuan-do hay una bajada de tensión, por el motivo que sea, este se descarga progresivamentecompensando dicha caída y suavizando la entrada de tensión del dispositivo.

Condensadores cerámicos

Los condensadores cerámicos son los condensadores más extendidos en el mundo dela electrónica para ser utilizados como filtros de ruido en las entradas de los circuitosintegrados. El motivo principal por el que son los más utilizados, y que los diferenciade los condensadores electrolíticos, es que trabajan muy bien, en relación a su tamaño,con voltajes que son generalmente constantes con variaciones pequeñas. Cuandolos voltajes utilizados y las variaciones son muy grandes, es recomendable optar porcondensador de tipo electrolítico que ofrecen mayor capacidad y soportan variacionesmás abruptas.

Condensadores electrolíticos

Un condensador electrolítico es un tipo de condensador que usa un líquido iónicoconductor como una de sus placas. Son utilizados en filtros de alimentadores de co-rriente donde se usan para almacenar la carga y moderar la tensión eléctrica de salida ylas fluctuaciones de corriente en la salida rectificada. También son muy usados en loscircuitos que deben conducir corriente continua pero no corriente alterna.

Es por ello que vamos a utilizarlos en la etapa de conversión a 5 V donde el voltajede entrada proviene de una fuente externa pudiendo alcanzar voltajes de hasta 12V. En estos casos es fundamental evitar fluctuaciones de corriente y tensión, ya queno sabemos como se pueden comportar dichas fuentes externas en determinadascondiciones y debemos evitar que por un fallo de la fuente externa de potencia eléctricase vean afectados componentes de la plataforma.

53

Page 64: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

5.5 Diseño asistido por computador

El diseño asistido por computador, más conocido con las siglas CAD-Computer-aidedDesign surgió en la década de los sesenta inventado principalmente por el francés PierreBézier. Este concepto hace referencia al uso de herramientas computacionales queasisten a los ingenieros, arquitectos y diseñadores en la creación y diseño de proyectos.En nuestro caso dichos proyectos serán físicos, es decir, diseñaremos por ordenadorlos planos de una placa electrónica que después deberá someterse a un proceso deimpresión hasta conseguir la plataforma física donde, posteriormente, soldaremostodos los componentes.

Concretamente vamos a utilizar el software CADSoft Eagle PCB enfocado al diseñode PCB-Printed Circuit Board o placa de circuito impreso. Así como en el capítulode software de Arduino explicamos lo que son las librerías, dentro de Eagle tambiéndisponemos de una gran cantidad de librerías donde se incluyen la gran mayoría dedispositivos electrónicos ofertados en el mercado actual. Es por ello que para rea-lizar nuestro diseño no es necesario diseñar previamente todos y cada uno de loscomponentes que utilizaremos, sino que será suficiente buscar las librerías de dichoscomponentes y utilizarlas para el desarrollo del proyecto.

5.5.1 CADSOFT EAGLE PCB

El software de diseño CADSoft Eagle PCB utilizado en este proyecto para el diseño denuestra placa se compone básicamente de dos partes fundamentales.

• Archivo .SCH: también conocido como schematic diagram o diagrama esquemá-tico, permite representar los elementos del sistema y sus conexiones de formagráfica mediante símbolos y figuras. En esta fase del diseño no son relevantes lasmedidas físicas finales deseadas de la placa, pues solo importan las conexionesde todos los dispositivos y componentes presentes en ella.

• Archivo .BRD: también conocido como board o placa, se trata de una representa-ción gráfica real a escala de la forma final del proyecto donde podremos colocarcada componente en la posición deseada, crear las rutas que interconectan adichos componentes y preparar todo el diseño para que este sea impreso.

5.5.2 Archivo .SCH (Schematic)

Tal y como hemos ido haciendo a lo largo del informe, vamos a dividir el análisis delarchivo esquemático de nuestra plataforma en tres partes fundamentales: el microcon-trolador, la etapa de potencia, la etapa de comunicación.

Conexión del microcontrolador

En la sección destinada al microcontrolador vamos a diseñar todas las conexionesque debe tener dicho dispositivo, tanto de alimentación, como de comunicación yconfiguración de pines.

54

Page 65: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

Figura 5.9: Diagrama esquemático del microcontrolador.

En la figura 5.9 se puede apreciar el bloque completo del diseño de las conexionesdel microcontrolador. A simple vista podemos diferenciar dos partes principales: elmódulo que define la estructura física de la placa con la referencia Arduino UNO R3 yel microcontrolador, en sí, con la referencia PIC18F25K80-I/SO.

1. Arduino UNO R3

Nos encontramos ante un modelo prefabricado que representa todos los aspectosfísicos de la placa de Arduino, de esta manera ambas placas tendrán el mismotamaño y la misma relación de pines. A partir de esta base, es mucho más sencilloconectar todos los dispositivos necesarios, sin necesidad de que se parezcan enabsoluto a los dispositivos de Arduino, ni en tipo ni en cantidad. Como vemos,es una representación esquemática de todos los pines exteriores que ofrece laplaca, así como los aspectos físicos de tamaño.

En este módulo encontramos catorce (14) pines digitales representados por laletra ’D’, seis (6) pines analógicos representados por la letra ’A’, tres (3) referenciasde tierra (GND), salidas de voltaje de 5 V y 3,3 V, así como pines dedicados para lacomunicación a través del protocolo I2C, representados por las referencias ’SCL’y ’SDA’.

Por tanto, una vez que disponemos de este módulo, solo tenemos que conectar lospines de nuestro microcontrolador, teniendo en cuenta el diseño que deseamos,para que el sistema quede configurado según nuestras expectativas de diseño.

La oferta de módulos predefinidos como el utilizado en este proyecto es muycomún en la red, donde podemos encontrar el esqueleto de, prácticamente,cualquier dispositivo electrónico que se encuentre en el mercado actual. Es por

55

Page 66: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

ello que, a nivel de diseño, hoy en día, es más importante definir cómo queremosque se comporte nuestro sistema, que el hecho de diseñar las característicasfísicas de los componentes.

2. PIC18F25K80-I/SO

En este apartado encontramos el cerebro de la placa, el microcontrolador. Estecomponente será el encargado de procesar toda la información proveniente delos pines de entrada, y realizar las acciones programadas.

En el cuadro 5.8 se ofrece toda la información relativa a los pines del microcon-trolador que irán conectados a los cabezales de la placa, así como la función querealizará cada uno de ellos. El cuadro se encuentra separado en tres bloques quese corresponden con los tres puertos de que dispone nuestro microcontrolador:el puerto A, el puerto B y el puerto C.

PIC18F25K80-I/SO ARDUINO UNO R3 OTRAS FUNCIONES

RA0 PIN ANALÓGICO 0 Referencia de voltaje del comparadorRA1 PIN ANALÓGICO 1RA2 PIN ANALÓGICO 2 Vref(-) del módulo ADCRA3 PIN ANALÓGICO 3 Vref(+) del múdulo ADCRA5 PIN ANALÓGICO 4 Comparador 2 - IN(B)RA6 N/CRA7 N/C

RB0 PIN DIGITAL 10 Comparador 1 - IN(A)RB1 PIN DIGITAL 11 Comparador 2 - IN(B)RB2 PIN DIGITAL 12 Comparador 1 (OUT) / CAN TXRB3 PIN DIGITAL 13 Comparador 2 (OUT) / CAN RXRB4 PIN ANALÓGICO 5 Comparador 2 - IN(A)RB5 N/CRB6 PIN DIGITAL 8 PGC (ICSP)RB7 PIN DIGITAL 9 PGD (ICSP)

RC0 PIN DIGITAL 5RC1 PIN DIGITAL 4RC2 PIN DIGITAL 3RC3 PIN DIGITAL 2 SCL (I2C) / SCK (SPI)RC4 PIN DIGITAL 0 SDA (I2C) / SDI (SPI)RC5 PIN DIGITAL 1 SDO (SPI)RC6 PIN DIGITAL 6 UART TX / CAN2 TXRC7 PIN DIGITAL 7 UART RX / CAN2 RX

Cuadro 5.9: Tabla comparativa de pines entre el microcontrolador y la placa.

56

Page 67: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

Adicionalmente vamos a exponer los pines restantes del microcontrolador que noguardan relación directa con las conexiones de la placa, pero que son relevantespara el diseño de la plataforma.

PIN FUNCIÓN

VDD Alimentación del microcontrolador.VDDCORE/VCAP Referencia de voltaje del core.MCLR/RE3 Pin de RESETVSS/VSS2 Referencias de tierra

Cuadro 5.10: Pines del microcontrolador sin relación con las salidas de la placa.

Fase de potencia

En la fase de potencia vamos a diseñar toda la etapa de control de voltajes dentro dela placa. Al igual que la placa Arduino UNO, nuestra placa va a tener una etapa deconversión a 5 V y una etapa de conversión a 3,3 V.

1. ETAPA DE CONVERSIÓN A 3,3 V.

Figura 5.10: Diagrama esquemático de la etapa de conversión a 3,3 V.

En la figura 5.10 podemos ver el circuito que hemos diseñado para nuestro pro-yecto en relación a la etapa de potencia de nuestra placa referente a la conversiónde tensión a 3,3 V. El sistema de conversión elegido para realizar la conversión a3,3 V es prácticamente idéntico al utilizado por Arduino en su placa, ya que con-sideramos que es el sistema más eficiente en relación a prestaciones y a númerode componentes utilizados.

57

Page 68: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

Antes de analizar el funcionamiento de la etapa, debemos definir una serie decomponentes:

a) MCP6001T-I/OT: Este dispositivo representa un amplificador operacional.Cuando un amplificador operacional no tiene realimentación por ningunade sus patas, hace la función de comparador. Es decir, cuando la tensión ensu entrada positiva (VIN+) sea superior a la tensión en su entrada negativa(VIN-), en la salida (señal VOUT) encontraremos un valor alto de tensión(un 1 lógico). En caso contrario, en la salida encontraremos un valor bajode tensión (un 0 lógico).

b) Q1: Este dispositivo representa un transistor MOSFET tipo-P. El comporta-miento de este dispositivo se podría entender como si fuera un interruptor,es decir, si la salida del amplificador operacional (señal VOUT) es un valorbajo de tensión (un ’0’ lógico), la señal VCCUSB, proveniente del puertoUSB, pasará por el transistor y llegará a la entrada del regulador de tensión.En caso contrario, el interruptor se cerrará y la señal de tensión del USB nopodrá llegar al regulador.

c) TS520525: Este dispositivo representa el regulador de tensión LDO-LowDrop-out a 3,3 V. En el pin VIN entrará el voltaje a regular, ya sea del puertoUSB o de una fuente externa, y en el pin VOUT encontraremos el voltaje de3,3 V.

FUNCIONAMIENTO:

a) La señal VIN es la misma que encontramos en el circuito de conversión a 5V y que, como dijimos anteriormente, corresponde con el pin de entrada detensión si alimentamos la placa desde una fuente externa.

b) Esta señal, se somete a un divisor de tensión con dos resistencias igualesde 10 KΩ, por lo que en el nodo central de dicho divisor, el valor de tensiónVIN se verá reducido un factor 1

2 .

c) La mitad del valor de entrada VIN será comparado con la salida del reguladorde tensión a 3,3 V, por tanto, si alimentamos la placa a partir de una bateríao del puerto Jack 2,1 mm, la salida del amplificador operacional será unvalor alto de tensión (un ’1’ lógico), mientras que si alimentamos la placaa partir del puerto USB (de manera que la entrada VIN sea nula), la salidadel amplificador operacional nos devolverá un valor bajo de tensión (un ’0’lógico).

d) Debemos fijarnos que en la entrada del regulador a 3,3 V encontramos laseñal VDD, que nos indica que la salida del regulador a 5 V está conectada ala entrada del regulador a 3,3 V. Por tanto, siempre que la alimentación dela placa se haga a partir de una fuente externa, en la entrada del reguladora 3,3 V encontraremos 5 V provenientes de la conversión de alguno delos dos sistemas de alimentación antes mencionados. En el caso de quela alimentación se haga por USB, la señal VDD será de 0 V, por lo que elinterruptor deberá abrirse para que el voltaje del puerto USB pueda serregulado.

58

Page 69: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

e) Si alimentamos la placa a partir de una fuente externa a través del pin VINque nos ofrece la plataforma:

i. La salida del amplificador operacional será positiva, es decir, un valoralto de tensión.

ii. El interruptor Q1 se cerrará y no permitirá el paso de tensión desde elpuerto USB.

iii. La salida del regulador a 5 V será convertida a 3,3 V.

f) Si alimentamos la placa a partir del conector Jack 2,1 mm:

i. La salida del amplificador operacional será positiva, es decir, un valoralto de tensión.

ii. El interruptor Q1 se cerrará y no permitirá el paso de tensión desde elpuerto USB.

iii. La salida del regulador a 5 V será convertida a 3,3 V.

g) Si alimentamos la placa a partir del puerto USB:

i. La señal VIN será nula. Por tanto, la salida del amplificador operacionalserá también nula, es decir, un valor bajo de tensión.

ii. El interruptor Q1 se abrirá y permitirá el paso de tensión provenientedel puerto USB.

iii. La entrada de tensión del USB, que es de 5 V, será convertida a 3,3 V.

Para finalizar este análisis hay que tener en cuenta el sistema de prioridad quesigue este sistema en el caso de que varios sistemas de alimentación sean conec-tados a la placa. Al analizar los dos sistemas de regulación anteriores podemosver que en el caso de que el puerto USB se encuentre conectado mientras algunode los sistemas de alimentación externos se encuentren también conectados,tendrán prioridad los sistemas externos de alimentación, ya que el amplifica-dor operacional siempre tendrá un valor alto de tensión y el transistor MOSFETtipo-P no permitirá el paso de tensión del puerto USB.

2. ETAPA DE CONVERSIÓN A 5 V.

Figura 5.11: Diagrama esquemático de la etapa de conversión a 5 V.

59

Page 70: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

En la figura 5.11 podemos observar el sistema que hemos diseñado para realizarla conversión de los voltajes de alimentación de la placa a 5 V, voltaje apto paraalimentar todos los componentes y dispositivos de la placa.

Antes de proceder a analizar el funcionamiento del sistema, debemos definir loscomponentes más importantes que encontramos en él:

a) JACK(IN): Se trata del conector de entrada de tensión DC de la placa a partirde un conector Jack 2,1 mm.

b) REG1117: Este dispositivo representa el regulador LDO a 5 V. En el pin VINentrará el voltaje proveniente del conector Jack 2.1 mm y en el pin VOUTobtendremos la tensión deseada de 5 V.

FUNCIONAMIENTO:

a) Por el conector Jack 2,1 mm obtendremos la tensión de alimentación exter-na de la placa.

b) El diodo con la referencia D2 nos servirá como dispositivo de seguridadpara flujos invertidos de corriente. De esta manera, será imposible que hayaun flujo de corriente que entre dentro del conector Jack 2,1 mm.

c) El condensador cerámico con la referencia C2 nos filtrará la señal provenien-te del conector Jack 2,1 mm. De esta manera, evitaremos picos de voltaje enla entrada del regulador de tensión.

d) El regulador de tensión LDO convierte el voltaje de entrada del conectorJack 2,1 mm en una tensión de 5 V.

e) En la salida del regulador encontramos otro condensador cerámico con lareferencia C4. La funcionalidad de este condensador es el filtrado de señal.De esta manera, la salida de 5 V no presentará picos y será estable.

Cabe destacar la señal que aparece con la referencia VIN en el pin de entrada delregulador de tensión. Esta señal es la proveniente del cabezal de alimentaciónde la plataforma y se utilizaría en el caso de querer alimentar la placa desde unafuente externa que no sea el conector Jack 2,1 mm. En este caso el proceso defuncionamiento es exactamente igual al detallado para el conector Jack 2,1 mm.

Fase de comunicación USB

En la fase de comunicación USB vamos a desarrollar todo lo relativo al diseño de la co-municación desde el dispositivo de entrada USB hasta el circuito integrado encargadode convertir las señales de UART a USB y viceversa.

Como podremos apreciar en la figura 5.12, además del puerto USB y el dispositivoconvertidor de señales de UART a USB, vamos a encontrar el sistema de reset delcircuito.

60

Page 71: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

Figura 5.12: Diagrama esquemático de la fase de comunicación USB.

En lo relativo al conector USB podemos apreciar los siguientes aspectos:

• VBUS: pin de alimentación. A partir de este pin se podrá alimentar la plataformade tensión cuando esta se encuentre conectada por USB a un ordenador.

• D+: señal positiva de datos.

• D-: señal negativa de datos.

• ID: permite la distinción entre dos tipos de conectores micro-USB, de maneraque si este pin se encuentra conectado a tierra tendremos un conector micro-A ysi lo dejamos al aire, tendremos un conector micro-B. Como podemos apreciar enla figura, nuestro conector será de tipo micro-B, por lo que el pin no se encuentraconectado en ningún sitio.

• GND: referencia de tierra.

61

Page 72: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

Cabe, antes de continuar, hacer una breve explicación de los dos tipos de señalesde datos que nos ofrece un conector USB. Nuestro protocolo USB utilizado para comu-nicar la placa con un gestor de comunicación se conecta a partir de una señalizacióndiferencial full-dúplex para combatir los efectos electromagnéticos de los cables. Deesta forma, lo que determina si un bit es equivalente a un ’0’ lógico o a un ’1’ lógico noserá el voltaje que encontremos en el cable, sino la diferencia entre los dos cables (D+ yD-). Por tanto, si un fenómeno electromagnético afecta a los valores de voltaje de loscables, afectará a ambos cables de la misma forma y la diferencia se mantendrá conel valor lógico correcto. Este es uno de los mecanismos existentes de prevención deerrores en sistemas de comunicación.

En cuanto al dispositivo convertidor de señales UART a USB que en nuestro caso setrata de un FT232RL, podemos apreciar los siguientes aspectos:

1. VCC/VCCIO: estas dos señales se corresponden con la entrada de alimentacióndel dispositivo. VCC hace referencia a la alimentación del núcleo del dispositivo,mientras que VCCIO se refiere a la alimentación de las entradas y salidas deldispositivo. Como es razonable, ambas señales se encuentran conectadas a laentrada de alimentación del puerto USB.

2. RESET: esta señal es la encargada de realizar un reset en el dispositivo. Comopodemos apreciar, se encuentra siempre conectada a la señal de alimentacióndel puerto USB, de esta forma, siempre que tengamos la placa conectada porUSB, el dispositivo FT232RL se encontrará operativo.

3. USB DP/DM: estas dos señales se corresponden con las dos señales de datos delprotocolo de comunicación USB. De esta forma, la señal DP, data plus, se conectacon la señal D+ y la señal DM, data minus, se conecta con la señal D-.

4. GND: en el dispositivo encontramos cuatro pines de referencia de tierra, loscuales deben ir conectados a la referencia de tierra de la plataforma.

5. TEST: esta señal se debe conectar a tierra para que el dispositivo se comporte connormalidad. En caso de conectarlo con voltaje de alimentación, el dispositivoentraría en un modo interno de prueba.

6. CBUS0/CBUS1: estos dos pines ofrecen la funcionalidad de conectar dos led yrepresentar visualmente cuándo se está transmitiendo y recibiendo información.

7. TX/RX: señales de transmisión y recepción con el microcontrolador. Hay quetener muy en consideración que la señal TX del FT232RL debe ir conectada al pinRX del microcontrolador, de la misma forma que la señal RX del FT232RL debeir conectada al pin TX del microcontrolador. Es decir, la nomenclatura de lospines del FT232RL tienen en consideración el punto de vista del gestor externo decomunicación y no el microcontrolador, por lo que cuando el microcontroladorenvía información, el FT232RL considera que la recibe.

En cuanto al dispositivo de reset, se trata simplemente de un pulsador que cuando espulsado activa el modo de reset del microcontrolador. Para ello, se encuentra conectado

62

Page 73: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

al pin MCLR/RE3 del microcontrolador y cuando es pulsado se cortocircuita la señalcon la referencia de tierra.

5.5.3 Archivo .BRD (Board)

Una vez terminado el diseño del diagrama esquemático estamos preparados paradiseñar las conexiones y apariencia física de la placa. En esta parte trataremos tanto laorganización espacial de los dispositivos y componentes como el enrutamiento de lasvías que forman las conexiones.

A pesar de que, a simple vista, uno pueda diseñar la placa libremente, la realidades que hay que tener en cuenta abundantes requisitos eléctricos para asegurar laprotección de todos los dispositivos y componentes, y para asegurar que todo funcionecorrectamente.

A la hora de diseñar la placa tuvimos en cuenta las siguientes consideraciones:

• Los cabezales macho de la conexión ICSP son lineales, para poder ser utilizadoscon el dispositivo hardware PICKIT, y no en forma rectangular como la placaArduino UNO.

• El circuito integrado FT232RL, que convierte las señales UART a USB para permi-tir su transmisión y recepción por dicho puerto, debe encontrarse lo más cercaposible del conector USB de la placa. De esta manera evitamos la posible pérdidade información.

• Los condensadores encargados de filtrar ruido deben encontrarse lo más cercaposible de la entrada de alimentación que protegen.

• Las vías que forman las conexiones entre componentes no deben formar ángulosde 45º. Esto se debe a la posible inducción eléctrica que se forma cuando lacorriente eléctrica pasa a través de un cable.

• Es muy importante analizar cada pin del microcontrolador y sus conexiones parano alterar el funcionamiento interno del microcontrolador o incluso romperlo.Hay un detalle especialmente importante que provocará que se queme el mi-crocontrolador en caso de que se conecte de forma errónea: el pin VDDCORE.La correcta configuración de este pin es vital para el buen funcionamiento delmicrocontrolador, por ello es de gran importancia analizar bien cada apartadodel data sheet antes de dar por finalizado el diseño asistido por computador. Elnúcleo del microcontrolador no funciona con los mismos rangos de voltaje que elresto del microcontrolador, por lo que todos los microcontroladores disponen deun regulador interno de tensión que se encarga de que el voltaje en el núcleo seasiempre constante y su valor sea adecuado. Por tanto, si no utilizamos el reguladorinterno de tensión debemos alimentar el núcleo del microcontrolador desde estepin con el voltaje que señala el data sheet y que, en nuestro caso, se trata de 3,2 V,pero si utilizamos el regulador interno de tensión debemos conectar dicho pin atierra junto con un condensador de 10 uF. Es por ello que si tenemos esta confi-guración mal realizada y, por ejemplo, estamos utilizando el regulador interno y,

63

Page 74: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

además, alimentamos el núcleo con un voltaje de 5 V por el pin VDDCORE, loque provocaremos es que se queme el núcleo del microcontrolador.

Figura 5.13: Plataforma finalizada.

64

Page 75: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

En la figura 5.14, podemos ver el resultado final de enrutamiento de vías y deconfiguración de los componentes y dispositivos en la placa. Se trata de la versión finaldespués de haber sufrido varias revisiones.

Como vemos, aparecen dos colores predominantes: el rojo y el azul. El color rojoindica todas las vías que se encuentran en la cara frontal de la placa, mientras que el co-lor azul indica todas las vías que se encuentran en la cara posterior de la placa. Además,como es costumbre en el diseño de plataformas electrónicas, la cara frontal conduce latensión de alimentación, es decir, la señal VDD, mientras que la cara posterior de laplaca es una referencia de tierra.

Adicionalmente, hemos separado la placa en las tres partes fundamentales en lasque hemos ido separando los análisis realizados durante el transcurso de este proyecto.

• Color gris: Se corresponde con el microcontrolador.

• Color naranja: Se corresponde con la etapa de potencia.

• Color amarillo: Se corresponde con la etapa de comunicación.

Figura 5.14: Resultado del diseño de la placa mediante Eagle.

65

Page 76: Diseño hardware y desarrollo de librerías para la

5. DESARROLLO HARDWARE

Conexión del microcontrolador

En la parte relativa a las conexiones del microcontrolador, incluida en el recuadro decolor gris de la figura 5.14, podemos ver dónde se encuentra situado el microcontroladorasí como todas sus conexiones.

La gran mayoría de pines del microcontrolador se encuentran conectados a loscabezales de la plataforma creando el entorno de interacción exterior que el usuariopuede hacer servir para crear un diseño con la plataforma. Estos pines, en su granmayoría, se encargan de configurar toda la variedad de pines digitales y analógicos queofrece la plataforma.

En el recuadro de color gris también podemos apreciar el conector ICSP al cualirá conectado el dispositivo hardware que nos ofrece Microchip para la programaciónde microcontroladores: el PICKIT. Este será un aspecto muy importante a la hora deprogramar el dispositivo antes de haber dotado al microcontrolador con un gestor dearranque.

Adicionalmente, es importante hacer referencia al led que se encuentra en la partesuperior del microcontrolador que será el encargado de señalizar visualmente cuandola placa esta recibiendo alimentación eléctrica.

Fase de potencia

En el recuadro de color naranja de la figura 5.14 encontramos la etapa de potencia dela plataforma. En dicho recuadro cabe destacar los siguientes componentes:

• Conector Jack 2,1 mm: en la esquina inferior izquierda. Este conector nos será deutilidad a la hora de conectar la plataforma a una fuente externa.

• Condensadores electrolíticos: se encuentran en la parte superior izquierda yhacen la función de filtrado de ruido tanto para la señal de 3,3 V como para la de5 V.

• Dispositivo Q1: se encuentra en la esquina inferior derecha y representa el transis-tor MOSFET tipo-P encargado de realizar la selección del sistema de alimentaciónde la placa.

• Regulador LDO 3,3 V: se encuentra en la parte inferior del recuadro, entre elconector Jack 2,1 mm y el transistor Q1.

• Regulador LDO 5 V: se encuentra en el centro del recuadro naranja y se ca-racteriza por ser uno de los dispositivos de mayor tamaño dentro del recuadronaranja.

• Diodo: se encuentra a la izquierda del regulador LDO 5 V.

• Fusible: lo encontramos en la parte superior del recuadro naranja y se encargade proteger a la plataforma de sobrecargas de tensión del puerto USB.

66

Page 77: Diseño hardware y desarrollo de librerías para la

5.5. Diseño asistido por computador

Fase de comunicación USB

La parte del diseño relativa a la fase de comunicación por USB se encuentra referenciadadentro del recuadro de color amarillo. Como se ha expuesto con anterioridad, el chipFT232RL debe encontrarse lo más cerca posible del puerto USB para evitar pérdidas deinformación. En dicha etapa encontramos los siguientes componentes:

• FT232RL: se encuentra en el centro del recuadro y representa el circuito integradoencargado de convertir las señales de UART a USB y viceversa.

• Puerto USB: lo podemos identificar en la esquina inferior izquierda del recuadroamarillo, y representa el conector físico donde irá conectado el cable USB.

• Pulsador: en la esquina superior izquierda encontramos un pulsador que será elencargado de realizar un reset del microcontrolador cuando se pulse.

• Led: a la izquierda del dispositivo FT232RL encontramos dos led que nos seencenderán cuando se reciban o se transmitan datos por el puerto USB.

Figura 5.15: Plataforma finalizada conectada al PICKIT3.

67

Page 78: Diseño hardware y desarrollo de librerías para la
Page 79: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

6DESARROLLO SOFTWARE

En este capítulo vamos a tratar el tema del software de desarrollo. Como sabemos, unavez tenemos diseñada e implementada la placa multifunción debemos disponer de lasherramientas necesarias para poder programar el microcontrolador y que este cumplalas funciones que se le ordenan. Para ello vamos a explicar las diferentes herramientasde desarrollo de que dispone la placa.

1. MPLAB: Programa de Microchip específico para programar microcontroladoresde la misma casa, más concretamente, microcontroladores PIC.

2. Librerías: Funciones desarrolladas y diseñadas específicamente para el micro-controlador PIC18F25K80.

3. Compilador: Dependiendo del lenguaje utilizado para programar en MPLABnecesitaremos un compilador adecuado a dicho lenguaje.

4. Bootloader o gestor de arranque: Programa encargado de grabar el software pro-gramado con MPLAB.

6.1 MPLAB

La empresa Microchip, además de ofrecer una gran variedad de dispositivos de entrelos cuales nos competen los microcontroladores también ofrece gran variedad deprogramas para el desarrollo y la programación de dichos microcontroladores.

El programa predilecto de la casa Microchip es el MPLAB[27]. Se trata de un softwareque nos ofrece un entorno de desarrollo integrado para microcontroladores de lamarca Microchip de forma gratuita. De esta forma, al seleccionar el PIC que utilizas,el programa de forma autónoma tiene configurado todos los pines y propiedades de

69

Page 80: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

dicho microcontrolador, cosa que facilita enormemente el desarrollo de programaspara microcontroladores PIC.

A día de hoy disponemos de dos versiones de MPLAB funcionales:

6.1.1 MPLAB 8.X

La última versión del entorno MPLAB 8 es la MPLAB 8.92. Se trata de una versión deMPLAB todavía funcional construido con la base de Microsoft Visual C++ que permitela gestión, edición, compilación y programación de microcontroladores de 8-bit, 16-bity 32-bit. Esta versión de MPLAB solo funciona con el sistema operativo Windows.

MPLAB 8.92 soporta los siguientes compiladores:

1. MPLAB MPASM Assembler: Compilador de lenguaje ensamblador.

2. MPLAB ASM30: Compilador de lenguaje ensamblador.

3. MPLAB C Compiler: Compilador de lenguaje C.

4. HI-TECH C: Compilador de lenguaje C.

6.1.2 MPLAB X

La versión MPLAB X es la última versión que ha salido a la luz por parte de Microchip.Esta versión, a diferencia de la anterior, está construida bajo la plataforma de códigoabierto NetBeans y soporta los sistemas operativos Mac OS X, Linux y, por supuesto,Windows.

MPLAB X soporta los siguientes compiladores, además de los expuestos anterior-mente para la versión MPLAB 8.92:

1. MPLAB XC8: Compilador de lenguaje C para PIC de 8-bit.

2. MPLAB XC16: Compilador de lenguaje C para PIC de 16-bit.

3. MPLAB XC32: Compilador de lenguaje C para PIC de 32-bit.

4. SDCC: Compilador de lenguaje C de código abierto.

70

Page 81: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

6.2 Librerías

En esta sección vamos a exponer las librerías que hemos desarrollado para el micro-controlador PIC18F25K80. En ellas, vamos a encontrar las funciones relativas a lossiguientes módulos del microcontrolador, que han sido desarrollados a partir del análi-sis exhaustivo del data sheet[28] de dicho microcontrolador.

1. I/O digital: Configuración de entradas y salidas digitales.

2. Módulo ADC: Conversor analógico-digital para poder leer entradas analógicas.

3. Módulo PWM: Modulador por ancho de pulsos para poder configurar salidasanalógicas.

4. Módulo UART: Configuración del módulo UART para establecer una comunica-ción en modo serie.

5. Temporizador: Configuración del temporizador 0 del microcontrolador.

Todas estas librerías han sido desarrolladas y configuradas con el compilador gra-tuito MPLAB XC8 para microcontroladores de 8-bit.

6.2.1 I/O digital

En esta librería vamos a programar todo lo relativo a la entrada y salida digital. Podre-mos configurar el registro TRIS, encargado de establecer el modo de funcionamientodel pin digital bien como entrada o bien como salida. Nuestro microcontrolador dis-pone de tres puertos (A, B y C), por lo que disponemos de tres registros TRIS (TRISA,TRISB y TRISC). En dichos registros, un ’1’ lógico configurará el pin como entrada y un’0’ lógico lo configurará como salida.

Una vez configurado el pin como entrada o como salida podremos leer el valorlógico de dicho pin o configurarlo con un valor lógico determinado.

Para leer el valor lógico de un pin digital debemos realizar una lectura del registroPORT (PORTA, PORTB o PORTC) en el pin correspondiente, de forma que leyendo enel registro PORT este nos devolverá el valor lógico de dicho pin. Si en dicho pin seencuentra un valor alto de tensión, encontraremos un ’1’ lógico al leer el registro PORT.En caso de que dicho pin se encuentre en un valor bajo de tensión, encontraremos un’0’ lógico en dicho registro.

A la hora de escribir en un pin digital un valor determinado debemos configurarcorrectamente el registro LAT (LATA, LATB o LATC) de forma que un ’1’ en dicho registroconfigurará dicho pin con un valor alto de tensión y un ’0’ en dicho registro configuraráel pin correspondiente con un valor bajo de tensión.

A simple vista, el registro PORTx y el registro LATx pueden parecer iguales, ya queal escribir un valor en estos registros dicho valor se verá reflejado en el pin correspon-diente. La diferencia viene a la hora de leer el valor del pin, ya que al leer en el registro

71

Page 82: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

PORTx vamos a encontrar exactamente el valor lógico del pin en cuestión, pero leer enel registro LATx nos va a devolver el valor del biestable que hace de punto intermedioentre el registro y el pin, físicamente hablando.

A modo de ejemplo supongamos que tienes el pin RC4 cortocircuitado a tierra yconfigurado como salida, y ejecutas la instrucción LATCbits.LATC4 = 1 que configurarála salida de dicho pin con valor alto de tensión. Intuitivamente estás intentando tenerun valor lógico alto (’1’) en ese pin, pero como se encuentra cortocircuitado a tierra,físicamente encontramos un valor bajo (’0’). En esta situación, si leemos el pin RC4 conel registro PORTC, el resultado que encontraremos será un valor bajo de tensión. Encambio, si utilizamos el registro LATC como método de lectura del pin RC4, el resultadoencontrado será de un valor alto de tensión o ’1’ lógico, ya que estaremos leyendo elvalor del biestable y este guarda el último valor que hemos ejecutado en el registro LAT,que previamente hemos configurado como ’1’ lógico. En dicho caso, la instrucción quenos devolverá el valor real de tensión del pin en cuestión será la lectura del registroPORT.

Por tanto, a modo de resumen:

• Leer en el registro LATx nos devuelve el valor del biestable.

• Leer en el registro PORTx nos devuelve el valor del pin físico.

• Escribir en el registro LATx guardará el valor en el biestable.

• Escribir en el registro PORTx guardará el valor en el biestable.

De todo esto se deduce que, para evitar datos erróneos, debemos leer siempre delregistro PORTx y escribir en cualquiera de los dos indistintamente (PORTx o LATx).

A continuación analizaremos cada una de las funciones de la librería diseñada paracontrolar los pines de entrada/salida digital.

FUNCIÓN DESCRIPCIÓN

initDIG Configura el pin correspondiente como entrada osalida.

ReadDIG Lee el valor digital (’1’ o ’0’) de entrada en un pindeterminado.

WriteDIG Establece la salida de un pin digital como valor altoo bajo de tensión (’1’ o ’0’ lógico).

ToogleDIG Si el pin está en valor alto, lo configura como nivelbajo, y viceversa.

Cuadro 6.1: Tabla de funciones: I/O digital.

72

Page 83: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

initDIG

Prototipo void initDIG(unsigned int DigPIN, unsigned char ConfMode)

Argumentos

DigPIN:_DigPIN0 - Selección del pin digital 0 - RC4_DigPIN1 - Selección del pin digital 1 - RC5_DigPIN2 - Selección del pin digital 2 - RC3_DigPIN3 - Selección del pin digital 3 - RC2_DigPIN4 - Selección del pin digital 4 - RC1_DigPIN5 - Selección del pin digital 5 - RC0_DigPIN6 - Selección del pin digital 6 - RC6_DigPIN7 - Selección del pin digital 7 - RC7_DigPIN8 - Selección del pin digital 8 - RB6_DigPIN9 - Selección del pin digital 9 - RB7_DigPIN10 - Selección del pin digital 10 - RB0_DigPIN11 - Selección del pin digital 11 - RB1_DigPIN12 - Selección del pin digital 12 - RB2_DigPIN13 - Selección del pin digital 13 - RB3ConfMode:_OPUT - Configuración del pin como salida._IPUT - Configuración del pin como entrada.

Include IODigital.h

Fichero IODigital.c

Cuadro 6.2: Función initDIG.

ReadDIG

Prototipo int ReadDIG(unsigned int DigPIN)

Argumentos

DigPIN:_DigPIN0 - Selección del pin digital 0 - RC4..._DigPIN13 - Selección del pin digital 13 - RB3

Retorno Valor lógico del pin seleccionado.

Include IODigital.h

Fichero IODigital.c

Cuadro 6.3: Función ReadDIG.

73

Page 84: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

WriteDIG

Prototipo void WriteDIG(unsigned int DigPin, unsigned int Data)

Argumentos

DigPIN:_DigPIN0 - Selección del pin digital 0 - RC4..._DigPIN13 - Selección del pin digital 13 - RB3Data:_SET - Valor lógico ’1’._CLEAR - Valor lógico ’0’.

Include IODigital.h

Fichero IODigital.c

Cuadro 6.4: Función WriteDIG.

ToogleDIG

Prototipo void ToogleDIG(unsigned int DigPin)

Argumentos

DigPIN:_DigPIN0 - Selección del pin digital 0 - RC4..._DigPIN13 - Selección del pin digital 13 - RB3

Include IODigital.h

Fichero IODigital.c

Cuadro 6.5: Función ToogleDIG.

74

Page 85: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

EJEMPLO DE CÓDIGO:

#include <xc . h>#include <stdio . h>#include < s t d l i b . h>#include <p18f25k80 . h>#include " IODigital . h"

/ / Configuración de la frecuencia de funcionamiento .#define _XTAL_FREQ 16000000

/ / Configuración básica del microcontrolador .#pragma config FOSC = INTIO2 , SOSCSEL = DIG

int main ( )

/ / Inicializamos e l pin d i g i t a l 0 como entrada .initDIG ( _DigPIN0 , _IPUT ) ;

/ / Inicializamos e l pin d i g i t a l 1 como salida .initDIG ( _DigPIN1 , _OPUT) ;

while ( 1 )

/ / Si e l pin d i g i t a l 0 es ’ 1 ’ .i f (ReadDIG( _DigPIN0 ) == 1 )

/ / Escribimos un ’ 1 ’ en e l pin d i g i t a l 1 .WriteDIG ( _DigPIN1 , _SET ) ;

/ / Si es ’ 0 ’ . else

/ / Escribimos un ’ 0 ’ en e l pin d i g i t a l 0 .WriteDIG ( _DigPIN1 , _CLEAR ) ;

return 0 ;

Como podemos observar se trata de un programa sencillo encargado de leer el pinRC4 y, si este es un ’1’ lógico, la salida del pin RC5 pasará a valer un ’1’ lógico. En casocontrario, la salida RC5 valdrá un ’0’ lógico.

75

Page 86: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

6.2.2 Módulo ADC

El conversor analógico-digital (ADC) de nuestro microcontrolador es un conversor de12-bit de resolución que dispone de ocho pines analógicos, aunque en nuestra placasolo utilizaremos seis de ellos.

El módulo ADC se encarga de transformar una señal analógica de tensión a suequivalente digital, por lo que un valor de tensión dado resultara en una equivalenciade 12 bits binarios.

El método más utilizado es el de aproximaciones sucesivas. En este método dis-ponemos de dos señales, una real de entrada (voltaje a convertir) y otra generada porel propio conversor que sirve de comparación. De esta manera, el conversor realizauna serie de comparaciones entre las dos señales de voltaje y va codificando el códigobinario final acotando la señal propia a la señal de entrada hasta que las dos seanidénticas.

A grandes rasgos, el módulo ADC del PIC18F25K80 ofrece dos modos de funciona-miento:

1. Modo simple: en el cual la referencia negativa de voltaje está conectada a tierray la referencia positiva esta conectada cualquiera de las opciones disponibles(normalmente se encuentra conectada a la alimentación de la placa VDD). Estopermite un rango de voltajes que va de 0 V a (Vref+) V.

2. Modo diferencial: en este caso, la referencia negativa se encuentra conectada aun valor negativo de tensión, mientras que la positiva se encuentra conectadaa cualquiera de las opciones disponibles (normalmente VDD). En este caso, elrango de voltajes disponibles va de (Vref-) V a (Vref+) V.

De esta forma, si suponemos que utilizamos el modo simple de funcionamientocon Vref+ = 5 V, el rango de valores digitales será:

• Vin = 0 V ->ADC = 0x000

• Vin = 5 V ->ADC = 0xFFF

Y si, por el contrario, utilizamos el modo diferencial de funcionamiento con Vref- =-5 V y Vref+ = 5 V, el rango de valores digitales será:

• Vin = -5V ->ADC = 0x000

• Vin = +5V ->ADC = 0xFFF

En cualquier caso, en esta librería se trabajará con el modo simple de funciona-miento, ya que, en principio, no se considera el hecho de que existan sistemas críticos

76

Page 87: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

en este sentido. Aun así, la configuración del modo diferencial es altamente sencilladentro de la librería.

En cuanto a la configuración del módulo ADC, encontramos tres registros funda-mentales de configuración de los cuales nombraremos las partes competentes parael desarrollo de esta librería. Cualquier información adicional se encuentra en el datasheet del microcontrolador.

1. ADCON0:

• CHS(4:0) - Selección del canal de entrada.

• GO/DONE - Estado del conversor.

– (1): Conversión en proceso.

– (0): Conversión finalizada.

• ADON - ON/OFF.

– (1): Módulo encendido.

– (0): Módulo apagado.

2. ADCON1:

• VCFG(1:0) - Selección de referencia positiva.

– (11): Referencia interna (4.1 V).

– (10): Referencia interna (2.0 V).

– (01): Referencia externa.

– (00): Referencia en alimentación (VDD).

• VNCFG - Selección de referencia negativa.

– (1): Referencia externa.

– (0): Referencia de tierra (GND).

3. ADCON2:

• ADFM - Formato del resultado.

– (1): Justificado a la derecha.

– (0): Justificado a la izquierda.

El resultado de la conversión se guarda en dos registros (ADRESH:ADRESL) deltamaño de un byte, es decir, 16-bit, pero el resultado de la conversión tiene el tamañode 12-bit. Por tanto, si justificamos el resultado a la izquierda, los cuatro bits menossignificativos del registro ADRESL quedarán vacíos. En cambio, si utilizamos la justifi-cación a la derecha, serán los cuatro bits más significativos del registros ADRESH losque quedarán vacíos.

Por último, debemos conocer cómo calcular el tiempo de adquisición y el reloj deconversión. En esta librería esta configuración es automática y no requiere ningún tipode conocimiento previo para su uso.

77

Page 88: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

En los registros de configuración del módulo ADC podemos cambiar el reloj utiliza-do y podemos especificar cuánto tiempo de adquisición de datos (Tacq) precisamos enrelación al tiempo de cálculo de un bit (Tad).

En el data sheet del microcontrolador encontramos los valores críticos que debemosevitar, por lo que en cualquier caso el tiempo de adquisición Tacq debe ser superior a2.45 us y debe ser expresado en relación al tiempo de conversión de un bit (Tad), dichotiempo mínimo es Tad = 1.4 us, además sabemos que trabajaremos siempre con unreloj de 16 MHz, al cual le podremos aplicar un divisor (DV) de 2, 4, 8, 16, 32 o 64. Portanto:

1. El periodo del reloj será:

Tosc = DV

16M> 1,4us = Tad (6.1)

donde DV >22.4

2. El siguiente divisor (DC) mayor de 22.4 es 32. Por tanto, el divisor que utilizaremosserá Fosc/32.

3. Con el divisor Fosc/32, el tiempo de conversión de un bit será:

Tad = 32

16M= 2us (6.2)

4. Como sabemos, el tiempo de adquisición debe ser como mínimo de 2.45 us ydicho valor se configura en relación al valor de Tad. El valor más cercano quecumple los requisitos temporales es:

Tacq = 2∗Tad = 4us (6.3)

En el caso de utilizar esta librería con un reloj diferente, simplemente habría quesustituir los nuevos valores en las ecuaciones (7.1), (7.2) y (7.3) y volver a configurar losregistros pertinentes. En nuestra librería, estos datos estarán configurados previamente.

Ahora analizaremos todas las funciones de la librería.

78

Page 89: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

FUNCIÓN DESCRIPCIÓN

initADC Configura el canal y las referencias de voltaje.OnADC Enciende el módulo ADC.StartADC Empieza la conversión.StopADC Para la conversión.BusyADC Se pone a ’1’ cuando ha finalizado la conversión.GetValueADC Devuelve el resultado de la conversión.

Cuadro 6.6: Tabla de funciones: Módulo ADC.

initADC

Prototipo void initADC(unsigned int CHANNEL, unsigned int Vref_P, un-signed int Vref_M)

Argumentos

CHANNEL:_CH0 - Selección del canal 0 - AN0/RA0_CH1 - Selección del canal 1 - AN1/RA1_CH2 - Selección del canal 2 - AN2/RA2_CH3 - Selección del canal 3 - AN3/RA3_CH4 - Selección del canal 4 - AN4/RA5_CH5 - Selección del canal 5 - AN9/RB4Vref_P:_Vref_P_Vdd - Referencia interna de alimentación VDD._Vref_P_4_1V - Referencia interna a 4.1 V._Vref_P_2V - Referencia interna a 2 V._Vref_P_EXT - Referencia externa.Vref_M:_Vref_M_EXT - Referencia externa._Vref_M_GND - Referencia de tierra (GND).

Include ADC.h

Fichero ADC.c

Cuadro 6.7: Función initADC.

79

Page 90: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

OnADC

Prototipo void OnADC()

Include ADC.h

Fichero ADC.c

Cuadro 6.8: Función OnADC.

StartADC

Prototipo void StartADC()

Include ADC.h

Fichero ADC.c

Cuadro 6.9: Función StartADC.

StopADC

Prototipo void StopADC()

Include ADC.h

Fichero ADC.c

Cuadro 6.10: Función StopADC.

BusyADC

Prototipo unsigned int BusyADC()

Retorno Devuelve ’1’ si se ha completado la conversión. En caso contra-rio devuelve ’0’.

Include ADC.h

Fichero ADC.c

Cuadro 6.11: Función BusyADC.

80

Page 91: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

GetValueADC

Prototipo unsigned int GetValueADC()

Retorno Devuelve el resultado de la conversión [0-4096]

Include ADC.h

Fichero ADC.c

Cuadro 6.12: Función GetValueADC.

EJEMPLO DE CÓDIGO:

#include <xc . h>#include <stdio . h>#include < s t d l i b . h>#include <p18f25k80 . h>#include "ADC. h"

#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia de funcionamiento .

#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración básica del microcontrolador .

int main ( )

int aux ;f l o a t resultado ;

initADC (_CH0, _Vref_P_Vdd , _Vref_M_GND ) ; / / Inicializamos e l módulo ADC

while ( 1 ) / / Imprimimos por pantalla e l valor de v o l t a j e le ído .aux = GetValueADC ( ) ;resultado = ( aux / 8 1 9 . 2 ) ;p r i n t f ( resultado ) ;

return 0 ;

En este sencillo código hemos configurado el módulo ADC en modo simple con lasreferencias GND-VDD (0 V - 5 V, típicamente), de forma que se imprima continuamentepor pantalla el resultado del voltaje aplicado. Para calcular el factor 819.2, sabemos quesi la resolución del módulo ADC es de 4096 valores, y el voltaje máximo es 5 V, 4096/5 =819.2.

81

Page 92: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

6.2.3 Módulo PWM

El módulo PWM - Pulse Width Modulation o modulación por ancho de pulsos es unmódulo que nos ofrece el microcontrolador de Microchip para poder obtener unasalida de voltaje regulable por software. La diferencia con las salidas digitales radicaen que con las salidas digitales solo puedes obtener dos tipos de valores: valor alto detensión o valor bajo de tensión, pero nunca un valor intermedio. Con el módulo PWMpodremos regular dicha tensión de salida para obtener un voltaje específico.

Para esta librería utilizamos el módulo 2 PWM que se encuentra conectado al pinRC2 del microcontrolador. Dicho módulo utiliza el temporizador 2 como referencia detiempo.

Para entender el funcionamiento del módulo PWM hay que destacar tres conceptosque irán interrelacionados a lo largo de la explicación: el periodo del temporizador2 (TMR2 - 8bit), el ciclo de trabajo del módulo PWM (DC2B(1:0):CCPR2L(7:0)) y elperiodo del módulo PWM (PR2 - 8bit). El ciclo de trabajo del módulo PWM no es másque la proporción de tiempo del periodo de temporizador 2 que la salida se encontraráen un valor alto de tensión. Por tanto, a una frecuencia adecuada, la tensión de salidase aproximará lo suficiente a la tensión de alimentación reducida en un factor igual alciclo de trabajo.

Figura 6.1: Ciclo de trabajo de la señal PWM.

Tomando la figura 7.1 como referencia, si suponemos un duty cicle del 50% y unatensión de alimentación VDD = 5 V, a una frecuencia adecuada obtendremos en lasalida una tensión de 2.5 V, donde las variaciones serán imperceptibles.

En cuanto a la configuración del módulo PWM, vamos a exponer los registrosfundamentales y sus partes más importantes para esta librería. Cualquier informa-ción adicional acerca del módulo o dichos registros se encuentra en el data sheet delmicrocontrolador.

1. CCPCON2:

• DC2B(1:0) - Los dos bits más significativos del ciclo de trabajo.

• CCP2M(3:0) - Selección del modo de funcionamiento.

– (1111): PWM mode.

82

Page 93: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

2. CCPTMRS:

• C2TSEL - Selección de temporizador.

– (1): Temporizador 3 y 4.

– (0): Temporizador 1 y 2.

3. CCPR2L:

• CCPR2L - Ocho bits menos significativos del ciclo de trabajo.

En este librería la configuración predeterminada es la siguiente:

• Reloj = Fosc/16

• Registro PR2 = 255

Antes de proceder a exponer las funciones de esta librería cabe aclarar que connuestra configuración son prescindibles los dos bits más significativos del ciclo detrabajo, por lo que disponemos de los 255 valores del registro CCPR2L para configurarel mismo.

A partir de estos registros y con la información expuesta se ha desarrollado unalibrería para el módulo 2 PWM con las siguientes funciones:

FUNCIÓN DESCRIPCIÓN

initPWM Configura los registros y inicializa el valor del ciclode trabajo.

StartPWM Enciende el temporizador 2.StopPWM Apaga el temporizador 2.

Cuadro 6.13: Tabla de funciones: Módulo PWM.

initPWM

Prototipo void initPWM(unsigned int DC)

Argumento DC - Valor del ciclo de trabajo [0-255]

Include PWM.h

Fichero PWM.c

Cuadro 6.14: Función initPWM.

83

Page 94: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

StartPWM

Prototipo void StartPWM()

Include PWM.h

Fichero PWM.c

Cuadro 6.15: Función StartPWM.

StopPWM

Prototipo void StopPWM()

Include PWM.h

Fichero PWM.c

Cuadro 6.16: Función StopPWM.

EJEMPLO DE CÓDIGO:

#include <xc . h>#include <stdio . h>#include < s t d l i b . h>#include <p18f25k80 . h>#include "PWM. h"

#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia de funcionamiento .

#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración básica del microcontrolador .

int main ( )

int DC = 0 ;

initPWM(DC) ; / / Inicializamos e l módulo PWMStartPWM ( ) ; / / Encendemos e l módulo PWM

while ( 1 ) / / Realizamos un barrido de v o l t a j e s que vaya de 0 V a VDD.

DC++;initPWM(DC) ;

return 0 ;

En este programa de ejemplo podríamos apreciar como la salida de tensión iríade 0 V progresivamente hasta la tensión de alimentación. Una vez alcanzado el valormáximo, la variable DC se desbordaría y empezaría el mismo proceso de nuevo.

84

Page 95: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

6.2.4 Módulo USART

El módulo USART - Universal Synchronous-Asynchronous Receiver Transmitter es unmódulo que permite al microcontrolador comunicarse con el exterior (otro microcon-trolador o un terminal de datos, por ejemplo) siguiendo un protocolo de conexióntipo serie. Este tipo de comunicación recibe el calificativo de serie debido a que latransmisión se realiza carácter por carácter y no por medio de tramas con numerososcaracteres. Así pues, la configuración del envío de caracteres es relativamente sencilla,ya que al utilizar la versión asíncrona (UART) no debemos realizar ningún tipo decontrol de errores o de flujo.

Para nuestra librería se han desarrollado una serie de funciones que nos van apermitir fundamentalmente la comunicación con un terminal de datos de forma quepodamos visualizar los datos que enviamos y podamos recibir caracteres.

El aspecto fundamental a tener en cuenta a la hora de configurar el módulo USARTde cualquier microcontrolador es el baud rate que indica el número de señales porsegundo que envía el transmisor, de forma que ambos extremos de la comunicación,microcontrolador y terminal de datos, deben estar configurados con el mismo baudrate de forma que se produzca una sincronización entre ambos dispositivos.

Los baud rates más utilizados, que se podrían considerar estándares, son 2400, 9600,19 200, 57 600 y 115 200, y estos serán los que vamos a poder configurar con esta librería.A modo de resumen previo a la explicación, el baud rate se configura seleccionando elvalor adecuado en el registro SPBRGH1:SPBRG1 y nuestro microcontrolador disponede dos modos de configuración: uno de 8-bit donde solo utilizamos el registro SPBRG1,y otro de 16-bit donde también utilizamos el registro SPBRGH1. En nuestro caso uti-lizaremos la versión de 16-bit para tener más precisión a la hora de calcular el valoradecuado de los registros para tener el baud rate más ajustado posible.

A continuación vamos a exponer los registros fundamentales de la configuración delmódulo USART, de los cuales destacamos los que son relevantes para nuestra librería.El resto de propiedades del módulo USART se pueden encontrar en el data sheet delmicrocontrolador.

1. TXSTA1:

• TX9 - Modo de transmisión de 9-bit.

– (1): Transmisión de 9-bit.

– (0): Transmisión de 8-bit.

• TXEN - Activar transmisión de datos.

– (1): Activado.

– (0): Desactivado.

• SYNC - Selección de modo síncrono o asíncrono.

– (1): Modo síncrono.

– (0): Modo asíncrono.

85

Page 96: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

• BRGH - Velocidad del baud rate.

– (1): Velocidad alta.

– (0): Velocidad baja.

• TRMT - Estado del búfer de transmisión.

– (1): Búfer vacío.

– (0): Búfer lleno.

• TX9D - Transmisión del noveno bit (si se usa).

1. RCSTA1:

• SPEN - Activar el puerto serie.

– (1): Activado.

– (0): Desactivado.

• RX9 - Modo de recepción de 9-bit.

– (1): Recepción de 9-bit.

– (0): Recepción de 8-bit.

• CREN - Activar recepción de datos.

– (1): Activar.

– (0): Desactivar.

• RX9D - Recepción del noveno bit (si se usa).

1. BAUDCON1:

• BRG16 - Selección de 8-bit o 16-bit para baud rate.

– (1): Baud rate de 16-bit.

– (0): Baud rate de 8-bit.

Una vez conocemos los registros importantes del módulo USART, debemos calcularlos valores necesarios para configurar correctamente el baud rate.

Para empezar los cálculos hemos determinado que la configuración inicial máseficiente es la siguiente:

• SYNC = 0 (modo asíncrono).

• BRG16 = 1 (utilizamos el registro de 16-bit).

• BRGH = 0 (velocidad baja).

86

Page 97: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

Si consultamos el data sheet del microcontrolador veremos que para la configura-ción que acabamos de exponer la fórmula que rige el comportamiento del baud rate esla siguiente:

B audRate = Fosc

[16(n +1)](6.4)

donde n = SPBRGH1:SPBRG1.

Ahora debemos sustituir el valor de los baud rates que utilizaremos y despejar laincógnita "n". De esta forma, obtenemos la siguiente tabla:

BAUD RATE n = SPBRGH1:SPBRG1

2400 4159600 10319 200 5157 600 16115 200 8

Cuadro 6.17: Tabla de configuración del registro del baud rate.

Una vez calculados los diferentes valores del registro de configuración del baud ratepodemos comenzar con la exposición de funciones de la librería.

FUNCIÓN DESCRIPCIÓN

initUART Establece la configuración inicial del móduloUSART.

BusyUART Devuelve el valor TMRT que indica el estado delbúfer de transmisión.

PutUART Transmite un carácter por el puerto serie.PutsUART Transmite un string de caracteres por el puerto se-

rie.DataReceivedUART Devuelve el valor de RC1IF que indica si hay algún

dato en el búfer de recepción.ReadUART Devuelve el dato recibido.

Cuadro 6.18: Tabla de funciones: Módulo USART.

87

Page 98: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

initUART

Prototipo void initUART(unsigned int BaudRate, unsigned int BIT)

Argumentos

BaudRate:_BR_2400 - BR = 2400_BR_9600 - BR = 9600_BR_19 200 - BR = 19 200_BR_57 600 - BR = 57 600_BR_115 200 - BR = 115 200BIT:_9BIT - Comunicación con 9-bit._8BIT - Comunicación con 8-bit.

Include UART.h

Fichero UART.c

Cuadro 6.19: Función initUART.

BusyUART

Prototipo char busyUART()

Retorno TXSTA1bits.TRMT (indica si el búfer de transmisión está vacío.

Include UART.h

Fichero UART.c

Cuadro 6.20: Función BusyUART.

PutUART

Prototipo void PutUART(char data)

Argumentosdata:Carácter a mandar por el puerto serie.

Include UART.h

Fichero UART.c

Cuadro 6.21: Función PutUART.

88

Page 99: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

PutsUART

Prototipo void PutsUART(unsgined char *text)

Argumentos*text:Puntero del string a mandar por el puerto serie.

Include UART.h

Fichero UART.c

Cuadro 6.22: Función PutsUART.

DataReceivedUART

Prototipo char DataReceivedUART()

Retorno PIR1bits.RC1IF (indica si se ha recibido algún carácter, compro-bando el búfer de recepción).

Include UART.h

Fichero UART.c

Cuadro 6.23: Función DataReceivedUART.

ReadUART

Prototipo char ReadUART()

Retorno RCREG1 (contenido del búfer de recepción).

Include UART.h

Fichero UART.c

Cuadro 6.24: Función ReadUART.

89

Page 100: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

EJEMPLO DE CÓDIGO:

#include <xc . h>#include <stdio . h>#include < s t d l i b . h>#include <p18f25k80 . h>#include "UART. h"

#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia de funcionamiento .

#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración básica del microcontrolador .

int main ( ) unsigned char data [ 8 0 ] ;char read ;

initUART ( _BR_9600 , _8BIT ) ; / / Inicializamos e l módulo UART.

while ( 1 ) while ( ! DataReceivedUART ( ) ) ; / / Si recibimos un dato .read = ReadUART ( ) ; / / Lo leemos y lo mandamos por UART.s p r i n t f ( data , " El carácter recibido es:%c \n" , read ) ;PutsUART( data ) ;

return 0 ;

Este código de ejemplo configura el módulo USART con un baud rate de 9600 yen modo de 8-bit y se queda esperando a que se llene el búfer de recepción con algúndato (normalmente se trata de un dato mandado desde el terminal de datos de unordenador convencional), y cuando reciba un dato, el microcontrolador enviará lafrase: ’El carácter recibido es:’ seguido del carácter que previamente hemos enviado almicrocontrolador.

90

Page 101: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

6.2.5 Temporizador

En esta librería encontramos todo lo relacionado con el temporizador número cero (0)del microcontrolador. Se trata de un temporizador que puede ser utilizado tambiéncomo contador con un preescalador de 8-bit que permite ralentizar el reloj internodel microcontrolador hasta en un factor 1:256, además puede ser configurado el tipode flanco del modo contador y la fuente de reloj (externa o interna). En esta libreríautilizaremos únicamente el modo temporizador.

Un temporizador no es más que un registro (TMR0H:TMR0L) que va incremen-tando su valor de uno en uno hasta que desborda. En el momento que desborda seactiva un flag que nos indica que el tiempo configurado se ha cumplido. En el casodel PIC18F25K80, dicho registro es de 16-bits, lo que permite una gran versatilidad a lahora de configurar el temporizador.

Hay dos maneras de regular el tiempo que tardará dicho registro en desbordar:

1. Por medio del preescalador, que será el encargado de ralentizar los ciclos delreloj interno de 16 MHz. El preescalador no es más que un registro paralelode 8-bit que hace exactamente la misma función que el registro de 16-bit deltemporizador. Cuando se desborda el registro del preescalador, se incrementa enuno el registro del temporizador. Por tanto se podría entender como un pequeñotemporizador secundario que alarga el tiempo que tarda el registro principal deltemporizador en incrementarse.

2. Configurando un valor preestablecido en el registro del temporizador principaltambién podemos configurar el tiempo que tarda este en desbordarse de unaforma más precisa. De esta manera, si tarda dos segundos en pasar de 0x0000 a0xFFFF y desbordar. Si configuras el registro previamente con el valor 0x00FF, eltiempo que tardará dicho registro en desbordar será de un segundo.

En nuestra librería tenemos preestablecida la configuración de una serie de tiemposcomunes que pueden ser útiles:

• 1 ms.

• 10 ms.

• 50 ms.

• 100 ms.

• 500 ms.

• 1 s.

Para ello, configuramos el preescalador en modo default (más adelante veremoscomo hacerlo) y establecemos uno de los tiempos antes expuestos. En cualquier caso,el código de la librería permite configuraciones adicionales.

91

Page 102: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

El modo que viene por defecto en esta librería está configurado con el preescalador1:64 y con unos valores específicos del registro del temporizador.

A continuación vamos a exponer los registros fundamentales para la configuracióndel temporizador 0:

1. T0CON:

• TMR0ON - ON/OFF

– (1): Temporizador 0 encendido.

– (0): Temporizador 0 apagado.

• T08BIT - Configuración del registro del temporizador.

– (1): Registro de 8-bit.

– (0): Registro de 16-bit.

• T0CS - Configuración del reloj.

– (1): Reloj externo.

– (0): Ciclo interno de instrucción (Fosc/4)

• PSA - Activación del preescalador.

– (1): Activado.

– (0): Desactivado.

• T0PS - Selección del preescalador.

– (111): 1:256

– (110): 1:128

– (101): 1:64

– (100): 1:32

– (011): 1:16

– (010): 1:8

– (001): 1:4

– (000): 1:2

2. PMD1:

• TMR0MD - Activación del módulo del temporizador.

– (1): Activado.

– (0): Desactivado.

Una vez conocemos los registros involucrados en la configuración del temporizador,vamos a exponer el método de cálculo de tiempo con las siguientes consideraciones:

• El temporizador 0 dispone de un registro de 16-bit llamado TMR0. En cualquiercaso, este registro es solo de lectura, y para escribir en él debemos escribir losregistros TMR0H y TMR0L. En caso de utilizar el modo de 8-bit, se ignora elregistro TMR0H.

92

Page 103: Diseño hardware y desarrollo de librerías para la

6.2. Librerías

• El reloj interno es de 16 MHz.

• El tiempo que tarda en incrementarse el registro TMR0 es de 4/Fosc.

Con estas consideraciones podemos comenzar el cálculo de tiempo.

El tiempo que tardará el registro TMR0 en incrementarse es de:

T c y = 4∗PSC

16M= 250ns ∗PSC (6.5)

donde PSC es el preescalador utilizado.

Si el registro tiene 16-bit, admite un valor máximo en decimal de 65535 = 0xFFFF,por lo que el tiempo del temporizador queda definido como:

T 0 = T MR0∗T c y = T MR0∗PSC ∗250ns (6.6)

En modo default el preescalador es 1:64, por lo que Tcy = 16 us. De esta manera, elvalor del registro TMR0 será de 65535 - n.º de incrementos necesarios para cumplir eltiempo:

TIEMPO INCREMENTOS TMR0

1 ms 63 6547210 ms 625 6491050 ms 3125 62410100 ms 6250 59285500 ms 31250 342851 s 62500 3035

Cuadro 6.25: Relación de tiempos y registro TMR0.

Una vez comprendido como funciona el temporizador 0 vamos a exponer las fun-ciones de dicha librería.

FUNCIÓN DESCRIPCIÓN

T0init Inicializa el temporizador con un preescalador de-terminado.

T0start Enciende el temporizador con un TMR0 determi-nad.

T0stop Para el temporizador.T0ClearInterruption Baja el flag de interrupción del temporizador 0.T0int Comprueba el flag de interrupción.T0InterruptionEnable Habilita las interrupciones del temporizador 0.

Cuadro 6.26: Tabla de funciones: Temporizador 0.

93

Page 104: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

initT0

Prototipo void initT0(unsgined int PSC)

Argumentos

PSC:_PSC_2 - 1:2._PSC_4 - 1:4._PSC_8 - 1:8._PSC_16 - 1:16._PSC_32 - 1:32._PSC_64 - 1:64._PSC_128 - 1:128._PSC_256 - 1:256._PSC_DEFAULT.

Include T0.h

Fichero T0.c

Cuadro 6.27: Función initT0.

T0start

Prototipo void T0start(unsigned int TMR0)

ArgumentosTMR0:T0_1_ms - Temporizador de 1 ms.T0_10_ms - Temporizador de 10 ms.T0_50_ms - Temporizador de 50 ms.T0_100_ms - Temporizador de 100 ms.T0_500_ms - Temporizador de 500 ms.T0_1_s - Temporizador de 1 s.

Include T0.h

Fichero T0.c

Cuadro 6.28: Función T0start.

94

Page 105: Diseño hardware y desarrollo de librerías para la

6.3. Gestor de arranque

EJEMPLO DE CÓDIGO:

#include <xc . h>#include <stdio . h>#include < s t d l i b . h>#include <p18f25k80 . h>#include "T0 . h"

#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia de funcionamiento .

#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración básica del microcontrolador .

int main ( )

T0init (_PSC_DEFAULT ) ; / / Inicializamos e l temporizador 0 .T0ClearInterruption ( ) ; / / Limpiamos interrupciones .T0InterruptEnable ( ) ; / / Habilitamos interrupciones .T0start ( T0_1_s ) ; / / Encendemos e l temporizador .

while ( 1 ) ;

return 0 ;

/ / Cuando se cumpla e l tiempo , s a l t a la interrupciónvoid interrupt _ISR_TIMER0 ( void )

i f ( T0int ()== 1 )

/ / CÓDIGO ADICIONAL .

T0ClearInterruption ( ) ;T0InterruptionEnable ( ) ;T0start ( T0_1_s ) ;

Este pequeño trozo de código sería el encargado de configurar el temporizador 0por medio de interrupciones. Al utilizar interrupciones, a diferencia de utilizando lafunción _delay, podremos realizar cualquier función mientras el temporizador corre deforma que al cumplirse el tiempo deseado se ejecutará el código de la rutina de serviciode interrupción.

6.3 Gestor de arranque

El gestor de arranque, también conocido como bootloader se compone de dos partesfundamentales: el código del gestor de arranque y el programa para su gestión.

95

Page 106: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

• Código del gestor de arranque: El gestor de arranque se compone de un trozo decódigo, generalmente pequeño, que se graba en la base de la memoria flash delmicrocontrolador y nos permite enlazar el gestor de arranque del microcontrola-dor con el programa proporcionado por el creador del bootloader para su gestióndesde un ordenador convencional.

• Software de gestión: El creador del microcontrolador también ofrece a sus usua-rios un programa ejecutable en un ordenador convencional que permite la ges-tión del microcontrolador. El gestor de arranque de un microcontrolador seutiliza, generalmente, para programar el microcontrolador sin necesidad de nin-gún hardware adicional más que el cable USB. De esta manera, la depuración delos programas y su programación se realiza de una manera muy sencilla y rápida.

Para nuestro proyecto precisamos de un gestor de arranque que se caractericeprincipalmente por ser pequeño, funcional y gratuito, ya que esta plataforma se ofertacomo open source, cuyo desarrollo software es gratuito. Dentro de la oferta que sepuede encontrar en la red acerca de gestores de arranque para microcontroladores dela familia PIC18, destacan dos: el bootloader ds30Loader y el Tiny Multi Bootloader +.

• ds30 Loader[29]: Este gestor de arranque nos ofrece un sistema completo degestión de nuestro microcontrolador. Se trata de varios archivos de código, loscuales deben ser configurados específicamente para cada tipo de microcontrola-dor. Al analizar este bootloader detectamos dos puntos negativos que hicieronque esta opción no fuera la predilecta para ser integrada en nuestro proyecto.

Por un lado, la configuración del gestor es sumamente complicada y esto puedeser un problema si el utilitario de esta plataforma es una persona con unos co-nocimientos básicos de programación. A pesar de que la plataforma ya se ofertacon el gestor incluido, si no se tienen conocimientos superiores de programaciónsería realmente complicado que alguien pudiera configurar y grabar de nuevoel gestor de arranque en la plataforma en caso de que este sufra alguna compli-cación. En tal caso, el gestor de arranque debería ser instalado de nuevo y estodificulta la utilidad de la plataforma.

Por otro lado, este gestor ofrece una versión básica gratuita, pero determinadasfuncionalidades como comunicación CAN o USB requieren la adquisición de unpaquete específico con precios de entre 100 ey 500 e. Este el factor clave quelimitaría el uso de la plataforma si optásemos por este gestor.

• Tiny Multi Bootloader+[30]: Este bootloader acepta la mayoría de familias dePIC y se caracteriza por utilizar un trozo de código muy pequeño y ligero, peroque ofrece una buena gestión a la hora de programar nuestro microcontrolador.El factor que hizo que optásemos por esta opción es, sin duda, la sencillez deinstalación y de utilización.

96

Page 107: Diseño hardware y desarrollo de librerías para la

6.3. Gestor de arranque

6.3.1 Tiny Multi Bootloader+

Este gestor de arranque ha sido el que hemos elegido para integrar en nuestro microcon-trolador. Se trata de un código simple y ligero, además de ser fácilmente configurable.Solo ocupa 676 bytes de memoria y es totalmente funcional a la hora de programar elmicrocontrolador.

Los gestores de arranque se comunican con el microcontrolador mediante unprotocolo de comunicación en serie. Por tanto, tal y como se ha explicado en apartadosanteriores, para establecer una comunicación serie es necesario configurar el númerode señales por segundo que tendrá la comunicación, también conocido como baudrate, que en nuestro caso es de 19 200.

El proceso a seguir para la instalación del gestor de arranque se explica a continua-ción:

1. Descarga del gestor de arranque.

2. Búsqueda de la carpeta que incluye el modelo PIC18F25K80.

3. Utilizar el programa MPLAB y el dispositivo PICKIT para programar el archivocon la extensión .hex en el microcontrolador.

4. Utilizar el software ejecutable para gestionar la programación del microcontrola-dor desde un ordenador convencional.

En la siguiente sección se explicará todo el proceso de funcionamiento del programade gestión del bootloader. En la figura 6.2 podremos apreciar la interfaz de usuario dedicho programa separado en secciones de interés:

• Recuadro negro (1): Relativo a las acciones que podemos ejecutar desde lainterfaz.

• Recuadro marrón (2): Todas las opciones relacionadas con la comunicación ylos puertos USB.

• Recuadro naranja (3): Ejemplo de mensaje de detección del microcontroladorde la plataforma con toda la información detallada del mismo.

• Recuadro rojo (4): Ejemplo de mensaje de finalización de escritura de códigoen el microcontrolador.

• Recuadro azul (5): Casilla donde cargar el archivo con la extensión .hex quequeremos grabar en el microcontrolador.

97

Page 108: Diseño hardware y desarrollo de librerías para la

6. DESARROLLO SOFTWARE

Software de gestión

En la figura 6.2 podemos apreciar todos los apartados explicados en la sección anterior.En dicha figura se representa cada una de las partes en que se divide el programa degestión del bootloader.

Figura 6.2: Software de gestión del gestor de arranque.

• Write device: Esta función permite iniciar manualmente el grabado del códigodentro del microcontrolador. Una vez pulsado disponemos de unos pocos se-gundos para realizar un reset del microcontrolador para que este ejecute el trozode código relativo al gestor de arranque y se pueda establecer la conexión y elgrabado de información.

• Check device: Así como la opción Write device permite grabar código en el mi-crocontrolador, la opción Check device se encarga de detectar si hay un micro-controlador conectado en el puerto USB que, en nuestro caso, se trata del puertoCOM3 (esta opción puede variar dependiendo del ordenador utilizado).

• Auto conf COM: Esta opción realiza un barrido de baud rates a fin de encontrarde forma automática el valor adecuado que permite la conexión de la placa conel software de gestión. Es importante destacar que a medida que el programarealiza el barrido de valores hay que ir pulsando periódicamente el botón dereset de la plataforma, ya que si no se pulsa, el microcontrolador no ejecuta el

98

Page 109: Diseño hardware y desarrollo de librerías para la

6.3. Gestor de arranque

código del gestor de arranque y el programa de gestión no puede localizar el valorcorrecto.

• Baud rate: Esta opción nos permite configurar manualmente el valor deseadode baud rate.

• Search COM: Este cuadro nos muestra continuamente los puertos que estánsiendo utilizados por el ordenador y que tienen un dispositivo conectado. Ennuestro caso se puede observar como solo tenemos conectada al ordenador laplataforma, por lo que solo nos aparece el puerto COM3.

Una vez configurados todos los parámetros, tal y como se ha explicado en la sec-ción anterior del capítulo, los pasos a seguir para grabar un archivo de código en elmicrocontrolador serían los siguientes:

1. Conectar la plataforma al ordenador y comprobar que los drivers del puerto COMse instalan correctamente.

2. Comprobar que, una vez pulsado el botón Search COM, el puerto de nuestraplataforma aparece en la ventana inferior.

3. Una vez seleccionado el puerto correspondiente a la plataforma, debemos com-probar que se establece la conexión correctamente entre el programa gestory el código del bootloader del microcontrolador. Para ello, pulsamos en Checkdevice y realizamos un reset de la plataforma hasta ver el mensaje que apareceencuadrado en color rojo (4) en la figura 6.2.

4. Cuando el programa gestor detecte el microcontrolador, debemos pulsar en laopción de Browse para elegir el archivo con la extensión .hex que queremosgrabar en el microcontrolador.

5. Ahora ya estamos listos para grabar el código en el microcontrolador. Para ello,debemos pulsar en la opción Write device, realizar un reset de la plataforma yesperar a que se complete el grabado de información.

Una vez realizados todos estos pasos de forma correcta obtendremos una configu-ración idónea para ser capaces de programar nuestro microcontrolador conectándoloa un ordenador mediante un cable USB. Esto nos ofrece un camino rápido y sencillode programación que agiliza enormemente el proceso de depuración de un sistemaelectrónico.

99

Page 110: Diseño hardware y desarrollo de librerías para la
Page 111: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

7CONCLUSIÓN: PLATAFORMA FINAL

En este capítulo vamos a realizar una exposición de toda la información relativa a laplataforma finalizada, así como la comparativa final con la plataforma de referenciaArduino UNO.

7.0.1 Información técnica

Figura 7.1: Plataforma final.

En esta sección vamos a realizar un análisis finalde la plataforma que hemos desarrollado en esteproyecto. Para ello, vamos a exponer toda la es-tructura física de la plataforma desde un punto devista visual en relación a la estructura de los pinesdel microcontrolador. Todo esto, acompañado delcuadro informativo 5.8, que podemos encontraren el capítulo de desarrollo hardware y al cual po-demos acceder desde el índice de cuadros de lapágina V, nos va a proporcionar toda la informa-ción necesaria para utilizar la plataforma de forma

satisfactoria y para poder detectar de una forma rápida y sencilla qué cabezal de laplaca se corresponde con qué pin del microcontrolador.

101

Page 112: Diseño hardware y desarrollo de librerías para la

7. CONCLUSIÓN: PLATAFORMA FINAL

Figura 7.2: Relación de los cabezales de la plataforma con los pines del MCU.

102

Page 113: Diseño hardware y desarrollo de librerías para la

7.0.2 Comparativa final

En esta sección vamos a exponer un cuadro explicativo de cada uno de los aspectos deesta plataforma en relación a la plataforma que ha servido de base para el desarrollo delproyecto: Arduino UNO. Las diferencias entre ambas plataformas se pueden apreciarde forma resaltada en el cuadro 7.1.

Placa Arduino UNO Plataforma PIC

MCU ATmega328P PIC18F25K80Arquitectura 8-bit 8-bitUART-to-USB ATmega16u2 FT232RLVoltaje de operación 5 V 5 VBootloader ArduinoBT Tiny Multi Bootloader+Conector USB USB 2.0 Type-B USB 2.0 Mini-BPines digitales 14 14Pines analógicos 6 6Salidas PWM 6 4M.FLASH 32 KB 32 KBM.RAM 2 KB 3,6 KBM.EEPROM 1 KB 1 KBReloj 16 MHz 16 MHzADC 1 x 6CH, 10-bit 1 x 8CH, 12-bitPWM SI SICAN NO CAN 2.0BComparadores SI SIUSART 1 módulo 2 módulosSPI SI SII2C SI SI

Cuadro 7.1: Tabla de comparativa: ATmega328P y PIC18F25K80.

Como podemos observar, nuestra plataforma reúne unas características parecidasa la plataforma de Arduino con la diferencia de poseer más memoria RAM y disponerde un módulo CAN 2.0. Por tanto, se puede afirmar que el proyecto ha sido realizadocon éxito y que la plataforma resultante responde perfectamente a los requisitos pre-vios estipulados, ya que no solo abre una puerta alternativa en el mundo del diseñoelectrónico mundial, sino que mejora características importantes de su competidora.

103

Page 114: Diseño hardware y desarrollo de librerías para la
Page 115: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

8ANEXO I: PRUEBAS REALIZADAS

8.1 Parpadeo de led con selección de frecuencia

En esta prueba se van a utilizar las siguientes librerías:

• IODigital: Librería de entrada y salida digital.

• UART: Librería del módulo de comunicación serie UART.

• T0: Librería del temporizador 0.

En este caso, vamos a programar el microcontrolador para que realice el siguienteprograma:

1. Disponemos de un led conectado al pin digital 0 de la plataforma. Cuando dichopin se configure con un valor alto de tensión, el led se encenderá y, en casocontrario, se apagará.

2. Tenemos a nuestra disposición tres botones de configuración que se correspon-den con las teclas: A, S y D.

• La tecla A: configura la frecuencia a 50 ms.

• La tecla S: configura la frecuencia a 500 ms.

• La tecla D: configura la frecuencia a 1 s.

3. A partir del terminal serie del ordenador podemos pulsar cualquiera de las tresteclas, el microcontrolador reconoce dichas letras y cambiará la frecuencia deparpadeo del led.

105

Page 116: Diseño hardware y desarrollo de librerías para la

8. ANEXO I: PRUEBAS REALIZADAS

CÓDIGO UTILIZADO

#include <p18f25k80 . h>#include "T0 . h"#include " IODigital . h"#include "UART. h"#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia del MCU.#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración del MCU.v o l a t i l e unsigned char setup = ’ a ’ ;

int main ( ) T0init (_PSC_DEFAULT ) ; / / I n i c i a l i z a c i ó n del temporizador 0 .initDIG ( _DigPIN0 , _OPUT) ; / / Pin 0 como salida .initUART ( _BR_19200 , _8BIT ) ; / / Baud rate a 19200.T0ClearInterruption ( ) ; / / Configuración de interrupciones .T0InterruptionEnable ( ) ; / / Activar interrupciones .T0start ( T0_50_ms ) ; / / Encender e l temporizador a 50 ms.

while ( 1 ) / / Cuando recibimos carácter por UART.while ( ! DataReceivedUART ( ) ) ;setup = ReadUART ( ) ;

return 0 ;

void interrupt _ISR_TIMER0 ( void )

i f ( T0int ()== 1 ) ToogleDIG ( _DigPIN0 ) ; / / Parpadea e l pin d i g i t a l .T0ClearInterruption ( ) ; / / Limpia interrupción .T0InterruptionEnable ( ) ; / / Activa interrupciónswitch ( setup ) / / Configura la frecuencia del led .

case ’ a ’ :/ / Configurar a 50 ms.T0start ( T0_50_ms ) ;break ;

case ’ s ’ :/ / Configurar a 500 ms.T0start ( T0_500_ms ) ;break ;

case ’d ’ :/ / Configurar a 1 s .T0start ( T0_1_s ) ;break ;

106

Page 117: Diseño hardware y desarrollo de librerías para la

8.1. Parpadeo de led con selección de frecuencia

Figura 8.1: Parpadeo de led con selección de frecuencia.

107

Page 118: Diseño hardware y desarrollo de librerías para la

8. ANEXO I: PRUEBAS REALIZADAS

8.2 Comprobación de potencia

En esta prueba no se utiliza ninguna librería ni ningún código de programación, puessolo se trata de comprobar que la alimentación de la placa es correcta en sus modos deoperación. Además, se comprueba que los dos reguladores de tensión son capaces deconvertir la tensión proveniente de una fuente externa.

Cabe comentar que el modo de alimentación por USB no se ha documentado enesta prueba puesto que en las demás pruebas realizadas se utiliza dicho puerto, portanto la alimentación por USB queda comprobada de manera intrínseca en las demáspruebas.

En ambos casos, se puede apreciar como la alimentación es de 7,5 V y las salidas secorresponden con cada uno de los reguladores integrados en la placa.

De esta prueba hemos sacado una conclusión importante para el buen funciona-miento de la plataforma: el voltaje mínimo de alimentación para obtener una salida de5 V en su respectivo regulador debe ser de 7 V. Con menos voltaje, la alimentación de laplataforma se ve alterada.

8.2.1 Regulador a 5 V

Figura 8.2: Alimentación externa de 7,5 V y alimentación de placa de 5 V.

108

Page 119: Diseño hardware y desarrollo de librerías para la

8.2. Comprobación de potencia

8.2.2 Regulador a 3,3 V

Figura 8.3: Alimentación externa de 7,5 V y alimentación de placa de 3,3 V.

109

Page 120: Diseño hardware y desarrollo de librerías para la

8. ANEXO I: PRUEBAS REALIZADAS

8.3 Salida de voltaje a partir del módulo PWM

En esta prueba se van a utilizar las siguientes librerías:

• PWM: Librería del módulo PWM-Pulse Width Modulation.

• T0: Librería del temporizador 0.

En este caso, vamos a programar el microcontrolador para que realice el siguienteprograma:

1. Tenemos el temporizador programado para que se produzca una interrupcióncada 50 ms. De esta manera, cada 50 ms se ejecutará el código programa en larutina de servicio de interrupción, también conocido por sus siglas en inglés SRI.

2. El voltaje de salida tendrá un valor mínimo de 0 V correspondientes a la referenciade tierra, y un valor máximo de 5 V correspondientes a la alimentación de la placa.

3. El registro del ciclo de trabajo de la señal tiene 255 valores posibles, de maneraque el valor 0 se corresponde a 0 V, y el valor 255 se corresponde a 5 V.

4. Cada vez que se ejecuta la SRI, el valor del registro de trabajo se incremente enuna unidad, de forma que en voltímetro podremos observar como el voltaje vacreciendo progresivamente de 0 V a 5 V.

110

Page 121: Diseño hardware y desarrollo de librerías para la

8.3. Salida de voltaje a partir del módulo PWM

CÓDIGO UTILIZADO:

#include <p18f25k80 . h>#include "T0 . h"#include "PWM. h"#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia del MCU.#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración del MCU.v o l a t i l e unsigned int ct = 0 ;

int main ( ) T0init (_PSC_DEFAULT ) ; / / I n i c i a l i z a c i ó n del temporizador 0 .initPWM( ct ) ; / / I n i c i a l i z a c i ó n del módulo PWM.T0ClearInterruption ( ) ; / / Configuración de interrupciones .T0InterruptionEnable ( ) ; / / Activar interrupciones .T0start ( T0_50_ms ) ; / / Encender e l temporizador a 50 ms.

while ( 1 ) / / Cuando l l e g u e al f inal , que vuelva a empezar .i f ( ct == 255) ct = 0 ;/ / Actualizamos e l valor .initPWM( ct ) ;

return 0 ;

void interrupt _ISR_TIMER0 ( void )

i f ( T0int ()== 1 ) ct ++; / / Incrementamos e l c i c l o de trabajo ./ / Configuramos interrupciones .T0ClearInterruption ( ) ;T0InterruptionEnable ( ) ;T0start ( T0_50_ms ) ; / / Encender e l temporizador a 1 s .

111

Page 122: Diseño hardware y desarrollo de librerías para la

8. ANEXO I: PRUEBAS REALIZADAS

Figura 8.4: Proceso seguido por el módulo PWM en su progreso de 0 V a 5 V.

8.4 Lectura de entrada analógica a partir del módulo ADC

En esta prueba se van a utilizar las siguientes librerías:

• ADC: Librería del módulo ADC-Analogic to Digital Converter.

• UART: Librería del módulo de comunicación serie UART.

• T0: Librería del temporizador 0.

En este caso, vamos a programar el microcontrolador para que realice el siguienteprograma:

112

Page 123: Diseño hardware y desarrollo de librerías para la

8.4. Lectura de entrada analógica a partir del módulo ADC

1. A partir de una fuente de alimentación vamos a alimentar un pin de entradaanalógica del microcontrolador, el cual podrá ser graduado mediante la propiafuente.

2. El microcontrolador convertirá dicho valor analógico de voltaje en un códigobinario de 12 bits.

3. A partir de ese valor binario, calcularemos el valor analógico correspondiente,y mandaremos un mensaje mediante el módulo UART hacia el ordenador parapoder monitorizar dicho valor utilizando un terminal de datos en serie.

Figura 8.5: Visualización por el terminal de datos de los valores analógicos de entrada.

113

Page 124: Diseño hardware y desarrollo de librerías para la

8. ANEXO I: PRUEBAS REALIZADAS

CÓDIGO UTILIZADO:

#include <p18f25k80 . h>#include "UART. h"#include "T0 . h"#include "ADC. h"#define _XTAL_FREQ 16000000 / / Configuración de la frecuencia del MCU.#pragma config FOSC = INTIO2 , SOSCSEL = DIG / / Configuración del MCU.v o l a t i l e unsigned char data [ 8 0 ] ;

int main ( )

int x ;f l o a t resultado ;

initUART ( _BR_19200 , _8BIT ) ; / / I n i c i a l i z a c i ó n del módulo UART.T0init (_PSC_DEFAULT ) ; / / I n i c i a l i z a c i ó n del temporizador 0 .initADC (_CH1, _Vref_P_Vdd , _Vref_M_GND ) ; / / I n i c i a l i z a c i ó n del módulo ADC.

T0ClearInterruption ( ) ; / / Configuración de interrupciones .T0InterruptionEnable ( ) ;T0start ( T0_1_s ) ; / / Encender e l temporizador 0 .

OnADC( ) ; / / Encender e l módulo ADC.while ( 1 )

StartADC ( ) ; / / Empezar conversiónwhile (BusyADC ( ) ) ; / / Esperar hasta que f i n a l i c e .x = GetValueADC ( ) ; / / Obtener valor d i g i t a l .resultado = ( x / 8 1 4 . 3 1 ) ; / / Convertirlo a valor de tensión .s p r i n t f ( data , " Valor ADC: %f \n " , resultado ) ;

return 0 ;

void interrupt _ISR_TIMER0 ( void ) i f ( T0int ()== 1 )

PutsUART( data ) ; / / Imprimir por pantalla cada segundo .T0ClearInterruption ( ) ;T0InterruptionEnable ( ) ;T0start ( T0_1_s ) ;

114

Page 125: Diseño hardware y desarrollo de librerías para la

8.4. Lectura de entrada analógica a partir del módulo ADC

Análisis de las pruebas

Como conclusión cabe señalar que no se ha realizado ninguna prueba específica de laslibrerías del módulo UART y la del temporizador. Esto se debe a que dentro de estascuatro pruebas utilizamos varias veces dichas librerías, por lo que su funcionamientoqueda constatado en ellas. Además, es importante hacer uso de los vídeos demostra-tivos que se incluyen con el proyecto para poder ver el funcionamiento completo decada una de las pruebas.

El resultado de las pruebas ha sido totalmente satisfactorio y no se ha tenido ningúnproblema en cuanto al funcionamiento de módulos o de comunicación. El gestor dearranque no ha dado ningún fallo en el gran número de veces que ha sido el encargadode programar el microcontrolador, y todos los cabezales de la plataforma, así como losmodos de alimentación han funcionado a la perfección.

115

Page 126: Diseño hardware y desarrollo de librerías para la
Page 127: Diseño hardware y desarrollo de librerías para la

CA

TU

LO

9ACRÓNIMOS

• Hardware: Parte física de un sistema computacional.

• Software: Parte lógica de un sistema computacional.

• Maker Movement: Movimiento creador.

• I+D+i: Investigación + Desarrollo + Innovación.

• DIY: Do It Yourself - Hazlo tú mismo.

• Smartphone: Teléfono inteligente, dispositivo común hoy día.

• Open source: Código abierto gratuito.

• Feedback: Retroalimentación.

• Low cost: Bajo coste.

• PIC: Periphereal Interface Controller - Interfaz de control de periféricos.

• 3D: 3 dimensiones.

• SBC: Single Board Computer - Ordenador de placa reducida.

• RAM: Random Access Memory - Memoria de acceso aleatorio.

• ROM: Read-Only Memory - Memoria solo de lectura.

• EEPROM: Electrically Erasable Programmable ROM - ROM eléctricamente bo-rrable.

• HEF: High Endurance Flash - Versión flash de la memoria ROM.

• SD: Secure Digital - Formato de tarjetas de memoria.

117

Page 128: Diseño hardware y desarrollo de librerías para la

9. ACRÓNIMOS

• HDMI: High Definition Multimedia Interface - Conector de alta definición.

• Wi-Fi: Conexión a internet inalámbrica.

• Ethernet: Conexión de área local.

• RJ45: Cable ethernet.

• RS232: Cable para comunicación serie.

• USB: Universal Serial Bus - Protocolo de comunicación serie universal.

• UART: Universal Asynchronous Receiver-Transmitter - Protocolo de comunica-ción serie no sincronizado.

• USART: Universal Sychronous-Asynchronous Receiver-Transmitter - Protocolode comunicación serie sincronizado y no sincronizado.

• ICSP: In-Circuit Serial Programming - Sistema de programación de microcon-troladores.

• I2C: Inter-Integrated Circuit - Protocolo de comunicación.

• CAN: Controller Area Network - Protocolo de red en forma de bus.

• ADC: Analogic to Digital Converter - Convertidor de analógico a digital.

• PWM: Pulse Width Modulation - Modulación por ancho de pulsos.

• LDO: Low Drop-Out - Regulador de tensión.

• Memoria Flash: Memoria ultra rápida.

• MAC OS X: Sistema operativo de Apple.

• Data sheet: Dosier de información de un dispositivo.

• Bootloader: Gestor de arranque de un microcontrolador.

• Reset: Volver a iniciar un dispositivo.

• CPU: Central Processing Unit - Unidad central de procesamiento.

• MCU: Microcontrolador.

• LED: Light-Emitting Diode - Dispositivo luminoso.

• CAD: Computer-Aided Design - Diseño asistido por computador.

• PCB: Printed Circuit Board - Placa de circuito impreso.

• .SCH Schematic Diagram - Diagrama esquemático.

• .BRD Board Diagram - Diagrama de placa.

• AO: Dispositivo: amplificador operacional.

118

Page 129: Diseño hardware y desarrollo de librerías para la

• PPS: Periphereal Pin Select - Selección de pines periféricos.

• Bit: Unidad mínima de información.

• Byte: Unidad mínima de almacenamiento. 8-bit.

• Bug: Fallo de un sistema.

• Shield: Dispositivo que se puede acoplar a una plataforma.

• Chip: Circuito integrado o encapsulado.

119

Page 130: Diseño hardware y desarrollo de librerías para la
Page 131: Diseño hardware y desarrollo de librerías para la

BIBLIOGRAFÍA

[1] Arduinodhtics, “Arduino: tecnología para todos,” 2016. [Online]. Available:http://arduinodhtics.weebly.com/historia.html 2

[2] MSN, “Historia, antepasados y visiones del movimiento maker,” 2015. [Online].Available: http://makespacemadrid.org/wp-content/uploads/2015/09/MSM03_historia.pdf 1.1

[3] Wikipedia, “Hágalo usted mismo,” 2016. [Online]. Available: http://tinyurl.com/btw88ov 1.1

[4] ——, “Crowdsourcing,” 2016. [Online]. Available: https://es.wikipedia.org/wiki/Crowdsourcing 1.1

[5] Opensource, “What is open source?” 2016. [Online]. Available: https://opensource.com/resources/what-open-source 1.2

[6] Microchip, “Pic microcontrollers,” 2016. [Online]. Available: http://www.microchip.com/design-centers/microcontrollers/ 1.2

[7] Microcontroladoressesv, “Microcontroladores pic y sus variantes,”2016. [Online]. Available: https://microcontroladoressesv.wordpress.com/microcontroladores-pic-y-sus-variedades/ 1.2

[8] Arduino, “Genuino products,” 2016. [Online]. Available: https://store.arduino.cc/category/83 2

[9] Wikipedia, “Raspberry pi,” 2016. [Online]. Available: https://es.wikipedia.org/wiki/Raspberry_Pi 2

[10] ——, “Beagleboard,” 2016. [Online]. Available: https://es.wikipedia.org/wiki/BeagleBoard 2

[11] Minnowboard, “Minnow board max,” 2016. [Online]. Available: http://wiki.minnowboard.org/MinnowBoard_MAX 2

[12] Nanode, “What is nanode,” 2016. [Online]. Available: http://www.nanode.eu/what-is-nanode/ 2

[13] Arduino, “Arduino forum,” 2016. [Online]. Available: https://forum.arduino.cc/2.1

121

Page 132: Diseño hardware y desarrollo de librerías para la

BIBLIOGRAFÍA

[14] D. S. V. Jiménez, E. V. R. Espinosa, and J. E. O. Foliaco, “Alternativas para la deteccióny monitoreo de amenazas sísmicas basadas en arduino,” Ingenierías USBmed,vol. 4, no. 2, pp. 45–54, 2015. 2.2

[15] K. E. L. JIMÉNEZ and L. E. C. J. MI, “Desarrollo de un prototipo controlador paraun sistema domótico por medio de una pantalla tft touch shield v2. 0 y arduino.”2.2

[16] F. Jaramillo-Gómez, A. Á. Gómez-Yepes et al., “Sistema de control para la estabi-lidad y orientación de un helicóptero quadrotor,” Ph.D. dissertation, Escuela deIngenieria de Antioquia, 2014. 2.2

[17] F. J. Alventosa Rueda, “Vehículo submarino no tripulado de bajo coste para ins-pección oceanográfica,” Ph.D. dissertation, 2015. 2.2

[18] J. A. Figueroa Sarcos, “Prototipo de robot semiautónomo especializado en fumiga-ción agrícola bajo la tecnología arduino.” 2015. 2.2

[19] C. Tapia and H. Manzano, “Evaluación de la plataforma arduino e implementa-ción de un sistema de control de posición horizontal,” oct-2013.[En línea]. Dispo-nible en: http://dspace. ups. edu. ec/bitstream/123456789/5522/1/UPS-GT000511.pdf.[Accedido: 25-oct-2015], 2013. 2.2

[20] Wikipedia, “Microcontrolador,” 2016. [Online]. Available: https://es.wikipedia.org/wiki/Microcontrolador 3.1.1

[21] ——, “Microprocesador,” 2016. [Online]. Available: https://es.wikipedia.org/wiki/Microprocesador 3.1.1

[22] gmatarrubia, “Puertos y buses 1: I2c y uart,” 2015. [Online]. Available:https://geekytheory.com/puertos-y-buses-1-i2c-y-uart/ 3.1.2

[23] Á. D. Manuel Cabeza, Priscilla Cruz, “Protocolo usb aplicado a placas conmicrocontroladores,” 2016. [Online]. Available: http://server-die.alc.upv.es/asignaturas/lsed/2003-04/0.USB/lsed/final.pdf 3.1.2

[24] Arduino, “Entry level and enhanced level products,” 2016. [Online]. Available:https://www.arduino.cc/en/Main/Products 3.1.3

[25] ——, “Arduino libraries,” 2016. [Online]. Available: https://www.arduino.cc/en/Reference/Libraries 3.2.4

[26] ——, “Arduino uno (introducción, aspectos técnicos y documentación),” 2016.[Online]. Available: https://www.arduino.cc/en/Main/ArduinoBoardUno 4

[27] M. T. Incorporated, “An introduction to mplab integrated developmentenvironment,” 2004. [Online]. Available: http://digsys.upc.es/sed/SED/unitats/unitat_2_4/IntroToMPLAB_033004.pdf 6.1

[28] Microchip, “Pic18f66k80 family,” 2010-2012. [Online]. Available: http://ww1.microchip.com/downloads/en/DeviceDoc/39977f.pdf 6.2

122

Page 133: Diseño hardware y desarrollo de librerías para la

Bibliografía

[29] M. Gustavsson, “ds30 loader,” 2007. [Online]. Available: http://www.ds30loader.com/index.php 6.3

[30] Dan, “Tiny multi bootloader+,” 2007. [Online]. Available: tinypicbootload.sourceforge.net/ 6.3

123