que es el voltaje parte 3

JUANROMERO
Avanzado
Mensajes: 450
Registrado: Dom Jun 02, 2019 5:56 pm

que es el voltaje parte 3

Mensaje por JUANROMERO » Lun Jun 10, 2019 7:18 pm

ARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Tenemos que imaginar que la flecha central del símbolo del potenciómetro se
moverá desde un extremo hasta el otro de ese símbolo según giremos la rosca del
potenciómetro. Tal como está dibujado el esquema anterior, si la flecha se “sitúa” en
el extremo derecho del símbolo, el potenciómetro funcionará con su valor de
resistencia máximo; si la flecha se “sitúa” en el extremo izquierdo, el potenciómetro
no ofrecerá resistencia alguna.
Este último hecho es la causa de haber añadido una resistencia entre el LED y
el potenciómetro: si en algún momento ajustáramos el potenciómetro a cero, ¡no
habría ninguna resistencia en el circuito!, y esto dañaría irreversiblemente el LED
porque recibiría demasiada intensidad de corriente. Por tanto, la resistencia adicional
mantiene un valor mínimo que no es rebajado nunca.
Finalmente, y por otro lado, si se desea alimentar un circuito montado sobre
una breadboard mediante un adaptador AC/DC en vez de con pilas/baterías (tal como
se ha mostrado en los ejemplos anteriores), podemos hacer uso de unas pequeñas
plaquitas especialmente pensadas para ser conectadas por un lado a la clavija de
5,5/2,1 mm de dicho adaptador (gracias al zócalo pertinente que incorporan) y por
otro a la breadboard. Además, estas plaquitas contienen un regulador de voltaje
propio que permite adaptar la tensión recibida del adaptador a tensiones rebajadas y
estables (generalmente de 5 V o 3,3 V), más adecuadas para el tipo de circuitos que
generalmente se montan en una breadboard. Ejemplos de estas plaquitas (de entre
muchas otras disponibles en los distintos distribuidores mencionados en el apéndice
A) son el producto no 184 de Adafruit, el no 114 (o también el no 10804) de Sparkfun,
el llamado “5 V/3,3 V Breadboard DC-DC Power Supply” (y también el “5V
Breadboard USB Power Supply”, el cual incluye además un zócalo USB mini-B para
recibir alimentación también por allí) de Akafugu o el “Breadboard Power Supply
Module” de IteadStudio (también con zócalo USB mini-B). En todo caso, se
recomienda consultar la documentación oficial de cada producto para conocer de
forma exhaustiva sus funcionalidades y limitaciones.
56
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 1: ELECTRÓNICA BÁSICA
USO DE UN MULTÍMETRO DIGITAL
El multímetro digital es un instrumento que sirve para medir alguna de las
tres magnitudes relacionadas por la Ley de Ohm: o bien el voltaje existente entre dos
puntos de un circuito, o bien la intensidad de corriente que fluye a través de él, o bien
la resistencia que ofrece cierto componente. Dependiendo del modelo, también hay
multímetros que pueden medir otras magnitudes como la capacidad de los
condensadores, y más. Es decir, es una herramienta que nos permite comprobar el
correcto funcionamiento de los componentes y circuitos electrónicos, por lo que es
fundamental tenerla a mano cuando realicemos nuestros proyectos.
Existen muchos modelos diferentes de multímetros
digitales, por lo que es importante leer el manual de
instrucciones del fabricante para asegurar el buen
funcionamiento del instrumento. Un ejemplo puede ser el
producto no 9141 de Sparkfun. De todas formas, aunque
dependiendo del modelo puedan cambiar la posición de
sus elementos y la cantidad de funciones, en general
podemos identificar las partes y funciones estándar de un
multímetro genérico como las siguientes:
Botón de “power” (apagado-encendido): la mayoría de
multímetros son alimentados mediante pilas.
Display: pantalla de cristal líquido en donde se mostrarán
los resultados de las mediciones.
Llave selectora: sirve para elegir el tipo de magnitud a medir y el rango de
medición. Los símbolos que la rodean indican el tipo de magnitud a medir, y
los más comunes son el voltaje directo (V-) y alterno (V~), la corriente directa
(A-) y alterna (A~), la resistencia (Ω), la capacidad (F) o la frecuencia (Hz). Los
números que rodean la llave indican el rango de medición. Para entender
esto último, supongamos que los números posibles para el voltaje continuo
son por ejemplo “200 mV” ,”2 V”,”20 V” y “200 V”; esto querrá decir que en
la posición “200 mV” se podrán medir voltajes desde 0 hasta este valor como
máximo; en la posición “2 V” se podrán medir voltajes superiores a 200mV
pero inferiores a 2 V; en la posición “20 V” se podrán medir voltajes
superiores a 2 V pero inferiores 20 V, y así, mostrándose en el display los
valores numéricos medidos de acuerdo a la escala elegida.
57
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Cables rojo y negro con punta: el cable negro siempre se conectará al zócalo
negro del multímetro (solo existe uno, y generalmente está señalado con la
palabra “COM” –de “referencia COMún” –), mientras que el cable rojo se
conectará al zócalo rojo adecuado según la magnitud que se quiera medir (ya
que hay varios): si se quiere medir voltaje, resistencia o frecuencia (tanto en
continua como en alterna), se deberá conectar el cable rojo al zócalo rojo
marcado normalmente con el símbolo “+VΩHz” ; si se quiere medir
intensidad de corriente (tanto en continua como en alterna), se deberá
conectar el cable rojo al zócalo rojo marcado con el símbolo “mA” o bien “A”,
dependiendo del rango a medir.
Una vez conocidas las partes funcionales de esta herramienta, la podemos
utilizar para realizar diferentes medidas:
Para medir el voltaje (continuo) existente entre dos puntos de un circuito
alimentado, deberemos conectar los cables convenientemente al multímetro
para colocar seguidamente la punta del cable negro en un punto del circuito y
la del cable rojo en el otro (de tal forma que en realidad estemos realizando
una conexión en paralelo con dicho circuito). Seguidamente, moveremos la
llave selectora al símbolo V- y elegiremos el rango de medición adecuado. Si
este lo desconocemos, lo que podemos hacer es empezar por el rango más
elevado e ir bajando paso a paso para obtener finalmente la precisión
deseada. Si bajamos más de la cuenta (es decir, si el valor a medir es mayor
que el rango elegido), lo sabremos porque a la izquierda del display se
mostrará el valor especial “1”.
También podemos utilizar la posibilidad ofrecida por el multímetro de medir
voltaje continuo para conocer la diferencia de potencial generada por una
determinada fuente de alimentación (y así saber en el caso de una pila, por ejemplo,
si está gastada o no). En este caso, deberíamos colocar la punta del cable rojo en el
borne positivo de la pila y el negro en el negativo y proceder de la misma manera,
seleccionando la magnitud y rango a medir.
Para medir la resistencia de un componente, debemos mantener
desconectado dicho componente para que no reciba corriente de ningún
circuito. El procedimiento para medir una resistencia es bastante similar al de
medir tensiones: basta con conectar cada terminal del componente a los
cables del multímetro (si el componente tiene polaridad, como es el caso de
los diodos y de algunos condensadores, el cable rojo se ha de conectar al
terminal positivo del componente y el negro al negativo; si el componente no
58
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 1: ELECTRÓNICA BÁSICA
tiene polaridad, esto es indiferente) y colocar el selector en la posición de
ohmios y en la escala apropiada al tamaño de la resistencia que se desea
medir. Si no sabemos aproximadamente el rango de la resistencia a medir,
empezaremos colocando la ruleta en la escala más grande, e iremos
reduciendo la escala hasta que encontremos la que más precisión nos dé sin
salirnos de rango. Igualmente, si la escala elegida resulta ser menor que el
valor a medir, el display indicará “1” a su izquierda; en ese caso, por tanto,
habrá que ir subiendo de rango hasta encontrar el correcto.
Para medir la intensidad que fluye por un circuito, hay que conectar el
multímetro en serie con el circuito en cuestión. Por eso, para medir
intensidades tendremos que abrir el circuito para intercalar el multímetro en
medio, con el propósito de que la intensidad circule por su interior.
Concretamente, el proceso a seguir es: insertar el cable rojo en el zócalo
adecuado (mA o A según la cantidad de corriente a medir) y el cable negro en
el zócalo negro, empalmar cada cable del multímetro en cada uno de los dos
extremos del circuito abierto que tengamos (cerrándolo así, por lo tanto) y
ajustar el selector a la magnitud y rango adecuados.
Idealmente, el multímetro funcionando como medidor de corriente tiene una
resistencia nula al paso de la corriente a través de él (precisamente para evitar
alteraciones en la medida del valor de la intensidad real), por lo que está
relativamente desprotegido de intensidades muy elevadas y pueda dañarse con
facilidad. Hay que tener siempre en cuenta por tanto el máximo de corriente que
puede soportar, el cual lo ha de indicar el fabricante (además del tiempo máximo que
puede estar funcionando en este modo).
Para medir la capacidad de un condensador, también podemos utilizar la
mayoría de multímetros digitales del mercado. Tan solo tendremos que
conectar las patillas del condensador a unos zócalos especiales para ello,
marcados con la marca ”CX”. Los condensadores deben estar descargados
antes de conectarlos a dichos zócalos. Para los condensadores que tengan
polaridad habrá que identificar el zócalo correspondiente a cada polo en el
manual del fabricante.
Para medir continuidad (es decir para comprobar si dos puntos de un circuito
están eléctricamente conectados), simplemente se debe ajustar el selector en
la posición marcada con el signo de una “onda de audio” y conectar los dos
cables a cada punto a medir (no importa la polaridad). Atención: este modo
solo se puede utilizar cuando el circuito a medir no está recibiendo
59
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
alimentación eléctrica. Si hay continuidad, el multímetro emitirá un sonido
(gracias a un zumbador que lleva incorporado); si no, no se escuchará nada.
También se puede observar lo que muestra el display según el caso, pero el
mensaje concreto depende del modelo, así que se recomienda consultar las
instrucciones de cada aparato en particular.
Una aplicación práctica del multímetro funcionando como medidor de
continuidad es la comprobación de qué agujeros de una breadboard pertenecientes
al mismo nodo mantienen su conectividad, ya que después de un uso continuado es
relativamente fácil que esta se estropee.
60
© Alfaomega-RC Libros
www.FreeLibros.me*¿Qué es un sistema electrónico?
HARDWARE ARDUINO
¿QUÉ ES UN SISTEMA ELECTRÓNICO?
Un sistema electrónico es un conjunto de: sensores, circuitería de
procesamiento y control, actuadores y fuente de alimentación.
Los sensores obtienen información del mundo físico externo y la transforman
en una señal eléctrica que puede ser manipulada por la circuitería interna de control.
Existen sensores de todo tipo: de temperatura, de humedad, de movimiento, de
sonido (micrófonos), etc.
Los circuitos internos de un sistema electrónico procesan la señal eléctrica
convenientemente. La manipulación de dicha señal dependerá tanto del diseño de
los diferentes componentes hardware del sistema, como del conjunto lógico de
instrucciones (es decir, del “programa”) que dicho hardware tenga pregrabado y que
sea capaz de ejecutar de forma autónoma.
Los actuadores transforman la señal eléctrica acabada de procesar por la
circuitería interna en energía que actúa directamente sobre el mundo físico externo.
Ejemplos de actuadores son: un motor (energía mecánica), una bombilla (energía
lumínica), un altavoz (energía acústica), etc.
La fuente de alimentación proporciona la energía necesaria para que se
pueda realizar todo el proceso descrito de “obtención de información del medio <->
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
procesamiento <-> actuación sobre el medio”. Ejemplos de fuentes son las pilas,
baterías, adaptadores AC/DC, etc.
¿QUÉ ES UN MICROCONTROLADOR?
Un microcontrolador es un circuito integrado o “chip” (es decir, un
dispositivo electrónico que integra en un solo encapsulado un gran número de
componentes) que tiene la característica de ser programable. Es decir, que es capaz
de ejecutar de forma autónoma una serie de instrucciones previamente definidas por
nosotros. En el diagrama anterior, representativo de un sistema electrónico, el
microcontrolador sería el componente principal de la circuitería de procesamiento y
control.
Por definición, un microcontrolador (también llamado comúnmente “micro”)
ha de incluir en su interior tres elementos básicos:
CPU (Unidad Central de Proceso): es la parte encargada de ejecutar cada
instrucción y de controlar que dicha ejecución se realice correctamente.
Normalmente, estas instrucciones hacen uso de datos disponibles
previamente (los “datos de entrada”), y generan como resultado otros datos
diferentes (los “datos de salida”), que podrán ser utilizados (o no) por la
siguiente instrucción.
Diferentes tipos de memorias: son en general las encargadas de alojar tanto
las instrucciones como los diferentes datos que estas necesitan. De esta
manera posibilitan que toda esta información (instrucciones y datos) esté
siempre disponible para que la CPU pueda acceder y trabajar con ella en
62
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
cualquier momento. Generalmente encontraremos dos tipos de memorias:
las que su contenido se almacena de forma permanente incluso tras cortes
de alimentación eléctrica (llamadas “persistentes”), y las que su contenido se
pierde al dejar de recibir alimentación (llamadas “volátiles”). Según las
características de la información a guardar, esta se grabará en un tipo u otro
de memoria de forma automática, habitualmente.
Diferentes patillas de E/S (entrada/salida): son las encargadas de comunicar
el microcontrolador con el exterior. En las patillas de entrada del
microcontrolador podremos conectar sensores para que este pueda recibir
datos provenientes de su entorno, y en sus patillas de salida podremos
conectar actuadores para que el microcontrolador pueda enviarles órdenes e
así interactuar con el medio físico. De todas formas, muchas patillas de la
mayoría de microcontroladores no son exclusivamente de entrada o de
salida, sino que pueden ser utilizados indistintamente para ambos propósitos
(de ahí el nombre de E/S).
Es decir, un microcontrolador es un computador completo (aunque con
prestaciones limitadas) en un solo chip, el cual está especializado en ejecutar
constantemente un conjunto de instrucciones predefinidas. Estas instrucciones irán
teniendo en cuenta en cada momento la información obtenida y enviada por las
patillas de E/S y reaccionarán en consecuencia. Lógicamente, las instrucciones serán
diferentes según el uso que se le quiera dar al microcontrolador, y deberemos de
decidir nosotros cuáles son.
Cada vez existen más productos domésticos que incorporan algún tipo de
microcontrolador con el fin de aumentar sustancialmente sus prestaciones, reducir
su tamaño y coste, mejorar su fiabilidad y disminuir el consumo. Así, podemos
encontrar microcontroladores dentro de multitud de dispositivos electrónicos que
usamos en nuestra vida diaria, como pueden ser desde un simple timbre hasta un
completo robot pasando por juguetes, frigoríficos, televisores, lavadoras,
microondas, impresoras, el sistema de arranque de nuestro coche, etc.
¿QUÉ ES ARDUINO?
Arduino (http://www.arduino.cc) es en realidad tres cosas:
Una placa hardware libre que incorpora un microcontrolador reprogramable
y una serie de pines-hembra (los cuales están unidos internamente a las
63
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
patillas de E/S del microcontrolador) que permiten conectar allí de forma
muy sencilla y cómoda diferentes sensores y actuadores.
Cuando hablamos de “placa hardware” nos estamos refiriendo en concreto a
una PCB (del inglés “printed circuit board”, o sea, placa de circuito impreso). Las PCBs
son superficies fabricadas de un material no conductor (normalmente resinas de
fibra de vidrio reforzada, cerámica o plástico) sobre las cuales aparecen laminadas
(“pegadas”) pistas de material conductor (normalmente cobre). Las PCBs se utilizan
para conectar eléctricamente, a través de los caminos conductores, diferentes
componentes electrónicos soldados a ella. Una PCB es la forma más compacta y
estable de construir un circuito electrónico (en contraposición a una breadboard,
perfboard o similar) pero, al contrario que estas, una vez fabricada, su diseño es
bastante difícil de modificar. Así pues, la placa Arduino no es más que una PCB que
implementa un determinado diseño de circuitería interna.
No obstante, cuando hablamos de “placa Arduino”, deberíamos especificar el
modelo concreto, ya que existen varias placas Arduino oficiales, cada una con
diferentes características (como el tamaño físico, el número de pines-hembra
ofrecidos, el modelo de microcontrolador incorporado –y como consecuencia, entre
otras cosas, la cantidad de memoria utilizable–, etc.). Conviene conocer estas
características para identificar qué placa Arduino es la que nos convendrá más en
cada proyecto.
De todas formas, aunque puedan ser modelos específicos diferentes (tal
como acabamos de comentar), los microcontroladores incorporados en las diferentes
placas Arduino pertenecen todos a la misma “familia tecnológica”, por lo que su
funcionamiento en realidad es bastante parecido entre sí. En concreto, todos los
microcontroladores son de tipo AVR, una arquitectura de microcontroladores
desarrollada y fabricada por la marca Atmel (http://www.atmel.com). Es por eso que,
en este libro seguiremos nombrando “placa Arduino” a cualquiera de ellas mientras
no sea imprescindible hacer algún tipo de distinción.
El diseño hardware de la placa Arduino está inspirado originalmente en el de
otra placa de hardware libre preexistente, la placa Wiring (http://www.wiring.co).
Esta placa surgió en 2003 como proyecto personal de Hernando Barragán, estudiante
por aquel entonces del Instituto de Diseño de Ivrea (lugar donde surgió en 2005
precisamente la placa Arduino).
Un software (más en concreto, un “entorno de desarrollo”) gratis, libre y
multiplataforma (ya que funciona en Linux, MacOS y Windows) que debemos
64
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
instalar en nuestro ordenador y que nos permite escribir, verificar y guardar
(“cargar”) en la memoria del microcontrolador de la placa Arduino el
conjunto de instrucciones que deseamos que este empiece a ejecutar. Es
decir: nos permite programarlo. La manera estándar de conectar nuestro
computador con la placa Arduino para poder enviarle y grabarle dichas
instrucciones es mediante un simple cable USB, gracias a que la mayoría de
placas Arduino incorporan un conector de este tipo.
Los proyectos Arduino pueden ser autónomos o no. En el primer caso, una
vez programado su microcontrolador, la placa no necesita estar conectada a ningún
computador y puede funcionar autónomamente si dispone de alguna fuente de
alimentación. En el segundo caso, la placa debe estar conectada de alguna forma
permanente (por cable USB, por cable de red Ethernet, etc.) a un computador
ejecutando algún software específico que permita la comunicación entre este y la
placa y el intercambio de datos entre ambos dispositivos. Este software específico lo
deberemos programar generalmente nosotros mismos mediante algún lenguaje de
programación estándar como Python, C, Java, Php, etc., y será independiente
completamente del entorno de desarrollo Arduino, el cual no se necesitará más, una
vez que la placa ya haya sido programada y esté en funcionamiento.
Un lenguaje de programación libre. Por “lenguaje de programación” se
entiende cualquier idioma artificial diseñado para expresar instrucciones
(siguiendo unas determinadas reglas sintácticas) que pueden ser llevadas a
cabo por máquinas. Concretamente dentro del lenguaje Arduino,
encontramos elementos parecidos a muchos otros lenguajes de
programación existentes (como los bloques condicionales, los bloques
repetitivos, las variables, etc.), así como también diferentes comandos
–asimismo llamados “órdenes” o “funciones” – que nos permiten especificar
de una forma coherente y sin errores las instrucciones exactas que queremos
programar en el microcontrolador de la placa. Estos comandos los escribimos
mediante el entorno de desarrollo Arduino.
Tanto el entorno de desarrollo como el lenguaje de programación Arduino
están inspirado en otro entorno y lenguaje libre preexistente: Processing
(http://www.processing.org), desarrollado inicialmente por Ben Fry y Casey Reas.
Que el software Arduino se parezca tanto a Processing no es casualidad, ya que este
está especializado en facilitar la generación de imágenes en tiempo real, de
animaciones y de interacciones visuales, por lo que muchos profesores del Instituto
de Diseño de Ivrea lo utilizaban en sus clases. Como fue en ese centro donde
precisamente se inventó Arduino es natural que ambos entornos y lenguajes guarden
65
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
bastante similitud. No obstante, hay que aclarar que el lenguaje Processing está
construido internamente con código escrito en lenguaje Java, mientras que el
lenguaje Arduino se basa internamente en código C/C++.
Con Arduino se pueden realizar multitud de proyectos de rango muy variado:
desde robótica hasta domótica, pasando por monitorización de sensores
ambientales, sistemas de navegación, telemática, etc. Realmente, las posibilidades
de esta plataforma para el desarrollo de productos electrónicos son prácticamente
infinitas y tan solo están limitadas por nuestra imaginación.
¿CUÁL ES EL ORIGEN DE ARDUINO?
Arduino nació en el año 2005 en el Instituto de Diseño Interactivo de Ivrea
(Italia), centro académico donde los estudiantes se dedicaban a experimentar con la
interacción entre humanos y diferentes dispositivos (muchos de ellos basados en
microcontroladores) para conseguir generar espacios únicos, especialmente
artísticos. Arduino apareció por la necesidad de contar con un dispositivo para utilizar
en las aulas que fuera de bajo coste, que funcionase bajo cualquier sistema operativo
y que contase con documentación adaptada a gente que quisiera empezar de cero.
La idea original fue, pues, fabricar la placa para uso interno de la escuela.
No obstante, el Instituto se vio obligado a cerrar sus puertas precisamente en
2005. Ante la perspectiva de perder en el olvido todo el desarrollo del proyecto
Arduino que se había ido llevando a cabo durante aquel tiempo, se decidió liberarlo y
abrirlo a “la comunidad” para que todo el mundo tuviera la posibilidad de participar
en la evolución del proyecto, proponer mejoras y sugerencias y mantenerlo “vivo”. Y
así ha sido: la colaboración de muchísima gente ha hecho que Arduino poco a poco
haya llegado a ser lo que es actualmente: un proyecto de hardware y software libre
de ámbito mundial.
El principal responsable de la idea y diseño de Arduino, y la cabeza visible del
proyecto es el llamado “Arduino Team”, formado por Massimo Banzi (profesor en
aquella época del Instituto Ivrea), David Cuartielles (profesor de la Escuela de Artes y
Comunicación de la Universidad de Mälmo, Suecia), David Mellis (por aquel entonces
estudiante en Ivrea y actualmente miembro del grupo de investigación High-Low
Tech del MIT Media Lab), Tom Igoe (profesor de la Escuela de Arte Tisch de Nueva
York), y Gianluca Martino (responsable de empresa fabricante de los prototipos de
las placas, cuya web oficial es: http://www.smartprojects.it).
66
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
Existe un documental de 30 minutos muy interesante, en el cual interviene el
“Arduino Team” explicando en primera persona todo el proceso de gestación y
evolución del proyecto Arduino, desde los detalles técnicos que se tuvieron en
cuenta hasta la filosofía libre que impregnó (e impregna) su desarrollo, pasando por
diferentes testimonios de colaboradores de todo el mundo. Se puede ver
gratuitamente en http://arduinothedocumentary.org.
¿QUÉ QUIERE DECIR QUE ARDUINO SEA “SOFTWARE LIBRE”?
En párrafos anteriores hemos comentado que Arduino es una placa de
“hardware libre” y también “un entorno y lenguaje de programación (es decir,
software) libre”. ¿Pero qué significa aquí la palabra “libre” exactamente?
Según la Free Software Foundation (http://www.fsf.org), organización
encargada de fomentar el uso y desarrollo del software libre a nivel mundial, un
software para ser considerado libre ha de ofrecer a cualquier persona u organización
cuatro libertades básicas e imprescindibles:
Libertad 0: la libertad de usar el programa con cualquier propósito y en
cualquier sistema informático.
Libertad 1: la libertad de estudiar cómo funciona internamente el programa,
y adaptarlo a las necesidades particulares. El acceso al código fuente es un
requisito previo para esto.
Libertad 2: la libertad de distribuir copias.
Libertad 3: la libertad de mejorar el programa y hacer públicas las mejoras a
los demás, de modo que toda la comunidad se beneficie. El acceso al código
fuente es un requisito previo para esto.
Un programa es software libre si los usuarios tienen todas estas libertades.
Así pues, el software libre es aquel software que da a los usuarios la libertad de
poder ejecutarlo, copiarlo y distribuirlo (a cualquiera y a cualquier lugar), estudiarlo,
cambiarlo y mejorarlo, sin tener que pedir ni pagar permisos al desarrollador original
ni a ninguna otra entidad específica. La distribución de las copias puede ser con o sin
modificaciones propias, y atención, puede ser gratis ¡o no!: el "software libre" es un
asunto de libertad, no de precio.
67
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Para que un programa sea considerado libre a efectos legales ha de
someterse a algún tipo de licencia de distribución, entre las cuales se encuentran la
licencia GPL (General Public License), o la LGPL, entre otras. El tema de las diferentes
licencias es un poco complicado: hay muchas y con muchas cláusulas. Para saber más
sobre este tema, se puede consultar http://www.opensource.org/licenses/category ,
donde está disponible el texto oficial original de las licencias más importantes.
Ejemplos de software libre hay muchos: el kernel Linux, el navegador Firefox, la suite
ofimática LibreOffice, el reproductor multimedia VLC, etc.
El software Arduino es software libre porque se publica con una combinación
de la licencia GPL (para el entorno visual de programación propiamente dicho) y la
licencia LGPL (para los códigos fuente de gestión y control del microcontrolador a
nivel más interno). La consecuencia de esto es, en pocas palabras, que cualquier
persona que quiera (y sepa), puede formar parte del desarrollo del software Arduino
y contribuir así a mejorar dicho software, aportando nuevas características,
sugiriendo ideas de nuevas funcionalidades, compartiendo soluciones a posibles
errores existentes, etc. Esta manera de funcionar provoca la creación espontánea de
una comunidad de personas que colaboran mutuamente a través de Internet, y
consigue que el software Arduino evolucione según lo que la propia comunidad
decida. Esto va mucho más allá de la simple cuestión de si el software Arduino es
gratis o no, porque el usuario deja de ser un sujeto pasivo para pasar a ser (si quiere)
un sujeto activo y partícipe del proyecto.
¿QUÉ QUIERE DECIR QUE ARDUINO SEA “HARDWARE LIBRE”?
El hardware libre (también llamado “open-source” o “de fuente abierta”)
comparte muchos de los principios y metodologías del software libre. En particular,
el hardware libre permite que la gente pueda estudiarlo para entender su
funcionamiento, modificarlo, reutilizarlo, mejorarlo y compartir dichos cambios. Para
conseguir esto, la comunidad ha de poder tener acceso a los ficheros esquemáticos
del diseño del hardware en cuestión (que son ficheros de tipo CAD). Estos ficheros
detallan toda la información necesaria para que cualquier persona con los materiales,
herramientas y conocimientos adecuados pueda reconstruir dicho hardware por su
cuenta sin problemas, ya que consultando estos ficheros se puede conocer qué
componentes individuales integran el hardware y qué interconexiones existen entre
cada uno de ellos.
La placa Arduino es hardware libre porque sus ficheros esquemáticos están
disponibles para descargar de la página web del proyecto con la licencia Creative
68
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
Commons Attribution Share-Alike (http://es.creativecommons.org/licencia), la cual
es una licencia libre que permite realizar trabajos derivados tanto personales como
comerciales (siempre que estos den crédito a Arduino y publiquen sus diseños bajo la
misma licencia). Así pues, uno mismo se puede construir su propia placa Arduino “a
mano”. No obstante, lo más normal es comprarlas de un distribuidor ya
preensambladas y listas para usar; en ese caso, lógicamente, la placa Arduino,
aunque sea libre, no puede ser gratuita, ya que es un objeto físico y su fabricación
cuesta dinero.
A diferencia del mundo del software libre, donde el ecosistema de licencias
libres es muy rico y variado, en el ámbito del hardware todavía no existen
prácticamente licencias específicamente de hardware libre, ya que el concepto de
“hardware libre” es relativamente nuevo. De hecho, hasta hace poco no existía un
consenso generalizado en su definición. Para empezar a remediar esta situación, en
el año 2010 surgió el proyecto OSHD (http://freedomdefined.org/OSHW), el cual
pretende establecer una colección de principios que ayuden a identificar como
“hardware libre” un producto físico. OSHD no es una licencia (es decir, un contrato
legal), sino una declaración de intenciones (es decir, una lista general de normas y de
características) aplicable a cualquier artefacto físico para que pueda ser considerado
libre. El objetivo de la OSHD (en cuya redacción ha participado gente relacionada con
el proyecto Arduino, entre otros) es ofrecer un marco de referencia donde se respete
por un lado la libertad de los creadores para controlar su propia tecnología y al
mismo tiempo se establezcan los mecanismos adecuados para compartir el
conocimiento y fomentar el comercio a través del intercambio abierto de diseños. En
otras palabras: mostrar que puede existir una alternativa a las patentes de hardware
que tampoco sea necesariamente el dominio público. El proyecto OSHD abre, pues,
un camino que crea precedentes legales para facilitar el siguiente paso lógico del
proceso: la creación de licencias libres de hardware.
El objetivo del hardware libre es, por lo tanto, facilitar y acercar la
electrónica, la robótica y en definitiva la tecnología actual a la gente, no de una
manera pasiva, meramente consumista, sino de manera activa, involucrando al
usuario final para que entienda y obtenga más valor de la tecnología actual e incluso
ofreciéndole la posibilidad de participar en la creación de futuras tecnologías.
Básicamente, el hardware abierto significa tener la posibilidad de mirar qué es lo que
hay dentro de las cosas, y que eso sea éticamente correcto. Permite, en definitiva,
mejorar la educación de las personas. Por eso el concepto de software y hardware
libre es tan importante, no solo para el mundo de la informática y de la electrónica,
sino para la vida en general.
69
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
¿POR QUÉ ELEGIR ARDUINO?
Existen muchas otras placas de diferentes fabricantes que, aunque
incorporan diferentes modelos de microcontroladores, son comparables y ofrecen
una funcionalidad más o menos similar a la de las placas Arduino. Todas ellas
también vienen acompañadas de un entorno de desarrollo agradable y cómodo y de
un lenguaje de programación sencillo y completo. No obstante, la plataforma
Arduino (hardware + software) ofrece una serie de ventajas:
Arduino es libre y extensible: esto quiere decir que cualquiera que desee
ampliar y mejorar tanto el diseño hardware de las placas como el entorno de
desarrollo software y el propio lenguaje de programación, puede hacerlo sin
problemas. Esto permite que exista un rico “ecosistema” de extensiones,
tanto de variantes de placas no oficiales como de librerías software de
terceros, que pueden adaptarse mejor a nuestras necesidades concretas.
Breve nota sobre las librerías:
Una librería (mala traducción del inglés “library”, que significa “biblioteca”) es un
conjunto de instrucciones de un lenguaje de programación agrupadas de una
forma coherente. Podemos entender una librería como un “cajón” etiquetado que
guarda unas determinadas instrucciones relacionadas entre sí. Así, tenemos el
“cajón” de las instrucciones para controlar motores, el “cajón” de las instrucciones
para almacenar datos en una tarjeta de memoria, etc.
Las librerías sirven para proveer funcionalidad extra (manipulando datos,
interactuando con hardware, etc.) pero también para facilitar el desarrollo de
nuestros proyectos, porque están diseñadas para que a la hora de escribir nuestro
programa no tengamos que hacer “la faena sucia” de conocer todos los detalles
técnicos sobre el manejo de un determinado hardware, o ser un experto en la
configuración de determinado componente, ya que las librerías ocultan esa
complejidad.
Además, la organización del lenguaje en librerías permite que los programas
resulten más pequeños y sean escritos de una forma más flexible y modular, ya que
solo están disponibles en cada momento las instrucciones ofrecidas por las librerías
utilizadas en ese instante.
El lenguaje Arduino incorpora por defecto una serie de librerías oficiales que
iremos estudiando a lo largo de este libro (son las que aparecen listadas aquí:
70
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
http://arduino.cc/en/Reference/Libraries), pero también ofrece la posibilidad de
utilizar librerías creadas por terceros (hay literalmente decenas) que amplían la
funcionalidad del propio lenguaje y permiten que la placa Arduino se adapte a
multitud de escenarios diferentes.
Arduino tiene una gran comunidad: muchas personas lo utilizan, enriquecen
la documentación y comparten continuamente sus ideas.
Su entorno de programación es multiplataforma: se puede instalar y
ejecutar en sistemas Windows, Mac OS X y Linux. Esto no ocurre con el
software de muchas otras placas.
Su entorno y el lenguaje de programación son simples y claros: son muy
fáciles de aprender y de utilizar, a la vez que flexibles y completos para que
los usuarios avanzados puedan aprovechar y exprimir todas las posibilidades
del hardware. Además, están bien documentados, con ejemplos detallados y
gran cantidad de proyectos publicados en diferentes formatos.
Las placas Arduino son baratas: la placa Arduino estándar (llamada Arduino
UNO) ya preensamblada y lista para funcionar cuesta alrededor de 20 euros.
Incluso, uno mismo se la podría construir (Arduino es hardware libre,
recordemos) adquiriendo los componentes por separado, con lo que el
precio total de la placa resultante sería incluso menor.
Las placas Arduino son reutilizables y versátiles: reutilizables porque se
puede aprovechar la misma placa para varios proyectos (ya que es muy fácil
de desconectarla, reconectarla y reprogramarla), y versátiles porque las
placas Arduino proveen varios tipos diferentes de entradas y salidas de datos,
los cuales permiten capturar información de sensores y enviar señales a
actuadores de múltiples formas.
CARACTERÍSTICAS DEL MICRO DE LA PLACA ARDUINO UNO
Ya se ha comentado anteriormente que existen varios tipos de placas
Arduino, cada una con características específicas que hay que conocer para poder
elegir el modelo que más nos convenga según el caso. No obstante, existe un
modelo “estándar” de placa, que es el más utilizado con diferencia y que es el que
utilizaremos también nosotros en este libro en todos los proyectos: la placa Arduino
UNO. Desde que apareció en 2010 ha sufrido tres revisiones, por lo que el modelo
actual se suele llamar UNO Rev3 o simplemente UNO R3.
71
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
El encapsulado del microcontrolador
La imagen anterior muestra la placa Arduino UNO en su variante
convencional. La imagen siguiente muestra la variante llamada Arduino UNO SMD. La
única diferencia entre ambas placas es el encapsulado físico del microcontrolador
incorporado: ambas tienen el mismo modelo, pero la placa convencional lo lleva
montado en formato DIP (“Dual In-line Package”) y la placa SMD lo lleva en formato
SMD (“Surface Mount Device”). Tal como se puede apreciar en ambas figuras, el
formato DIP (visualmente, un gran rectángulo en el centro-inferior-derecha de la
placa) es mucho más grande que el formato SMD (visualmente, un pequeño
cuadrado ubicado en diagonal en el centro-inferior-derecha de la placa).
72
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
Una diferencia importante entre el formato SMD y el DIP es que el primero
está soldado a la superficie de la placa (mediante una tecnología llamada
precisamente “de montaje superficial” –en inglés, SMT, de ”surface mount
technology” –), mientras que el segundo está conectado a la placa mediante una
serie de patillas metálicas (las cuales son, de hecho, las patillas de E/S del
microcontrolador) que se pueden separar fácilmente y que permiten la substitución
del microcontrolador por otro si fuera necesario. En la práctica, esto no nos debería
importar demasiado a no ser que deseemos separar y reutilizar el microcontrolador
de nuestra placa en otras placas o montajes; en ese caso, deberíamos optar por el
formato DIP.
Aunque en la placa Arduino solamente dispongamos para nuestro
microcontrolador de estas dos alternativas de encapsulado (DIP o SMD), el mundo de
los chips en general no es tan sencillo, ya que existen muchas variantes de los dos
encapsulados anteriores, además de otros tipos de encapsulados diferentes. Esto es
debido a las diferentes necesidades que existen respecto la disponibilidad de espacio
físico y la disposición de los conectores en las PCBs que utilicemos. Si se desea
consultar qué encapsulados son los más importantes en el mundo electrónico, se
puede descargar de http://goo.gl/OU47S un breve documento que los resume. Si aún
se desea obtener una información más exhaustiva, recomiendo consultar la página
http://www.siliconfareast.com/ic-package-types.htm.
De todas formas, en los proyectos de este libro no nos preocuparemos
demasiado por los encapsulados de los chips utilizados, ya que para trabajar con ellos
haremos uso de placas “breakout”. Una placa “breakout” es una placa PCB que lleva
soldado un chip (o más) junto con los conectores y la circuitería necesaria para
permitir enchufar a ella dispositivos externos de una forma fácil y rápida. Por tanto,
cuando necesitemos en nuestros proyectos algún chip en particular, recurriremos a
alguna placa breakout que lo incorpore y entonces simplemente deberemos utilizar
los conectores ofrecidos por ella para poner el chip en comunicación con el resto del
circuito. Así pues, solo en el caso de necesitar soldar un chip individual a una placa es
cuando su tipo de encapsulado lo deberíamos tener en cuenta, pero esto es un tema
avanzado que no abordaremos.
Aclaremos que otros componentes simples que no son circuitos integrados
(tales como resistencias, condensadores, diodos, fusibles, etc.) también pueden estar
encapsulados en formato SMD para optimizar al máximo el espacio físico ocupado.
En estos casos, la variedad de formas y tamaños, aunque estandarizada, es inmensa,
y se sale de los objetivos de este libro profundizar en este tema. Baste decir que
73
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
muchos de estos encapsulados se suelen distinguir por un código de cuatro dígitos,
los dos primeros de los cuales indican la longitud del componente y los dos últimos
su anchura, en centésimas de pulgadas. Por ejemplo, el encapsulado (por otra parte
muy común) “0603” indicaría que el componente en cuestión tiene un tamaño de
0,06” x 0,03”. Otros encapsulados comunes son el “0805” y el “0402”.
El modelo del microcontrolador
El microcontrolador que lleva la placa Arduino UNO es el modelo
ATmega328P de la marca Atmel. La “P” del final significa que este chip incorpora la
tecnología “Picopower” (propietaria de Atmel), la cual permite un consumo eléctrico
sensiblemente menor comparándolo con el modelo equivalente sin “Picopower”, el
Atmega328 (sin la “P”). De todas formas, aunque el ATmega328P pueda trabajar a un
voltaje menor y consumir menos corriente que el Atmega328 (especialmente en los
modos de hibernación), ambos modelos son funcionalmente idénticos.
Al igual que ocurre con el resto de microcontroladores usados en otras placas
Arduino, el ATmega328P tiene una arquitectura de tipo AVR, arquitectura
desarrollada por Atmel y en cierta medida “competencia” de otras arquitecturas
como por ejemplo la PIC del fabricante Microchip. Más concretamente, el
ATmega328P pertenece a la subfamilia de microcontroladores “megaAVR”. Otras
subfamilias de la arquitectura AVR son la “tinyAVR” (cuyos microcontroladores son
más limitados y se identifican con el nombre de ATtiny) y la “XMEGA” (cuyos
microcontroladores son más capaces y se identifican con el nombre de ATxmega),
pero no las estudiaremos ya que las placas Arduino no incorporan
microcontroladores de esas familias.
De todas formas, si se desea saber más sobre la arquitectura AVR y los
modelos y características que ofrecen los microcontroladores construidos de esta
forma, no hay nada mejor como consultar la web de la propia empresa fabricante:
http://www.atmel.com/products/microcont ... fault.aspx). Y más en
concreto, si se desea consultar la especificación técnica del ATmega328P (aunque
para los proyectos de este libro no será necesario) se puede descargar aquí:
http://www.atmel.com/dyn/resources/prod ... oc8161.pdf .
74
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
Lo que sí nos puede venir bien es conocer la disposición concreta de las
patillas (llamadas también “pines”) de entrada/salida del microcontrolador, ya que,
aunque hemos dicho anteriormente que en general todos los pines de E/S sirven
para comunicar el microcontrolador con el mundo exterior, es cierto que cada pin
suele tener una determinada función específica. Como cada modelo de
microcontrolador tiene un número y ubicación de pines diferente, en nuestro caso
concreto deberemos tener a mano la disposición de pines del ATmega328P. La figura
siguiente muestra esta disposición en el encapsulado de tipo DIP, y ha sido obtenida
de la especificación técnica mencionada en el párrafo anterior. Nota: el circulito que
aparece en la parte superior de la figura indica el lugar donde existe una muesca en
el encapsulado real, de manera que así sea fácil distinguir la orientación de los pines.
Observando la imagen se puede saber qué pin es el que recibe la
alimentación eléctrica (señalado como “VCC”), qué dos pines están conectados a
tierra (los señalados como “GND”), qué pines son los de E/S (señalados como PBx,
PCx o PDx) y la existencia de otros pines más específicos como el AVCC (donde se
recibe la alimentación suplementaria para el convertidor analógico-digital interno del
chip) o el AREF (donde se recibe la referencia analógica para dicho convertidor –esto
lo estudiaremos más adelante–). También se puede observar que junto el nombre de
los pines de E/S se indica entre paréntesis las funciones especializadas que cada uno
de ellos tiene en particular (además de su función genérica de entrada/salida).
Algunas de estas funciones específicas las iremos estudiando a lo largo del libro,
como por ejemplo la función de “reset” del microcontrolador, o la comunicación con
el exterior usando el protocolo serie o el SPI o el I 2 C, o el uso de interrupciones, o el
de las salidas PWM, etc.
75
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Las memorias del microcontrolador
Otra cosa que hay que saber de los microcontroladores son los tipos y
cantidades de memoria que alojan en su interior. En el caso del ATmega328P
tenemos:
Memoria Flash: memoria persistente donde se almacena permanentemente
el programa que ejecuta el microcontrolador (hasta una nueva reescritura si
se da el caso). En el caso del ATmega328P tiene una capacidad de 32KB.
Breve nota sobre las unidades de medida de la información:
Es buen momento para repasar cómo se mide la cantidad de datos almacenados en
una memoria (o transferidos por algún canal). El sistema de medición de la
información es el siguiente:
1 bit es la unidad mínima, y puede valer 0 o 1.
1 byte es un grupo de 8 bits.
1 kilobyte (a veces escrito como KB) es un grupo de 1024 bytes (es decir, 8192 bits).
1 megabyte (MB) es un grupo de 1024 KB (es decir, 1048576 bytes).
1 gigabyte (GB) es un grupo de 1024 MB.
Observar que los múltiplos “kilo”, “mega” y “giga” hacen referencia a agrupaciones
de 1024 (2 10 ) elementos, en vez de lo que suele ocurrir con el resto de unidades de
medida del mundo físico, donde son agrupaciones de 1000 elementos. Esta
discrepancia es debe a la naturaleza intrínsecamente binaria de los componentes
electrónicos.
Observar también que no es lo mismo Kbit (“kilobit”) que KB (“kilobyte”). En el
primer caso estaríamos hablando de 1024 bits, y en el segundo de 1024 bytes (es
decir, 8192 bits, ocho veces más).
En los microcontroladores que vienen incluidos en la placa Arduino no
podemos usar toda la capacidad de la memoria Flash porque existen 512 bytes (el
llamado “bootloader block”) ocupados ya por un código preprogramado de fábrica
(el llamado “bootloader” o “gestor de arranque”), el cual nos permite usar la placa
Arduino de una forma sencilla y cómoda sin tener que conocer las interioridades
electrónicas más avanzadas del microcontrolador. Los ATmega328P que podamos
adquirir individualmente normalmente no incluyen de fábrica este pequeño
programa, por lo que sí que ofrecen los 32 KB íntegros, pero a cambio no podremos
76
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
esperar conectarlos a una placa Arduino y que funcionen sin más ya que les faltará
tener grabada esa “preconfiguración”. De los gestores de arranque, de su uso y su
importancia hablaremos en un próximo apartado.
Memoria SRAM: memoria volátil donde se alojan los datos que en ese
instante el programa (grabado separadamente en la memoria Flash,
recordemos) necesita crear o manipular para su correcto funcionamiento.
Estos datos suelen tener un contenido variable a lo largo del tiempo de
ejecución del programa y cada uno es de un tipo concreto (es decir, un dato
puede contener un valor numérico entero, otro un número decimal, otro un
valor de tipo carácter... también pueden ser cadenas de texto fijas u otros
tipos de datos más especiales). Independientemente del tipo de dato, su
valor siempre será eliminado cuando se deje de alimentar eléctricamente al
microcontrolador. En el caso del ATmega328P esta memoria tiene una
capacidad de 2KB.
Si necesitáramos ampliar la cantidad de memoria SRAM disponible, siempre
podríamos adquirir memorias SRAM independientes y conectarlas al
microcontrolador utilizando algún protocolo de comunicación conocido por este
(como SPI o I 2 C, de los cuales hablaremos enseguida); no obstante, esto no será
necesario en los proyectos de este libro.
Memoria EEPROM: memoria persistente donde se almacenan datos que se
desea que permanezcan grabados una vez apagado el microcontrolador para
poderlos usar posteriormente en siguientes reinicios. En el caso del
ATmega328P esta memoria tiene una capacidad de 1 KB, por lo que se puede
entender como una tabla de 1024 posiciones de un byte cada una.
Si necesitáramos ampliar la cantidad de memoria EEPROM disponible,
siempre podemos adquirir memorias EEPROM independientes y conectarlas al
microcontrolador utilizando algún protocolo de comunicación conocido por este
(como SPI o I 2 C, de los cuales hablaremos enseguida). O bien, alternativamente,
adquirir tarjetas de memoria de tipo SD (“Secure Digital”) y comunicarlas mediante
un circuito específico al microcontrolador. Las memorias SD son en realidad simples
memorias Flash, encapsuladas de una forma concreta; son ampliamente utilizadas en
cámaras digitales de foto/vídeo y en teléfonos móviles de última generación, ya que
ofrecen muchísima capacidad (varios gigabytes) a un precio barato. La razón por la
cual este tipo de tarjetas son capaces de ser reconocidas por el ATmega328P es
porque pueden funcionar utilizando el protocolo de comunicación SPI.
77
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Podemos deducir de los párrafos anteriores que la arquitectura a la que
pertenece el chip ATmega328P (y en general, toda la familia de microcontroladores
AVR) es de tipo Harvard. En este tipo de arquitectura, la memoria que aloja los datos
(en nuestro caso, la SRAM o la EEPROM) está separada de la memoria que aloja las
instrucciones (en nuestro caso, la Flash), por lo que ambas memorias se comunican
con la CPU de forma totalmente independiente y en paralelo, consiguiendo así una
mayor velocidad y optimización. Otro tipo de arquitectura (que es la que vemos en
los PCs) es la arquitectura Von Neumann, en la cual la CPU está conectada a una
memoria RAM única que contiene tanto las instrucciones del programa como los
datos, por lo que la velocidad de operación está limitada (entre otras cosas) por el
efecto cuello de botella que significa un único canal de comunicación para datos e
instrucciones.
Los registros del microcontrolador
Los registros son espacios de memoria existentes dentro de la propia CPU de
un microcontrolador. Son muy importantes porque tienen varias funciones
imprescindibles: sirven para albergar los datos (cargados previamente desde la
memoria SRAM o EEPROM) necesarios para la ejecución de las instrucciones
previstas próximamente (y así tenerlos perfectamente disponibles en el momento
adecuado); sirven también para almacenar temporalmente los resultados de las
instrucciones recientemente ejecutadas (por si se necesitan en algún instante
posterior) y sirven además para alojar las propias instrucciones que en ese mismo
momento estén ejecutándose.
Su tamaño es muy reducido: tan solo tienen capacidad para almacenar unos
pocos bits cada uno. Pero este factor es una de las características más importantes
de cualquier microcontrolador, ya que cuanto mayor sea el número de bits que
“quepan” en sus registros, mayores serán sus prestaciones, en cuanto a poder de
cómputo y velocidad de ejecución. En efecto, es fácil ver (simplificando mucho) que
un microcontrolador con registros el doble de grandes que otro podrá procesar el
doble de cantidad de datos y por tanto, trabajar el “doble de rápido” aun
funcionando los dos al mismo ritmo. De hecho, es tan importante esta característica
que cuando escuchamos que un microcontrolador es de “8 bits” o de “32 bits”, nos
estamos refiriendo precisamente a este dato: al tamaño de sus registros.
Dependiendo de la utilidad que vayamos a darle al microcontrolador, será
necesario utilizar uno con un tamaño de registros suficiente. Por ejemplo, el control
de un electrodoméstico sencillo como una batidora no requiere más que un
microcontrolador de 4 u 8 bits. En cambio, el sistema de control electrónico del
78
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
motor de un coche o el de un sistema de frenos ABS se basan normalmente en un
microcontrolador de 16 o 32 bits.
El chip ATmega328P es de 8 bits. De hecho, todos los microcontroladores que
incorporan las diferentes placas Arduino son de 8 bits excepto el incorporado en la
placa Arduino Due, que es de 32 bits.
Los protocolos de comunicación I 2 C/TWI y SPI
Cuando se desea transmitir un conjunto de datos desde un componente
electrónico a otro, se puede hacer de múltiples formas. Una de ellas es estableciendo
una comunicación “serie”; en este tipo de comunicación la información es
transmitida bit a bit (uno tras otro) por un único canal, enviando por tanto un solo bit
en cada momento. Otra manera de transferir datos es mediante la llamada
comunicación “paralela”, en la cual se envían varios bits simultáneamente, cada uno
por un canal separado y sincronizado con el resto.
El microcontrolador, a través de algunos de sus pines de E/S, utiliza el sistema
de comunicación serie para transmitir y recibir órdenes y datos hacia/desde otros
componentes electrónicos. Esto es debido sobre todo a que en una comunicación
serie solo se necesita en teoría un único canal (un único “cable”), mientras que en
una comunicación en paralelo se necesitan varios cables, con el correspondiente
incremento de complejidad, tamaño y coste del circuito resultante.
No obstante, no podemos hablar de un solo tipo de comunicación serie.
Existen muchos protocolos y estándares diferentes basados todos ellos en la
transferencia de información en serie, pero implementando de una forma diferente
cada uno los detalles específicos (como el modo de sincronización entre emisor y
receptor, la velocidad de transmisión, el tamaño de los paquetes de datos, los
mensajes de conexión y desconexión y de dar paso al otro en el intercambio de
información, los voltajes utilizados, etc.). De entre el gran número de protocolos de
comunicación serie reconocidos por la inmensa variedad de dispositivos electrónicos
del mercado, los que nos interesarán conocer son los que el ATmega328P es capaz de
comprender y por tanto, los que podrá utilizar para contactar con esa variedad de
periféricos. En este sentido, los estándares más importantes son:
I 2 C (Inter-Integrated Circuit, también conocido con el nombre de TWI –de
“TWo-wIre”, literalmente “dos cables” en inglés–): es un sistema muy
utilizado en la industria principalmente para comunicar circuitos integrados
entre sí. Su principal característica es que utiliza dos líneas para transmitir la
79
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
información: una (llamada línea “SDA”) sirve para transferir los datos (los 0s y
los 1s) y otra (llamada línea “SCL”) sirve para enviar la señal de reloj. En
realidad también se necesitarían dos líneas más: la de alimentación y la de
tierra común, pero estas ya se presuponen existentes en el circuito.
Por “señal de reloj” se entiende una señal binaria de una frecuencia periódica
muy precisa que sirve para coordinar y sincronizar los elementos integrantes de una
comunicación (es decir, los emisores y receptores) de forma que todos sepan cuándo
empieza, cuánto dura y cuándo acaba la transferencia de información. En hojas
técnicas y diagramas a la señal de reloj en general se le suele describir como CLK (del
inglés “clock”).
Cada dispositivo conectado al bus I2C tiene una dirección única que lo
identifica respecto el resto de dispositivos, y puede estar configurado como
“maestro” o como “esclavo”. Un dispositivo maestro es el que inicia la transmisión de
datos y además genera la señal de reloj, pero no es necesario que el maestro sea
siempre el mismo dispositivo: esta característica se la pueden ir intercambiando
ordenadamente los dispositivos que tengan esa capacidad.
Tal como se muestra en el diagrama anterior, para funcionar correctamente
tanto la línea “SDA” como la “SCL” necesitan estar conectadas mediante una
resistencia “pull-up” a la fuente de alimentación común, la cual puede proveer un
voltaje generalmente de 5 V o 3,3 V (aunque sistemas con otros voltajes pueden ser
posibles).
La velocidad de transferencia de datos es de 100 Kbits por segundo en el
modo estándar (aunque también se permiten velocidades de hasta 3,4 Mbit/s). No
obstante, al haber una única línea de datos, la transmisión de información es “half
duplex” (es decir, la comunicación solo se puede establecer en un sentido al mismo
80
© Alfaomega-RC Libros
www.FreeLibros.meCAPÍTULO 2: HARDWARE ARDUINO
tiempo) por lo que en el momento que un dispositivo empiece a recibir un mensaje,
tendrá que esperar a que el emisor deje de transmitir para poder responderle.
SPI (Serial Peripheral Interface): al igual que el sistema I2C, el sistema de
comunicación SPI es un estándar que permite controlar (a cortas distancias)
casi cualquier dispositivo electrónico digital que acepte un flujo de bits serie
sincronizado (es decir, regulado por un reloj). Igualmente, un dispositivo
conectado al bus SPI puede ser “maestro” –en inglés, “master” – o “esclavo”
–en inglés, “slave“–, donde el primero es el que inicia la transmisión de datos
y además genera la señal de reloj (aunque, como con I2C , con SPI tampoco es
necesario que el maestro sea siempre el mismo dispositivo) y el segundo se
limita a responder.
La mayor diferencia entre el protocolo SPI y el I2C es que el primero requiere
de cuatro líneas (“cables”) en vez de dos. Una línea (llamada normalmente “SCK”)
envía a todos los dispositivos la señal de reloj generada por el maestro actual; otra
(llamada normalmente “SS”) es la utilizada por ese maestro para elegir en cada
momento con qué dispositivo esclavo se quiere comunicar de entre los varios que
puedan estar conectados (ya que solo puede transferir datos con un solo esclavo a la
vez); otra (llamada normalmente “MOSI”) es la línea utilizada para enviar los datos
–0s y 1s– desde el maestro hacia el esclavo elegido; y la otra (llamada normalmente
“MISO”) es la utilizada para enviar los datos en sentido contrario: la respuesta de ese
esclavo al maestro. Es fácil ver que, al haber dos líneas para los datos la transmisión
de información es “full duplex” (es decir, que la información puede ser transportada
en ambos sentidos a la vez).
En las siguientes figuras se muestra el esquema de líneas de comunicación
existentes entre un maestro y un esclavo y entre un maestro y tres esclavos
respectivamente. Se puede observar que, para el caso de la existencia de varios
esclavos es necesario utilizar una línea “SS” diferente por cada uno de ellos, ya que
esta línea es la que sirve para activar el esclavo concreto que en cada momento el
maestro desee utilizar (esto no pasa con las líneas de reloj, “MOSI” y “MISO”, que
son compartidas por todos los dispositivos).Técnicamente hablando, el esclavo que
reciba por su línea SS un valor de voltaje BAJO será el que esté seleccionado en ese
momento por el maestro, y los que reciban el valor ALTO no lo estarán (de ahí el
subrayado superior que aparece en la figura).
81
© Alfaomega-RC Libros
www.FreeLibros.meARDUINO. CURSO PRÁCTICO DE FORMACIÓN
Como se puede ver, el protocolo SPI respecto el I2C tiene la desventaja de
exigir al microcontrolador dedicar muchos más pines de E/S a la comunicación
externa. En cambio, como ventaja podemos destacar que es más rápido y consume
menos energía que I2C.
Tal como se puede observar en la figura que muestra la disposición de pines
del microcontrolador ATmega328P (página 75), los pines correspondientes a las
líneas I 2 C SDA y SCL son los números 27 y 28, respectivamente, y los pines
correspondientes a las líneas SPI SS, MOSI, MISO y SCK son los números 16, 17, 18 y
19, respectivamente. Si se necesitaran más líneas SS (porque haya más de un
dispositivo esclavo conectado en nuestro circuito), se podría utilizar cualquier otro
pin de E/S siempre que respete el convenio de poner el valor de su voltaje de salida a
BAJO cuando se desee trabajar con el dispositivo esclavo asociado y poner a ALTO el
resto de pines SS.
82



Responder

Volver a “Apoyo para profesores”