Sunteți pe pagina 1din 160

CENTRO INTEGRADO DE FORMACIÓN PROFESIONAL DE CERDEÑO

Familia Profesional de Electricidad y Electrónica


CICLO
1º ME FORMATIVO
Mantenimiento Electrónico
MÓDULO
PROFESIONAL
Equipos Microprogramables

UNIDAD 01

Introducción a los Sistemas Programables


Sistemas Programables con Plataforma Arduino

I. FINALIDADES
II. CONOCIMIENTOS PREVIOS
III. MATERIAL E INSTRUMENTACIÓN. RECURSOS
Oviedo IV. PROCESO OPERATIVO
V. MEMORIA TÉCNICA
Apuntes para clase...
Fernando Hermida Vigara, VI. CONCLUSIONES
profesor de Sistemas Electrónicos
Hipervínculos para moverse por la Unidad Didáctica:
La Unidad Didáctica se estructura en seis secciones:
UD01
• Para ir desde la portada al inicio de la sección ...
• Para volver a la portada desde el final de la sección ...
La sección más extensa es la correspondiente a CONOCIMIENTOS
PREVIOS (6 puntos), utilizándose los siguientes elementos:
• Para ir desde el índice al inicio del punto ...
• Para volver al índice desde el final del punto ...
Algunos puntos de CONOCIMIENTOS PREVIOS están organizados en
apartados y subapartados:
• Para ir desde el índice al inicio del apartado ...
• Para volver al índice desde el inicio del apartado ...
• Para ir desde el índice al inicio del subapartado ...
• Para volver desde el final del subapartado al inicio del subapartado
y después al índice ...
Los apuntes de programación se insertan donde son necesarios:
• Para ir desde el índice al inicio de un apunte de programación ...
• Para volver del final de un apunte de programación al inicio del
apunte ... y después al índice ...
Recomendaciones para el estudio y seguimiento
de la Unidad Didáctica.
UD01
▪ Realizar una lectura de las secciones:
“I. FINALIDADES” y “VI. CONCLUSIONES”, esto nos creará una
imagen previa de lo que se pretende, aunque, obviamente, no
clarificadora.
▪ Echarle un vistazo a la sección “III. MATERIAL E
INSTRUMENTACIÓN. RECURSOS”, esto nos dará una idea de lo
que necesitaremos para realizar las prácticas.
▪ Ahora abordar el estudio de las secciones
“II. CONOCIMIENTOS PREVIOS” y “IV. PROCESO OPERATIVO”;
hay dos estrategias para el estudio de estas secciones:
estudiar de un tirón toda la sección de Conocimientos Previos y
luego realizar, uno detrás de otro, todos los puntos del Proceso
Operativo, o bien, según se va avanzando en la sección de
Conocimientos Previos, nos podremos encontrar, cuando sea
pertinente, un enlace que nos llevará al punto del Proceso
Operativo para el que ya estemos preparados; ejemplo de enlace
que nos llevaría al punto 1 del Proceso Operativo: PO.1
▪ Cuando se haya terminado lo anterior, volver a leer la sección
“VI. CONCLUSIONES” y concluir la Memoria Técnica.
I. FINALIDADES
Los Sistemas Digitales los dividíamos en tres grandes bloques:
Combinaciones, Secuenciales y Programables. Después del estudio de los
combinacionales y secuenciales le toca el turno ahora a los Sistemas
Programables.
Dentro de los sistemas digitales la denominación de sistemas programables
es muy genérica y podría abarcar una gran variedad de sistemas y/o
dispositivos donde una parte de la funcionalidad quedará determinada por
programación, existiendo igualmente una gran diversidad de formas de
llevar a cabo esta última.
El estudio de los sistemas programables que aquí se pretende llevar a cabo
se restringe a la programación de determinados circuitos integrados:
microprocesadores (µP), microcontroladores (µC) y PLDs (dispositivos
lógicos programables). La programación de microprocesadores y PLDs sólo
se mencionará, dado que el desarrollo de los contenidos de las unidades
didácticas dedicadas a esta parte de los sistemas digitales focalizará su
atención sobre la programación de microcontroladores.
Esta forma de abordar el estudio de los sistemas programables encaja con la
formación de un técnico, que pudiendo estar en diferentes campos
profesionales, necesite conocimientos de Electrónica Digital Programable.
4
I. FINALIDADES
Existen muchos escenarios sobre los que fundamentar el aprendizaje de la
programación de microcontroladores. De entre todos ellos se ha elegido la
plataforma Arduino: una combinación de hardware y software de fuente
abierta, ampliamente documentada, potente y de coste accesible.
Esta plataforma se fundamenta en un conjunto de placas electrónicas de
hardware de fuente abierta que suelen incorporar µC de la firma Atmel, y en
un software de desarrollo de código abierto que facilita un conjunto de
herramientas para la elaboración de los programas de aplicación.
De entre las placas disponibles se ha considerado conveniente utilizar la que
probablemente en estos momentos goza de la mayor difusión y
documentación en la Red: La placa Arduino UNO R3 (Revisión 3). Esta placa
incorpora el microcontrolador de 8 bits ATmega328P de Atmel, de
prestaciones sobradamente suficientes para el aprendizaje de la
programación de microcontroladores: desde los aficionados a la tecnología
hasta el desarrollo de aplicaciones a nivel de ingeniería.
Aunque es posible realizar una entrada directa en la programación de
microcontroladores, sobre todo por las facilidades que ofrece la plataforma
Arduino, en el contexto de la formación profesional inicial de un Titulado
Técnico del Sistema Educativo la travesía necesita de un mínimo recorrido.
5
I. FINALIDADES
Este recorrido es el que nos llevará al desarrollo de programas de aplicación
de control electrónico en diferentes contextos.
Para ello se comenzará recordando el concepto general de lo que se puede
entender por sistema electrónico, definiendo un modelo en el que la lógica
de control tendrá una parte que está soportada por programación: esto se
aborda en los puntos 1 y 2 de la sección de Conocimientos Previos.
Dado que el soporte que se va a utilizar para el estudio de los sistemas
programables es la plataforma Arduino, el punto 3 de la sección de
Conocimientos Previos se dedica por completo a presentar esta plataforma,
siendo el más extenso por el número de ítems que resulta necesario
abordar.
Sin pretender realizar una descripción completa, tanto de funcionalidades
como a nivel de detalle, la descripción de la plataforma Arduino UNO se
divide en tres partes:
▪ La primera parte está dedicada a la descripción del hardware de la placa,
esto incluye cierto conocimiento del microcontrolador que incorpora, el
ATmega328P, así como otros aspectos relacionados con los contextos de
aplicación: el manejo de protocolos de comunicación serie y las
posibilidades de conectividad de la placa, por ejemplo.
6
I. FINALIDADES
▪ La segunda parte se ocupa de presentar el contexto de la programación y
las herramientas de software para su desarrollo. Dado que la labor de
programación de sistemas y dispositivos, en general, es un campo muy
amplio y diverso, se ha realizado una breve exposición de contexto
focalizando la atención en las tareas de programación más afines al perfil
de un técnico electrónico.
▪ La tercera parte se dedica a presentar una brevísima “imagen” de parte
del conjunto de los recursos disponibles dentro de la plataforma Arduino
que permitirán ampliar el campo de aplicaciones electrónicas.
Se ha de tener presente que nuestros elementos básicos de partida para el
desarrollo de proyectos electrónicos serán la placa de hardware Arduino
UNO R3 y el Entorno Integrado de Desarrollo (el Software de Arduino), pero
para completar aplicaciones concretas será necesario disponer de otros
elementos: placas supletorias conectables a la placa básica UNO
especializadas en alguna aplicación, sensores, actuadores y en general un
conjunto de componentes electrónicos y de otra índole que serán
imprescindibles para configurar la aplicación o proyecto final en cada caso.
Los puntos 4 y 5 de la sección de Conocimientos Previos describen el
proceso de instalación del Software Arduino y el reconocimiento de la placa.
7
I. FINALIDADES
Para finalizar, el punto 6 de la sección de Conocimientos Previos se dedica a
describir el desarrollo del primer programa.
Sin lugar a dudas el aprendizaje de las técnicas de programación, aún
focalizando para un lenguaje y plataforma específicos, daría para un extenso
curso dedicado sólo a ello. Aquí no nos resulta posible estudiar la
programación de manera “aislada” aplicando grandes abstracciones
generales. El criterio seguido para el estudio de la programación ha sido
distribuirlo en contexto según vayan presentándose las necesidades. Para
ello se irán intercalando secciones diferenciadas y numeradas que
progresivamente irán completando un conocimiento básico de la
programación orientada a microcontroladores: Elementos de Programación
I , Elementos de Programación II , ...

8
I. FINALIDADES (síntesis)
▪ Presentar un modelo básico para la definición genérica de un sistema
electrónico.
▪ Definir el fundamento de un sistema electrónico con lógica programable
basada en microcontroladores.
▪ Estudiar los aspectos básicos, de hardware y de software, de la
plataforma electrónica Arduino que se utilizará como base de partida para
el aprendizaje de la programación de microcontroladores y el desarrollo
de proyectos electrónicos de aplicación.
▪ Describir el proceso de instalación del Software de Desarrollo.
▪ Mostrar el proceso de conexión y reconocimiento de la placa electrónica
de desarrollo para la plataforma Windows.
▪ Aprender los primeros elementos de programación para el desarrollo de
los primeros programas para el µC ATMEGA328P.

9
II. CONOCIMIENTOS PREVIOS
1. Modelo general para un sistema electrónico.
2. Sistemas programables basados en microcontroladores.
3. Entorno de desarrollo de aplicaciones electrónicas con
Arduino.
LA PLACA BASE DE HARDWARE LIBRE
EL MICROCONTROLADOR ATMEGA328P
LA MEMORIA EN EL MICROCONTROLADOR ATMEGA328P
EL CONJUNTO DE REGISTROS INTERNOS DEL µC ATMEGA328P
PROTOCOLOS DE COMUNICACIÓN SERIE
LA CONEXIÓN USB DE LA PLACA ARDUINO
ENTRADAS Y SALIDAS DIGITALES EN LA PLACA ARDUINO UNO
ENTRADAS ANALÓGICAS EN LA PLACA ARDUINO UNO
SALIDAS ANALÓGICAS EMULADAS EN LA PLACA ARDUINO UNO
EL CONECTOR ICSP DE LA PLACA ARDUINO UNO
EL RELOJ DE LA PLACA ARDUINO UNO
EL BOTÓN DE REINICIO (RESET)
EL ENTORNO DE DESARROLLO INTEGRADO: IDE
LENGUAJES DE ALTO NIVEL Y LENGUAJES ENSAMBLADORES
10
II. CONOCIMIENTOS PREVIOS
DISPOSITIVOS LÓGICOS PROGRAMABLES
MICROPROGRAMACIÓN
EL IDE PARA LA PLATAFORMA ARDUINO
PLACAS BASE Y PLACAS SUPLETORIAS EN LA PLATAFORMA ARDUINO
4. Instalación del Software Arduino.
5. Conexión y reconocimiento de la placa Arduino.
6. Desarrollo del primer programa.
Elementos de Programación I
Elementos de Programación II
Apéndice I. Acrónimos y otros términos
En el lenguaje científico-técnico en general, y particularmente en electrónica,
telecomunicaciones e informática, el uso de acrónimos y términos de origen inglés es
abrumadoramente habitual. Para ayudar a poner orden en este “enjambre” de acrónimos
y términos, se ha introducido un apéndice que recoge la mayor parte de los que se han
utilizado en esta unidad didáctica, ordenados alfabéticamente y a los que se les ha
añadido una breve descripción para interpretar su significado: sin pretender un gran rigor,
cosa difícil, dada la variedad de interpretaciones según contexto en muchos de los casos.
11
1. Modelo general para 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 señales eléctricas que pueden ser tratadas por la circuitería
interna de procesamiento y 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 procesarán las señales
eléctricas de acuerdo con las exigencias impuestas por la aplicación.
12
1. Modelo general para un sistema electrónico
El tratamiento de dichas señales dependerá tanto del diseño de los
diferentes componentes “físicos” del sistema (hardware/circuitos), como
del conjunto “lógico” de instrucciones (software/programas) que dicho
hardware tenga pregrabado y sea capaz de ejecutar de forma autónoma,
todo ello condicionado, como se ha mencionado, por las especificaciones
técnicas derivadas de las exigencias de la aplicación de que se trate.
Los actuadores transforman las señales eléctricas procesadas 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 circuitería de procesamiento tiene a los sensores como elementos de
entrada y a los actuadores como elementos de salida. Los sensores y
actuadores entran en la categoría de los llamados transductores. Un
transductor es un dispositivo capaz de transformar o convertir una
determinada manifestación de energía de entrada, en otra diferente a la
salida: un micrófono y un altavoz son transductores electroacústicos, el
micrófono convierte la energía acústica (oscilaciones en la presión del aire)
en energía eléctrica (variaciones de tensión), y el altavoz hace lo contrario,
transforma la energía eléctrica en acústica.
13
2. Sistemas programables basados en
microcontroladores
Un microcontrolador (µC) es un circuito integrado o “chip” que tiene la
característica de ser programable.
• Circuito Integrado (CI o IC = Integrated Circuit). Dispositivo electrónico que
integra en un solo encapsulado un gran número de componentes.
Un microcontrolador es capaz de ejecutar de forma autónoma una serie de
instrucciones (programa) previamente definidas. 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.
Un microcontrolador (también llamado comúnmente “micro”) ha de incluir
en su interior al menos tres elementos o unidades básicas:
▪ Unidad Central de Proceso (UCP o CPU = Central Processing Unit): 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 o no ser utilizados por la siguiente instrucción.
▪ Unidad de memoria (UM o MU = Memory Unit): pueden incluir diferentes
14
2. Sistemas programables basados en
microcontroladores
tipos de memoria y en general son 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
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 o no volátiles,
y las que su contenido se pierde al dejar de recibir la alimentación,
llamadas volátiles. Según la naturaleza de la información a guardar, esta se
grabará en un tipo u otro de memoria mediante los mecanismos previstos
de acceso a la memoria.
▪ Unidad (o puertos) de Entrada/Salida (Unidad de E/S o I/O Unit =
Input/Output Unit): constituyen un conjunto de patillas o pines (registros)
que permiten la comunicación del 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 y así interactuar con el medio físico. En muchos
modelos de microcontroladores (µC) estas patillas son configurables como
15
2. Sistemas programables basados en
microcontroladores
entrada o como salida mediante las instrucciones adecuadas, de ahí que
las llamemos genéricamente como líneas de E/S.
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 o
programa. Este programa irá teniendo en cuenta en cada momento la
información obtenida y enviada por las patillas de E/S y reaccionará en
consecuencia. Lógicamente, las instrucciones serán diferentes según el uso
que se le quiera dar al microcontrolador, y será el contexto de la aplicación
el que determinará el desarrollo del programa.
Son infinidad los productos o equipos que incorporan algún tipo de
microcontrolador con el fin de aumentar sus prestaciones, reducir su
tamaño y coste, mejorar su fiabilidad y disminuir el consumo. Así, podemos
encontrar microcontroladores en la industria de los electrodomésticos, de
los periféricos de los sistemas informáticos, del automóvil, de los equipos
electrónicos y de comunicaciones en general, etc.
Observación. Conceptos como CPU, E/S y unidades de memoria, por poner algunos
ejemplos, pueden adquirir significados con matices diferentes en otros contextos.
16
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Podemos considerar que un entorno “global” de desarrollo de aplicaciones
electrónicas con Arduino está constituido por tres entidades básicas:
▪ Una placa base de hardware libre (o de fuente abierta).
▪ Un entorno que facilite el desarrollo del software de aplicación.
▪ Placas base, placas supletorias y otros componentes: las placas
supletorias y otros componentes completarían las aplicaciones finales.
LA PLACA BASE DE HARDWARE LIBRE
Es una placa de circuito impreso que incorpora un microcontrolador
reprogramable, otros componentes necesarios para el funcionamiento y
utilización de la placa, y diferentes tiras de conectores (1xN pines hembra)
soldadas a la placa y conectados sus contactos a las líneas de E/S del
microcontrolador, permitiendo de esta manera la conexión de diferentes
sensores, actuadores y placas supletorias para configurar
la aplicación final que se le vaya a dar al sistema.
• Placa de circuito impreso (PCB = Printed Circuit Board). Las PCBs
son superficies fabricadas de un material no conductor (fibra de
vidrio u otros materiales) sobre las cuales aparecen laminadas
Tira de 1x10
17
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
(pegadas) pistas de material conductor (normalmente cobre). Mediante estas
pistas se realiza la conexión eléctrica entre los diferentes componentes
electrónicos soldados a la placa. Las PCBs permiten una construcción compacta y
estable de los circuitos o sistemas electrónicos en general.
Existe una gran diversidad de placas Arduino entre las llamadas oficiales y
las no oficiales, estas últimas pretenden guardar la compatibilidad con las
primeras. Pueden diferenciarse en el tamaño físico, en la configuración de
contactos que ofrezcan, en el microcontrolador que incorporen, con la
repercusión que esto puede representar en cuanto a potencia y cantidad de
memoria disponible, etc. Según las necesidades del proyecto que se vaya a
desarrollar habrá que realizar un análisis comparativo de las prestaciones
para elegir la placa más idónea para cada proyecto.
Los microcontroladores incorporados en las diferentes placas Arduino
suelen pertenecer a la misma familia tecnológica, por lo que su
funcionamiento puede ser bastante parecido. Los microcontroladores
elegidos son los fabricados por Atmel Corporation con arquitectura AVR. De
entre las distintas placas se ha elegido la llamada ARDUINO UNO, por ser
una de las más documentadas y utilizadas en el aprendizaje del desarrollo
de proyectos electrónicos con microcontroladores.
18
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino

19
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
• Arquitectura AVR. La arquitectura AVR fue concebida por dos estudiantes en el
Norwegian Institute of Technology (Instituto Noruego de Tecnología), y
posteriormente refinada y desarrollada en Atmel Norway, la empresa subsidiaria
de Atmel, fundada por los dos arquitectos del chip. No parece estar claro el origen
de la denominación AVR para esta arquitectura de los microcontroladores de
Atmel: AVR como Advanced Virtual RISC o debido a sus diseñadores Alf y Vegard
RISC. En todo caso la arquitectura AVR se basa en otra arquitectura denominada
RISC: Reduced Instruction Set Computer (computador con conjunto reducido de
instrucciones, reducido puede referirse más a la sencillez de las instrucciones que a
su número).
En un conocimiento más amplio de los sistemas programables entraría el estudio
de lo que se llama Arquitectura de Computadores, estudio que puede abordarse a
diferentes niveles, desde la arquitectura del sistema “completo” a la arquitectura
de determinados componentes clave en el diseño del sistema. En la fabricación de
microcontroladores (simplificando: microcomputadores en un solo chip) se aplican
diferentes concepciones en cuanto a su arquitectura interna. Estas concepciones
afectan a la implementación del sistema de registros internos, a la estructura del
sistema de buses (conjuntos funcionales de líneas de comunicación), al manejo y
forma de ejecutarse las instrucciones, etcétera.
En nuestro estudio aparecerán aspectos relacionados con la arquitectura, pero no
tenemos como objetivo realizar una exposición comparativa de las mismas.
20
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino Diagrama de bloques parcial
EL MICROCONTROLADOR ATMEGA328P de la arquitectura AVR
Patillaje o diagrama de pines

Encapsulado PDIP-28 patillas:


Plastic Dual In-Line Package
21
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La Plataforma Arduino se implementa en diferentes placas de hardware
libre o de fuente abierta (open-source). La idea del hardware libre no está
tan desarrollada como en el caso del software libre, pero poco a poco va
afianzándose. La OSHWA (Open Source HardWare Association, Asociación
para el Hardware de Fuente Abierta) menciona que:
El «Hardware de fuentes abiertas» es un término para denominar artefactos
tangibles – máquinas, dispositivos, u otros objetos del mundo físico – cuyo diseño ha
sido publicado de forma tal que cualquier persona pueda fabricar, modificar,
distribuir y usar esos objetos. Esta definición tiene la intención de proveer una guía
para el desarrollo y evaluación de licencias para «Hardware de fuentes abiertas».
Para conseguir esto, la comunidad ha de poder tener acceso a los ficheros
esquemáticos del diseño del hardware. 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, ya que consultando estos ficheros se puede conocer qué
componentes individuales integran el hardware y qué interconexiones
existen entre cada uno de ellos. Estos ficheros están disponibles bajo la
licencia Creative Commons Attribution Share-Alike. Así pues, uno mismo se
podría construir su propia placa Arduino.
22
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
• Reconocimiento (Attribution): En cualquier explotación de la obra
autorizada por la licencia hará falta reconocer la autoría.
• Compartir Igual (Share alike): La explotación autorizada incluye la creación
de obras derivadas siempre que mantengan la misma licencia al ser
divulgadas.

Ya se ha comentado que existen varios tipos de placas Arduino. No obstante,


existe un modelo de placa que es probablemente el más utilizado
actualmente y el que emplearemos para el estudio de los sistemas
programables: la Placa Arduino UNO. Desde su aparición ha sufrido tres
revisiones, por lo que el modelo actual se suele llamar UNO Rev3 o
simplemente UNO R3, cuya imagen ya se ha mostrado anteriormente, en la
que podía observarse el microcontrolador que incorpora, el ATMEGA328P,
con encapsulado PDIP-28 insertado en un zócalo estando éste soldado a la
placa. La misma placa está disponible con el mismo microcontrolador pero
con encapsulado SMD = Surface Mount Device, Dispositivos de Montaje
Superficial), en este caso el µC está soldado directamente a la placa.
23
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En las siguientes imágenes pueden observarse los modelos Convencional
PDIP y Edición SMD:
Convencional (PDIP) Edición SMD

En el modelo de microcontrolador ATmega328P que incorpora la placa


Arduino UNO, la “P” significa que este chip incorpora la
tecnología de bajo consumo “picoPower Technology”
(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”).
24
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Anteriormente ya se mostró el patillaje para el encapsulado PDIP y un
diagrama de bloques simplificado de la arquitectura interna del
microcontrolador ATMEGA328P. Ahora vamos a describir someramente la
funcionalidad de parte de su patillaje.
La alimentación se aplica al integrado en
las patillas 7, 8 y 22: VCC en la patilla 7 y
GND en las patillas 8 y 22.
Las patillas 20 y 21 etiquetadas como AVCC
y AREF respectivamente, tienen aplicación
cuando se hace uso del CAD, Convertidor
Analógico/Digital (A/D Converter): AVCC se
emplea como alimentación suplementaria para el CAD interno del chip y
AREF como referencia analógica para dicho convertidor.
El resto de patillas del integrado 28 − 5 = 23 se agrupan en tres puertos
denominados Port B (8 bits), Port C (7 bits) y Port D (8 bits), que además de
su función genérica de entrada/salida, sus líneas pueden ser empleadas para
desempeñar otras funciones especializadas. Las funciones especializadas
que puedan desempeñar se estudiarán en contexto llegado el caso.
25
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
LA MEMORIA EN EL MICROCONTROLADOR ATMEGA328P
La arquitectura AVR presenta dos espacios principales de memoria: el
espacio de datos (volátil) y el espacio de programa (no volátil). Además de
estos dos espacios este microcontrolador también dispone de un segmento
de memoria de datos de tipo EEPROM (no volátil).
• Memoria EEPROM. También conocidas como E²PROM son las siglas de Electrically
Erasable Programmable Read-Only Memory (ROM programable y borrable
eléctricamente). Es un tipo de memoria ROM (memoria de solo lectura) que puede
ser programada, borrada y reprogramada eléctricamente, a diferencia de la
EPROM que ha de borrarse mediante un aparato que emite rayos ultravioleta. Son
memorias no volátiles.
Los tres espacios de memoria del microcontrolador ATmega328P:
▪ Memoria Flash de Programa. Es el espacio de memoria reservado para el
programa que tiene que ejecutar el microcontrolador. Tiene una capacidad
de 32 KB (32 kilobytes o 32 768 bytes).
• Memoria Flash. Este tipo de memoria deriva de la EEPROM, y al igual que ésta
es no volátil y regrabable. Fue Inventada en 1984 por el japonés Fujio Masuoka y
no ha dejado de desarrollarse hasta el momento. Una de sus tecnologías se
fundamenta en transistores con estructuras de puertas lógicas NOR y NAND.
26
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En la placa Arduino UNO se reservan 512 bytes de la memoria flash para el
denominado gestor de arranque o “bootloader”. El gestor de arranque es
un pequeño programa que viene pregrabado de fábrica en las placas
Arduino. Este software pregrabado lo clasificamos dentro de la categoría
denominada Firmware.
• Firmware. Conjunto de instrucciones de un programa informático que se
encuentra grabado en una memoria ROM, Flash o similar. Estas instrucciones
determinan la “lógica primaria” que ejerce el control de la circuitería electrónica
de un dispositivo o aparato. El nombre hace referencia a programación en firme,
se puede decir que forma parte del hardware porque está muy próximo a él
(interactúan) y que forma parte del software porque está desarrollado mediante
algún lenguaje de programación. Es habitual que el firmware se encargue de los
“procesos primarios” en tareas de arranque, inicialización y configuración de
dispositivos. Un ejemplo lo tenemos en la BIOS (Basic Input-Output System,
Sistema Básico de Entrada y Salida) de un ordenador.
Por lo tanto, a los 32 KB de memoria flash hay que restarle un bloque de
512 bytes, llamado “bootloader block”. Este firmware permite la gestión
automática del proceso de grabación, en la memoria flash del
microcontrolador, del programa de aplicación que tendrá que ejecutar.
27
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Más concretamente, el gestor de arranque se encarga de recibir el
programa de aplicación del IDE Arduino (Entorno Integrado de Desarrollo o
Software de Arduino), normalmente mediante una transmisión realizada a
través de una conexión USB entre el computador y la placa, para proceder
a su almacenamiento en la memoria flash del microcontrolador, todo ello
de forma automática y sin necesidad de conocer los detalles de cómo se
realiza este proceso. Una vez realizado el proceso de grabación, el gestor
de arranque termina su ejecución y el microcontrolador pasa a ejecutar de
forma permanente (mientras tenga alimentación) el programa de
aplicación que ha sido grabado en su memoria flash.
Si se adquiere un µC ATmega328P por separado, lo normal es que venga
sin gestor de arranque pregrabado, por lo que deberemos incorporarle
uno para hacer uso de él, a partir de entonces, en la placa; o bien, no
utilizar un gestor de arranque y cargar los programas en la memoria flash
directamente. En ambas situaciones necesitaríamos emplear un aparato
específico: en el primer caso para cargar el bootloader y en el segundo
cada vez que queramos reprogramar el microcontrolador. Este aparato
recibe el nombre de Programador ISP (In System Programming). El gestor
de arranque facilita la programación de Arduino con un simple cable USB.
28
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
¿Cómo está organizada la memoria flash de programa del µC
ATmega328P?... Y ¿cómo se accede a ella?
Ya se ha expuesto que la capacidad de la
memoria flash de programa de este µC,
expresada en bytes, es de 32 kilobytes
(32 768 bytes), pero no está organizada en

memoria flash se divide, en algunos

arranque y otra de aplicación. No


abordaremos aquí estos detalles.
Por seguridad del software, la
bytes, sino en palabras de dos bytes

µC, en dos secciones: una de


(16 bits). Esta organización se expresa
como 16 K x 16, interpretándose esto como
16 384 posiciones de memoria de 16 bits
cada una, lo que exige un bus de
direcciones de 14 bits (214 = 16 384). En
la gestión de las direcciones de acceso
interviene un registro interno llamado
Contador de Programa (PC, Program
Counter) con un ancho de 14 bits.
Las instrucciones AVR tienen un ancho de
16 o 32 bits, esta organización y mecanismo de direccionamiento permite
que algunas instrucciones de 16 bits se ejecuten en un solo ciclo de reloj. 29
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ Memoria SRAM de Datos. Es el espacio de memoria reservado para los
datos variables que pueda usar el programa así como para almacenar
temporalmente resultados de su ejecución. Hay que recordar que su
contenido se borra cuando se corta la alimentación al microcontrolador.
Tiene una capacidad de 2 KB (2048 bytes).
• Memoria SRAM (RAM estática). Son las siglas de Static Random Access
Memory, memoria estática de acceso aleatorio, es un tipo de tecnología de
memoria RAM basada en semiconductores, capaz de mantener los datos
mientras siga alimentada (volátil) sin necesidad de circuito de refresco. Este
concepto surge en oposición al de memoria DRAM (Dynamic RAM, RAM
dinámica), con la que se denomina al tipo de tecnología RAM basada en el
principio de los “condensadores” (almacenamiento de carga), que sí necesita
refresco dinámico de sus cargas. El acceso aleatorio hace referencia a que las
posiciones de memoria pueden ser escritas o leídas en cualquier orden, en
contraposición a las memorias de acceso secuencial.
▪ Memoria EEPROM de Datos. Ya citada, es no volátil y se utiliza para
almacenar datos que se desea permanezcan grabados una vez apagado el
microcontrolador para poderlos usar posteriormente en siguientes
reinicios. Tiene una capacidad de 1 KB (1024 bytes), por lo que se puede
entender como una tabla de 1024 posiciones de un byte cada una. 30
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
EL CONJUNTO DE REGISTROS INTERNOS DEL µC ATMEGA328P
En el estudio de la arquitectura interna tanto de microprocesadores µP
(CPU integrada) como de microcontroladores µC (microcomputador
integrado) aparece un conjunto de registros internos, bien sea de propósito
general o de propósito específico, que son transcendentales en la
concepción del funcionamiento del sistema.
Observación. Los ordenadores o computadores, atendiendo a su capacidad de
proceso, se han venido clasificando en Supercomputadores, Computadores (o
mainframes), Minicomputadores y Microcomputadores, caracterizándose estos
últimos porque su Unidad Central de Proceso (CPU) estaba alojada en un circuito
integrado llamado microprocesador. Cuando la CPU, la Unidad de Memoria y la
Unidad de Entrada y Salida, entre otras cosas, de un microcomputador, se integran
en un solo circuito integrado, hablamos de microcontrolador (microcomputador
integrado o monopastilla). No obstante, todas estas consideraciones hay que
tomarlas con “reserva”, pues ciertos conceptos cambian con el desarrollo de la
tecnología y admiten diferentes interpretaciones: por ejemplo, emplear la
denominación de CPU para hacer referencia a la unidad central bien sea en formato
de sobremesa o de torre es un término popular que tiene o tendrá su vigencia
durante un cierto tiempo. A todo esto hay que añadirle la extraordinaria diversidad
de microprocesadores y microcontroladores: en arquitectura interna, capacidad, etc.
31
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La arquitectura interna que tenga un µC determinará el conjunto de
registros de propósito específico que incluirá. Algunos ejemplos:
▪ Registro de instrucción (Instruction Register). Almacena temporalmente
el código binario de la instrucción en curso.
▪ Contador de Programa (Program Counter). Puede considerarse un registro
que actúa como contador binario, su misión es apuntar en secuencia a las
direcciones de memoria de las instrucciones del programa. Se va
incrementando secuencialmente en sincronismo con el reloj del sistema.
Este funcionamiento secuencial puede ser modificado por diferentes
eventos: instrucciones de salto, interrupciones, etc.
▪ Registro de estado. Almacena en sus bits diferentes eventos (demanda de
una interrupción, desbordamiento en una operación aritmética, etc.) que
pueden ser usados por algunas instrucciones para la toma de decisiones.
▪ Puntero de pila. La Pila suele ser una estructura de memoria de acceso
secuencial tipo LIFO (Last In, First Out: Último en Entrar, Primero en Salir)
gestionada por un registro que apunta a su cima. Se emplea para guardar
datos del contexto del programa en un punto de ejecución para recuperar
dicho contexto a la vuelta de una interrupción o ruptura de secuencia.
32
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
De igual manera la arquitectura interna del µC determinará el banco de
registros de propósito general (general purpose registers).
Los registros de propósito general son espacios de memoria existentes
dentro de la propia CPU del microcontrolador. Sirven para albergar datos
cargados previamente desde la unidad de memoria (la SRAM o la EEPROM,
por ejemplo) necesarios para la ejecución de las instrucciones en curso y así
tenerlos disponibles en el momento adecuado, y también sirven para
almacenar temporalmente los resultados de las instrucciones recientemente
ejecutadas para emplearlos en algún instante posterior. Este banco de
registros puede considerarse como una cantidad de memoria de capacidad
muy limitada y con la que trabaja directamente y de la forma más rápida la
CPU. En el diseño de algunas arquitecturas algunos de estos registros
pueden tener asociadas otras funciones específicas: contener un operando
en operaciones lógicas o aritméticas y albergar por defecto el resultado
(acumulador), tomar parte en determinados modos de direccionamiento de
la memoria (como el direccionamiento indirecto), etc.
Absteniéndose de sacar conclusiones generales, el tamaño de algunos de
estos registros, junto con el ancho del bus de datos interno y el ancho con el
33
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
que opera la Unidad Aritmético-Lógica (ALU, Arithmetic Logic Unit)
determinan una de las características más importantes de los
microcontroladores, pues dan una idea de su capacidad de computo y
velocidad de ejecución.
Simplificando mucho, un microcontrolador con
registros generales, bus de datos y ancho de ALU
el doble de grandes que otro, podría procesar el
doble de cantidad de datos en el mismo tiempo
trabajando al mismo ritmo (frecuencia de reloj).
Es tan importante esta característica que cuando
hablamos de un microcontrolador de 8 bits o de
32 bits, estamos haciendo referencia al ancho de
bits citado. El µC ATmega328P entra dentro de la
categoría de los microcontroladores de 8 bits.
En la arquitectura interna del µC ATmega328P
se dispone de una estructura o banco de registros
internos, de la que sólo vamos a mencionar
algunos aspectos.
34
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ El registro de estado (SREG, Status Register). El registro de estado
contiene información sobre el resultado de las instrucciones aritméticas o
lógicas que se acaban de ejecutar. Esta información puede usarse para
modificar el flujo del programa mediante instrucciones de salto
condicional que consultan el estado de bits específicos de este registro.
El registro de estado –SREG – tiene la siguiente definición:

Por ejemplo, los bits 0, 1 y 2 son los llamados Indicador de Acarreo (C,
Carry Flag), Indicador de Cero (Z, Zero Flag) e Indicador de Signo (N,
Negative Flag) respectivamente; estos indicadores se activan según el
resultado de determinadas operaciones aritméticas y lógicas, y luego
tenemos instrucciones que en función del estado de estos indicadores
actúan en consecuencia. Como se ve, existen otros indicadores con otros
propósitos. No pretendemos aquí hacer una descripción exhaustiva.
35
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ El banco de registros de propósito general. El µC ATmega328P dispone de
un banco de 32 registros de propósito general que soportan diferentes
esquemas de entrada/salida: un operando de salida de 8 bits y una
entrada de resultado de 8 bits, o dos operandos de salida de 8 bits y un
resultado de entrada de 16 bits, etc. No se pretende aquí profundizar más.
Address Los registros R26 al R31 también
(Direcciones de pueden emplearse como
MAPA DE estos registros
MEMORIA: punteros de 16 bits en técnicas
en el mapa de
es un concepto que
memoria)
de direccionamiento indirecto.
en los sistemas Los registros
programables son de 8 bits
describe la
distribución de las
posiciones de
memoria
disponibles, con sus
diferentes tipos y
propósitos, y sus
direcciones de
acceso. En un
“0x1B” es una forma
microcontrolador
puede estar de expresar un valor
implementado hexadecimal, en este
internamente, es
caso una dirección:
decir, en el chip.
0x1B = 00011011
36
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ El puntero de pila (Stack Pointer). La pila se usa para el almacenamiento
temporal de datos, para el almacenamiento local de variables y para el
almacenamiento de direcciones de retorno después de una interrupción o
una llamada a subrutina.
• Interrupciones y subrutinas. Aunque esto exigiría un desarrollo mucho más amplio
se van a describir brevemente estos conceptos. Tanto las interrupciones como las
llamadas a subrutinas suponen una ruptura de la secuencia del programa “principal”,
es decir, en el momento de producirse el flujo del programa se corta para irse a otra
zona de la memoria donde se encuentra un subprograma específico que atiende a la
interrupción o a la subrutina demandada. Una vez ejecutado este subprograma se
debe retornar al programa principal y continuar con el mismo en las mismas
condiciones que cuando fue interrumpido, de ahí la necesidad de salvaguardar el
“contexto” del programa principal en la Pila en el momento de la ruptura de
secuencia y recuperarlo al retornar de dicha ruptura. Es habitual, aunque existen
variantes, que las interrupciones sean activadas por hardware, mediante líneas
(patillas) físicas del µC y las subrutinas sean invocadas por instrucciones al efecto
(salto a subrutina). La filosofía de la ruptura de secuencia admite el anidamiento, es
decir, que podemos gestionar el anidamiento de interrupciones y de subrutinas (unas
dentro de otras), es por eso que la Pila se implementa como una memoria de tipo
LIFO, dado que estas estructuras de memoria de acceso secuencial se prestan de
forma eficaz para gestionar estos procesos.
37
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La denominación de Pila tiene analogía con una máquina de apilar platos,
el último plato colocado es el primero que está disponible para sacarlo,
pues si seguimos colocando platos vamos empujando, pero el último
colocado siempre será el primero disponible.
El puntero de pila en este µC siempre apunta a la cima de la Pila, esta
puede implementarse en un área de la memoria SRAM de datos, donde
podrían localizarse las posiciones de memoria asociadas a los procesos de
interrupción o llamadas a subrutina. El puntero de pila se implementa en
el espacio de entrada/salida como dos registros de 8 bits. Para muchas
aplicaciones será suficiente con emplear el SPL (Stack Pointer Low). Existe
un conjunto de instrucciones asociadas con el funcionamiento de la Pila
que permiten gestionar las necesidades derivadas de las interrupciones y
las llamadas a subrutinas. No es el propósito profundizar en esto. RAMEND is a
label that
represents
the address
of the last
memory
location in
SRAM

38
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
PROTOCOLOS DE COMUNICACIÓN SERIE
La placa Arduino UNO, y en particular el microcontrolador ATmega328P,
puede establecer una comunicación de datos con otros dispositivos o
sistemas electrónicos. Una de las maneras es mediante la aplicación de un
protocolo de comunicación serie de datos, para lo cual el microcontrolador
empleará algunas de sus líneas de entrada/salida. Se van a describir,
someramente, dos protocolos de comunicación serie que pueden
implementarse en la placa Arduino: El Protocolo I2C/TWI y el Protocolo SPI.
▪ El Protocolo I2C/TWI (Inter-Integrated Circuit/Two-Wire Interface). Es un
bus de comunicaciones serie síncrono muy utilizado en la industria para la
comunicación entre microcontroladores y sus periféricos u otros
dispositivos.
Resistencias de pull-up Línea de datos
Control del Bus VDD (Signal Data)
Rp
SDA
Señales SDA y SCL
SCL
referidas a una
masa común µC µC µC µC Línea de reloj
Master Slave Slave Slave (Signal Clock)
39
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Aunque ahora no se abordarán los detalles, este protocolo se fundamenta
en el modelo maestro-esclavo (master-slave) y utiliza dos líneas para la
transferencia de información: la línea SDA (Signal DAta) que sirve para
transferir los datos (los 0s y los 1s), y la línea SCL (Signal CLock) que sirve
para enviar la señal de reloj. Sin otras consideraciones, esta concepción
hace que el bus sea semidúplex (o half-dúplex), es decir, permite la
comunicación bidireccional pero no simultáneamente. Aunque en muchas
descripciones se obvia, también habrá otras dos líneas correspondientes a
la alimentación del sistema: VDD o VCC y la masa o referencia de potencial
(GND) para todos los dispositivos. Las líneas SDA y SCL son del tipo
drenador o colector abierto, por lo que por si mismas sólo podrán forzar el
estado “0”; para poder forzar el estado “1”, necesitarán resistencias de
polarización a VDD o VCC, es decir, resistencias de pull-up (Rp).
Cada dispositivo conectado al bus I²C (otra denominación) tiene una
dirección única que lo identifica respecto al resto de dispositivos, y puede
estar configurado como “maestro” o como “esclavo”. Un maestro es el que
inicia la transmisión de datos y genera la señal de reloj, sin ser necesario
que el maestro sea siempre el mismo dispositivo: esta característica se la
podrán ir intercambiando los dispositivos que tengan esa capacidad.
40
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ El Protocolo SPI (Serial Peripheral Interface). También es un bus que
permite controlar dispositivos electrónicos que acepten una comunicación
digital serie sincronizada por un reloj. Se fundamenta igualmente en el
modelo maestro-esclavo, donde en principio cualquier dispositivo puede
hacer de maestro, siendo éste el que controla la transmisión y genera la
señal de reloj. Este bus fue desarrollado por Motorola para establecer una
comunicación serie síncrona dúplex o full-dúplex (bidireccional simultánea)
entre dispositivos maestros y esclavos: en un momento determinado sólo
un maestro y un esclavo tienen acceso al bus. La configuración básica la
determina la conexión de un maestro y un esclavo como muestran los
siguientes diagramas conceptuales:
Otra forma
de verlo

SCK Serial Clock SCLK Serial Clock


SDI Serial Data In MOSI Master Out Slave In
SDO Serial Data Out MISO Master In Slave Out
Una forma
SS Slave Select SS Slave Select
de verlo
41
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Se observa que al tener dos líneas de datos separadas se puede establecer
una conexión bidireccional simultánea. Por otra parte, en el protocolo del
bus SPI los dispositivos no tienen asignada una dirección, por lo tanto es el
maestro el responsable de activar una línea física del esclavo con el que
desee comunicarse (SS, Slave Select); normalmente la activación es con
nivel bajo. También podemos emplear diferentes esquemas conceptuales
para representar una configuración con diferente número de esclavos:

Esquema genérico con un maestro


Esquema con un maestro y tres esclavos. La señal de reloj y múltiples esclavos. Obsérvese
SCK la genera el maestro, y este ha de tener tantas líneas SS, cómo están interconectadas entre
Slave Select, como esclavos quiera manejar. Aquí CS (Chip si las líneas MOSI y las líneas MISO
Select) en los esclavos es selección de circuito (integrado). para esta configuración.
42
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ Las líneas del µC ATmega328P para los buses I2C y SPI. Ya se ha visto que
ambos buses se fundamentan en el modelo maestro-esclavo o también
llamado principal-subordinado. Las patillas o pines correspondientes a
estos buses en el microcontrolador ATmega328P son las resaltadas en la
figura.
Las líneas SDA y SCL del bus I2C son las patillas 27 y 28 respectivamente.
Las líneas SS, MOSI, MISO y SCK del bus SPI son las patillas 16, 17, 18 y 19,
respectivamente. Si se necesitaran más líneas SS (porque haya más de un
dispositivo esclavo conectado
al bus), se podrían utilizar
otros pines de E/S del µC
siempre que se respete el

ATMEGA328P
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, si este es el convenio.
43
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
LA CONEXIÓN USB DE LA PLACA ARDUINO
La conexión USB (Universal Serial Bus, Bus Serie Universal) de la placa
Arduino sirve de alimentación eléctrica (con sus limitaciones) y de medio de
transmisión de datos entre el ordenador y la placa. Este tráfico de
información (entre ordenador y placa Arduino) se realiza mediante la
utilización del protocolo USB, un protocolo de tipo serie que tanto el
ordenador como la placa deberán entender y manejar.
En la placa Arduino UNO el µC ATmega328P no se encarga directamente de
la comunicación USB con el ordenador, para ello cuenta con el apoyo de otro
microcontrolador que actúa como “traductor” que le facilita la
interpretación de la información transferida por el puerto USB sin que tenga
que ocuparse de los detalles del protocolo USB. Concretamente, el µC
ATmega328P incorpora un módulo USART (Universal Synchronous
Asynchronous Receiver Transmitter, Transmisor Receptor Asíncrono
Síncrono Universal) que le permite gestionar transmisiones serie de datos.
La placa Arduino UNO R3 dispone del µC ATmega16U2 que realiza la función
de “traductor” del protocolo USB a un protocolo serie que maneje el
módulo USART del µC ATmega328P.
44
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
El ATmega16U2 es un microcontrolador en sí mismo (con su propia CPU, con
su propia memoria –tiene 16 kilobytes de memoria Flash para su uso
interno, de ahí su nombre–, etc.) y por tanto podría realizar otras tareas que
no solo fuera la “traducción” del protocolo USB. No obstante, por defecto el
ATmega16U2 que viene incluido en la placa Arduino viene ya con el
firmware preprogramado para realizar exclusivamente la función de
“intérprete” para el ATmega328P.
El ATmega16U2 viene acompañado
en la placa Arduino por un reloj
oscilador a cristal que sirve para
mantener la sincronización con la
comunicación USB.

El ATmega16U2 y el cristal del reloj


45
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
ENTRADAS Y SALIDAS DIGITALES EN LA PLACA ARDUINO UNO
La placa Arduino UNO dispone de
14 pines hembra (configurables)
de entrada o salida digital
numerados desde el 0 hasta el 13.
Estas líneas son las que se
emplean para conectar los
sensores y actuadores u otros dispositivos que necesiten comunicarse con la
placa de alguna manera según el proyecto que se esté desarrollando.
Este conjunto de pines hembra digitales funcionan a 5 V y pueden manejar
una corriente de 40 mA como máximo de forma individual. Disponen de una
resistencia interna de pull-up cuya conexión o actuación se puede controlar
por software. No obstante, en la placa se agrupan los pines de tal manera
que los pines 0, 1, 2, 3 y 4 solo pueden aportar 100 mA y otros 100 mA el
resto de pines digitales (del 5 al 13).
El pin 0 (RX) y el pin 1 (TX) permiten que el µC ATmega328P pueda recibir
directamente datos en serie por el pin RX o transmitirlos por el pin TX. No
obstante, estos pines están conectados con el chip ATmega16U2 por lo que
46
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
los datos disponibles en la conexión USB también lo estarán en estos pines.
En los proyectos o prácticas que se realicen en las próximas unidades no se
emplearán los pines 0 (RX) y 1 (TX) para las aplicaciones.
Observación. Si quisiéramos entrar Descripción funcional de un pin
de un puerto de E/S denominado
en detalles de la “electrónica” que aquí genéricamente: Pxn
entra en juego en el manejo de las
características de las líneas de entrada
y salida, tendríamos que estudiar en
profundidad la arquitectura del
microcontrolador y cómo se controlan
sus características por programa. El Pxn
esquema siguiente sugiere la
complejidad. Al programar con la
ayuda de un entorno de desarrollo en un
lenguaje alejado del código máquina
(instrucciones nativas del microcontrolador),
y con una visión del hardware en diagrama
de bloques con mayor nivel de abstracción,
conseguimos “ocultar” o hacer transparentes
muchos detalles “íntimos” del funcionamiento
complejo de los sistemas.
Documentación del fabricante
47
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
ENTRADAS ANALÓGICAS EN LA PLACA ARDUINO UNO
La placa Arduino UNO tiene 6 entradas
analógicas disponibles en los pines hembra
etiquetados como “A0” hasta “A5” que
pueden recibir una tensión dentro del rango
de valores continuos de entre 0 V y 5 V.
No obstante, la electrónica de la placa solo trabaja con señales digitales, por
lo que será necesaria la conversión de los valores analógicos recibidos a
valores digitales equivalentes: es decir, se hace necesario aplicar un proceso
de digitalización mediante Convertidores Analógico-Digitales (CAD).
La placa permite manejar 6 entradas analógicas porque el µC ATmega328P
incorpora en la pastilla 6 canales de conversión analógico-digital de 10 bits.
El número de bits del conversor determina la llamada resolución de
conversión. Para 10 bits son posibles 210 = 1024 valores digitales distintos:
desde la combinación 0000000000 hasta la combinación 1111111111, en
decimal sería de 0 a 1023. Si por defecto el rango analógico de entrada es
5 V − 0 V = 5 V, la resolución se obtiene dividiendo el citado rango entre el
48
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
número total de combinaciones de salida posibles con 10 bits (1024):
Rango analógico 5V
R= = = 4,8828125 × 10−3 V ≅ 5 mV
Número de combinaciones 1024
Se observa que cada valor digital (combinación binaria) se corresponde o
abarca una “ventana” analógica de aproximadamente 5 mV. Si dibujáramos
la función de transferencia de un CAD obtendríamos una función en escalera
donde a cada ventana analógica (subrango de valores de cuantificación) le
corresponde un código digital. Por ejemplo, y de forma aproximada, los
primeros valores de la función serían los reflejados en la tabla.
Esto significa que en este caso las ventanas analógicas están aproximadas a 5
mV. Por ejemplo, todos los valores
analógicos comprendidos entre Ventana analógica Valor digital
5 mV y 10 mV serán codificados
mediante el código 0000000001. 0 𝑚𝑉 ≤ 𝑉𝑒 < 5 𝑚𝑉 0000000000
5 𝑚𝑉 ≤ 𝑉𝑒 < 10 𝑚𝑉 0000000001
𝑪ó𝒅𝒊𝒈𝒐 𝒅𝒊𝒈𝒊𝒕𝒂𝒍 = 𝒇 𝑽𝒆
𝑑𝑜𝑛𝑑𝑒 𝑉𝑒 𝑒𝑠 𝑢𝑛 𝑣𝑎𝑙𝑜𝑟 𝑑𝑒 𝑡𝑒𝑛𝑠𝑖ó𝑛 10 𝑚𝑉 ≤ 𝑉𝑒 < 15 𝑚𝑉 0000000010
𝑑𝑒𝑛𝑡𝑟𝑜 𝑑𝑒 𝑢𝑛𝑎 𝑣𝑒𝑛𝑡𝑎𝑛𝑎 𝑎𝑛𝑎𝑙ó𝑔𝑖𝑐𝑎 ⋯ ⋯
49
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Los seis canales internos de conversión analógico-digitales de 10 bits y las
patillas del µC ATmega328P que permiten acceder a los mismos (23, 24, 25,
26, 27 y 28) se observan en los siguientes diagramas:
Existen otras muchas consideraciones que

ATMEGA328P
se podrían hacer sobre la utilización y
posibilidades que ofrecen los canales de
conversión A/D del microcontrolador, pero
no es el objetivo presentarlas aquí.

ARQUITECTURA
ATMEGA328P

50
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
SALIDAS ANALÓGICAS EMULADAS EN LA PLACA ARDUINO UNO
En muchas aplicaciones los actuadores son de naturaleza analógica o bien
su actuación requiere que se le aplique una señal analógica (variación
continua dentro de un rango) para obtener el rango de variabilidad deseado
en la variable física que proporcione el transductor. Estas situaciones se
darían, por ejemplo: en la regulación de velocidad de motores, en el control
de la intensidad luminosa de algunos dispositivos, en distintos tipos de
accionamientos eléctricos, hidráulicos, neumáticos o térmicos, etc.
Si la unidad de gobierno que alberga la lógica de control de un sistema es de
naturaleza digital, como es el caso de que esté sustentada en la aplicación
de un microcontrolador, cuando se tenga que dar salida a las señales de
control sobre los actuadores, si estos exigen un control dentro de un rango
continuo de valores, varias son las alternativas según las exigencias:
▪ Emplear Convertidores Digitales Analógicos: CDA. Las señales digitales de
control que resulten de aplicar el algoritmo o programa de control pasan
por un convertidor digital analógico que proporcione el valor analógico
requerido por el actuador.
▪ Emular salidas analógicas mediante Modulación de Anchura de Pulsos. La
51
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
placa Arduino UNO no dispone
en sus tiras de pines hembra de
salidas analógicas propiamente
dichas, sino que utiliza algunos
pines hembra de salidas digitales
para emular un comportamiento
analógico. Estos pines son el 3, 5, 6, 9, 10 y 11, marcados con la etiqueta ~
Esto es así porque el µC ATmega328P incorpora 6 canales PWM (Pulse
Width Modulation, Modulación por Anchura de Pulsos). Esta técnica
permite emular la acción de una señal analógica mediante una onda
cuadrada (un tren de pulsos) de frecuencia constante donde podemos
variar la duración del estado de alta, por lo tanto tenemos control sobre el
ciclo de trabajo de la onda, o de otra manera, sobre su valor medio, lo que
permite a su vez modificar la cantidad de energía que se envía a una carga.
• Ciclo de Trabajo. En una onda periódica cuadrada básica el ciclo de trabajo
expresa el porcentaje en estado de alta de la señal. Si la frecuencia es constante,
por lo tanto el periodo también lo será, el periodo será la suma de la duración del
estado de baja más la duración del estado de alta (en este contexto duración del
pulso), con lo cual modificando la duración del pulso modificaremos el ciclo de trabajo
52
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino 𝑫𝑪 % =
𝑻
𝑻𝒐𝒏
𝟏𝟎𝟎 %
𝒐𝒏 + 𝑻𝒐𝒇𝒇
o duty cycle (DC). Si una salida digital de la placa Arduino
UNO puede adoptar valores de tensión entre 0 V y 5 V, es
posible generar sobre la misma una onda cuadrada de
frecuencia constante donde tengamos control sobre la
duración del pulso (estado de alta o Ton). Si este control
lo ejercemos a lo largo del tiempo obtenemos una
variación temporal del valor medio de la señal y por lo
tanto de la energía entregada a un transductor y este
actuará en consecuencia, variando la velocidad de un
motor de corriente continua o la intensidad luminosa de
un LED, por ejemplo.
Cuanto más cortos sean los pulsos menor será la
tensión promedio de salida, y cuanto más largos
sean los pulsos mayor será dicha tensión. Un
caso extremo sería cuando la duración del pulso
coincida con el período, en realidad en este caso
lo que tenemos es un valor constante que serían
los 5 V. La duración del pulso la podemos
cambiar en cualquier momento mientras la
señal se está emitiendo, en consecuencia la
tensión promedio puede ir variando a lo largo
del tiempo de forma continua.
53
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En los pines hembra de la placa Arduino UNO etiquetados como PWM se
obtiene una señal cuadrada de frecuencia aproximadamente igual a 490 Hz.
Cada uno de estos pines PWM tiene una resolución de 8 bits. Esto quiere
decir que mediante programación podremos establecer el valor medio de la
señal mediante la combinación binaria de 8 bits deseada. Con 8 bits
tenemos 256 combinaciones distintas: desde la 00000000 a la 11111111,
expresadas en decimal sería de 0 a 255. Con el valor 0 estaríamos emitiendo
unos pulsos extremadamente estrechos y generaríamos una señal
“analógica” equivalente a 0 V; con el valor 255 emitiríamos pulsos de la
máxima duración y generaríamos una señal “analógica” equivalente a 5 V.
La diferencia de tensión “analógica” existente entre dos valores promedio
contiguos se puede calcular dividiendo el rango de la tensión de salida entre
el número de valores promedio:
5𝑉−0𝑉
𝑆𝑎𝑙𝑡𝑜 𝑑𝑒 𝑡𝑒𝑛𝑠𝑖ó𝑛 = = 0,01953 𝑉 ≅ 19,5 𝑚𝑉
256
Los pines PWM están controlados por unos temporizadores internos del µC
ATmega328P y se puede modificar la frecuencia de la señal cuadrada. No
entraremos aquí a profundizar en estas cuestiones.
54
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
EL CONECTOR ICSP DE LA PLACA ARDUINO UNO
Existe una variedad extensa de dispositivos lógicos programables, entre
ellos los microcontroladores. A la hora de introducir el programa en estos
dispositivos se pueden aplicar diferentes técnicas o procedimientos:
▪ Realizar la programación en el proceso de fabricación del dispositivo. Los
dispositivos salen de fábrica con el programa instalado bajo pedido. Esta
forma de hacerlo podría justificarse en grandes tiradas de fabricación y
donde el diseño se tiene altamente validado. La empresa que va a
incorporar el dispositivo en una línea de sus productos encarga al
fabricante del dispositivo programable la entrega del mismo con el
programa pregrabado. Dependiendo de la naturaleza del dispositivo, la
programación puede contemplarse como una fase añadida y
particularizada temporalmente en el propio proceso de fabricación, o
como una tarea de programación masiva de los dispositivos que
conforman el pedido, realizada posteriormente al proceso de fabricación.
▪ Realizar la programación en el sistema (ISP, In System Programming). Esta
técnica se aplica cuando el diseño de los dispositivos programables
permite su programación estando instalados en el sistema de destino, por
55
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
lo que no requiere que el chip sea programado antes de ser instalado en el
sistema donde vaya a desarrollar su función. Esta característica permite a
los fabricantes de aplicaciones integrar la programación en las líneas de
producción, haciendo posible inclusive introducir modificaciones de código
durante una corrida de producción.
▪ Realizar la programación mediante el método ICSP (In Circuit Serial
Programming, Programación Serie en Circuito). Este procedimiento deriva
del anterior. Particularizando para la placa Arduino UNO, este método nos
permite programar directamente el µC ATmega328P sin necesidad de que
se tenga preinstalado un gestor de arranque (bootloader) del que ya se ha
hablado anteriormente. De esta manera se puede disponer de más espacio
libre en la memoria flash del µC, la que ocupa el gestor de arranque, y
poder ejecutar los programas de aplicación inmediatamente después de
que la placa reciba la alimentación, sin tener que esperar a la ejecución del
gestor de arranque, puesto que no existe.
No obstante, para poder programar el microcontrolador estando insertado
en la placa mediante el método ICSP, se necesita un Programador ISP.
Existe una amplia gama de programadores ISP que se pueden emplear.
56
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Un programador ISP de uso extendido es el formado por un dispositivo
que consta de un conector USB para conectar al ordenador y de una clavija
ICSP para conectar a la placa Arduino UNO. Este dispositivo puede
incorporar a su vez un determinado microcontrolador especializado en la
función de programador. Hay varios tipos de conectores ICSP, de 6 pines y
de 10 pines; la placa Arduino UNO incorpora un conector ICSP de 6 pines.

Funcionalidades de los
pines del conector ICSP

Conector ICSP

Programadores
ISP
57
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Cada uno de los pines del conector ICSP está conectado, mediante las pistas
correspondientes de la placa de circuito impreso, a una patilla concreta del
microcontrolador ATmega328P. El conector ICSP puede utilizar el protocolo
serie SPI, visto anteriormente, para comunicarse con el microcontrolador a
programar. Si observamos el diagrama de funcionalidades del conector ICSP,
entre otras, podemos observar las siguientes:
• Pin de alimentación de 5 V (Vcc).
• Pin de masa o referencia de potenciales GND.
• Pin de reloj (clock) que marca el ritmo al que se transfieren los datos, SCK.
• Pin de salida serie de datos, MISO.
• Pin de entrada serie de datos, MOSI.
• Pin de Reset conectado al pin SS del microcontrolador. La función de este último
pin es activar o desactivar la comunicación con el microcontrolador: mientras
reciba un voltaje ALTO no ocurrirá nada, pero cuando reciba un voltaje BAJO, el
ATmega328P detendrá la ejecución del programa que tenga grabado en ese
momento y se dispondrá a recibir una reprogramación.
En todo caso, la conexión de un programador ISP para programar el
microcontrolador mediante ICSP requiere del uso de un determinado
software ejecutado en el ordenador, asunto que no trataremos aquí.
58
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
EL RELOJ DE LA PLACA ARDUINO UNO
Para determinar el ritmo de ejecución de las instrucciones en el
microcontrolador, el ritmo de la lectura y escritura de los datos en la
memoria, el ritmo de adquisición de datos en los pines de entrada, el ritmo
de envío de datos hacia los pines de salida y en general, para controlar la
frecuencia de trabajo del microcontrolador, la placa Arduino UNO tiene un
oscilador o reloj, el cual funciona a una frecuencia de 16 millones de hercios
(16 MHz). Haciendo una simplificación, si cada instrucción se ejecutara en
un ciclo de reloj (𝑇 = 1Τ𝑓 = 1Τ 16 × 106 𝑠 −1 = 6,25 × 10−8 𝑠 = 62,5 𝑛𝑠), es
decir, en 62,5 nanosegundos, el microcontrolador sería capaz de realizar 16
millones de instrucciones cada segundo (tómese como una estimación).
Dentro del estudio de los osciladores, existen determinados elementos que
intervienen en la precisión y estabilidad de la frecuencia resultante: entre
ellos están los osciladores a cristal y los resonadores cerámicos. Los
primeros son circuitos que utilizan un material piezoeléctrico (normalmente
cristal de cuarzo) para generar una onda vibratoria de alta frecuencia muy
precisa. Los segundos utilizan cerámicas que presentan propiedades
piezoeléctricas como el titanato circonato de plomo (PZT), que consiste en
59
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
cristales mixtos de circonato de plomo y titanato de plomo, que generan la
señal oscilante de la frecuencia deseada cuando se les aplica una
determinada tensión.
Anteriormente ya se vio que el chip ATmega16U2 que interviene en la
comunicación del protocolo serie USB entre la placa y el ordenador emplea
un oscilador a cristal. El microcontrolador ATmega328P de la placa Arduino
UNO utiliza un reloj con resonador cerámico. La precisión en la frecuencia
aportada por un cristal de cuarzo con compensación de temperatura
(TCXO, Temperature Compensated Crystal Oscillator) puede ser del orden
del 0,001 % (si fuera así, para 16 MHz nominales supondrían variaciones de
± 160 Hz), sin embargo, la precisión aportada por un resonador cerámico
típico fabricado con PZT puede ser del 0,5 % (lo que para el mismo valor
nominal supondrían ±80 kHz), lo que significa que estos últimos son menos
precisos pero tienen un coste inferior.
Resonador cerámico
Nota: La placa con encapsulado smd
Arduino UNO
permite la utilización Cristal de
de un reloj externo. cuarzo (XTAL)
60
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
EL BOTÓN DE REINICIO (RESET)
Cuando un µC se va a utilizar permanentemente en una aplicación
específica, normalmente el sistema electrónico se diseña para que en el
momento de dar tensión, el µC (y también podrían ser otros dispositivos)
reciba una señal de reinicio (reset) y una vez puesto el sistema en
condiciones iniciales comience a ejecutarse el programa que toma el
control del mismo.
La placa Arduino UNO está preparada para que se puedan cargar los
programas de aplicación desde el Entorno Integrado de Desarrollo (IDE,
Integrated Development Environment) vía conexión USB. La placa también
dispone de un botón de reset que cuando se pulsa envía un nivel bajo (low)
a la placa y al microcontrolador para pararlo y que vuelva a arrancar. En este
caso, lo primero que se ejecuta es el gestor de arranque que tiene
pregrabado el microcontrolador, y si no existe otro dispositivo que obligue a
otra cosa, se continua con el programa de aplicación último que tenga
grabado el microcontrolador en su memoria flash. En la mayor parte de los
proyectos de aprendizaje que se realicen, no será necesario pulsar el botón
de reset ya que el IDE está preparado para activar el gestor de arranque
mediante un botón del entorno. 61
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Hola.

Entorno de Desarrollo Integrado


IDE: Integrated Development Environment El botón de “RESET” de
la placa: al pulsarlo el
µC ejecuta el gestor de
arranque y después
transfiere el control o
Al hacer clic en el botón “Subir” del IDE se continúa con el
activa el gestor de arranque para cargar el programa de aplicación
programa de aplicación. Una vez cargado que tenga grabado el
se le transfiere el control. propio µC.
62
3. Entorno de desarrollo de aplicaciones Un poco de
electrónicas con Arduino contextos de
Programación
EL ENTORNO DE DESARROLLO INTEGRADO: IDE
Cuando se habla, en general, de programación de sistemas o dispositivos
que tienen su base en la electrónica, dentro de una extraordinaria
diversidad de aplicaciones de dichos sistemas o dispositivos, muchos son los
contextos técnicos y profesionales a considerar en cuanto a la programación
de los mismos se refiere. A continuación se citan algunos de ellos:
“Los ordenadores, o sistemas informáticos en general, necesitan ser
programados. En diferentes industrias (electrodomésticos, automoción,
comunicaciones, juguetería, aeronáutica, electrónica de consumo, domótica,
etc.) tienen aplicación los microcontroladores que han de ser programados.
En mecanizado se programan las fresas y tornos de control numérico de
máquinas herramientas. En automatización de procesos se pueden utilizar
los autómatas programables. En líneas de producción se programan robots
industriales. En muchos circuitos integrados la configuración definitiva de su
hardware se lleva a cabo por un tipo de programación. En otros sistemas se
realiza una programación a nivel de microcódigo, es decir, se determinan por
programación las propias instrucciones para desarrollar programas.”
Se van a describir algunos contextos, los más propios de un técnico electrónico.
63
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En este curso el desarrollo de los programas de los proyectos se realizará
sobre un IDE empleando un lenguaje de programación de alto nivel (C/C++),
con muchas características de bajo nivel, adaptado a la plataforma Arduino.
LENGUAJES DE ALTO NIVEL Y LENGUAJES ENSAMBLADORES
El contexto profesional probablemente más “familiar”, aun para un profano
en la materia, es el de un programador de ordenadores o de sistemas
informáticos: se tiene la idea de que un ordenador o un sistema informático
es una máquina que la tarea que realiza depende del programa o aplicación
que ejecuta, y este programa, visto como un conjunto de instrucciones con
un propósito (aplicación), lo crea o desarrolla un programador utilizando los
lenguajes de programación adecuados; estos son lenguajes artificiales con
cierto parecido a los naturales y que también presentan una sintaxis y
semántica específica, pero muchísimo más restrictiva, o dicho de otra
manera, alejada de la ambigüedad e intuición humana.
• Sintaxis. Gramática: Parte de la gramática que estudia el modo en que se
combinan las palabras y los grupos que estas forman para expresar significados,
así como las relaciones que se establecen entre todas esas unidades. Informática:
Conjunto de reglas que definen las secuencias correctas de los elementos
(componentes léxicos) de un lenguaje de programación.
64
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
• Semántica. Lingüística: Disciplina que estudia el significado de las unidades
lingüísticas y de sus combinaciones (adáptese el significado a la informática).
Siguiendo en este mismo contexto, los lenguajes de programación citados
suelen llamarse de alto nivel para diferenciarlos de los llamados de bajo
nivel y de los lenguajes ensambladores, estos últimos por encima del
código de máquina (código binario que entiende un dispositivo programable
concreto: µP o µC). Un lenguaje de alto nivel se presenta con cierta
generalidad al programador y puede ser independiente de los dispositivos
concretos donde vayan a ejecutarse los programas, lo que permite al
programador centrarse en el desarrollo del programa haciendo abstracción
de los detalles del hardware donde vaya a correr dicho programa.
• Lenguaje ensamblador y código de máquina. Los microprocesadores y
microcontroladores disponen de un juego de instrucciones que les es propio, y
cualquier programa que tengan que ejecutar deberá ser desarrollado empleando
dicho juego de instrucciones. En el nivel más bajo, cada una de estas instrucciones
tiene asignado un código binario inequívoco. El conjunto de códigos binarios
asignados al juego de instrucciones es lo que se llama lenguaje de máquina.
Manejar directamente el lenguaje de máquina es tedioso, nada intuitivo y
extraordinariamente propenso a errores. Un pequeño paso es sustituir los códigos
binarios (secuencias de unos y ceros) por una representación más compacta como 65
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
es la hexadecimal, resulta más cómodo pero no es un gran avance. Lo que se hace
normalmente es asignarle a cada instrucción de máquina distinta un acrónimo o
abreviatura derivado de la expresión que en lenguaje natural (inglés) describe
brevemente lo que hace la instrucción: estos acrónimos o abreviaturas reciben el
nombre de nemónicos (de nemotecnia). Además de los nemónicos pueden ser
necesarios otros elementos para completar la sintaxis, como letras que identifican
determinados registros y direcciones, signos para operadores, etc., que permiten
una descripción simbólica completa de cada instrucción. El conjunto de estas
descripciones simbólicas (nemónicos más otros elementos) constituyen un
lenguaje de programación que recibe el nombre de lenguaje ensamblador. Como
se podrá apreciar, el lenguaje ensamblador no es más que una descripción
simbólica del lenguaje de máquina.
Vamos a describir un ejemplo de
instrucción del µC ATmega328P.
ADD – Add without Carry
“ADD” es el nemónico y la descripción
breve es “Suma sin acarreo”.
Description: Adds two registers without
the C flag and places the result in the
destination register Rd.
66
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Vemos en la captura que a continuación la documentación del fabricante expone una
descripción textual algo más amplia de lo que hace la instrucción.
“Descripción:
Suma de dos registros sin el indicador de acarreo C y guarda el resultado en el registro de
destino Rd.”
Con esta notación simbólica indica que la instrucción suma los operandos
Operation: almacenados en los registros Rd y Rr y almacena el resultado en el registro
Rd ← Rd + Rr Rd (sobrescribe sobre Rd, por lo tanto el operando que tenía se pierde).
Los registros Rd y Rr son registros pertenecientes la banco de registros de propósito
general descritos anteriormente.

Con esta información el fabricante expresa la sintaxis de la instrucción “ADD Rd,Rr”; Rd y Rr


son los operandos de la instrucción y hacen referencia, dentro del banco de 32 registros de
propósito general, a los registros concretos que intervendrán en la suma. También nos
informa que el contador de programa (que lleva la gestión de la instrucción en curso de
ejecución) quedará incrementado en una unidad después de ejecutarse esta instrucción.
Con esta otra información se nos indica el código de operación de la instrucción (su código
máquina): formado por 16 bits (dos bytes), la parte fija “0000 11” y las partes variables que
especifican los registros del banco que intervienen:
ddddd y rrrrr, 5 bits para cada uno 25 = 32 .
67
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En el sumario descriptivo del juego de instrucciones los
fabricantes también especifican los indicadores del
registro de estado que se ven afectados por cada
instrucción y cómo se ven afectados. Para la instrucción
de ejemplo tenemos
que los “flags” afectados
son “C”, “Z”, “N”, “V”,
“S” y “H”; y los no
afectados son “T” e “I”.
Se van a describir sólo tres de ellos:
• Indicador de acarreo, “C”: Se pone a 1 si se produce acarreo desde el bit más
significativo (MSB, Most Significant Bit) del resultado; se pone a cero en caso contrario.
• Indicador de cero, “Z”: Se activa, es decir se pone a 1, si el resultado es cero ($00, otra
forma de indicar un valor hexadecimal, con el símbolo $); queda a cero en caso contrario.
• Indicador de rebasamiento, “V”: Se pone a 1 si el resultado rebasa el rango de
representación en complemento a 2 (C2); se pone a cero en caso contrario.
Más Información del fabricante:
Words: 1 (2 bytes) La instrucción
tiene una longitud de 2 bytes,
una palabra para este sistema.
Cycles: 1 La instrucción se
ejecuta en un ciclo de reloj.
68
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Nota. En los sistemas digitales se utiliza el concepto de palabra. Por palabra se entiende la
codificación de determina información en “unidades significativas” de un cierto número de
bits. Pueden ser direcciones de memoria o unidades de datos en general. La longitud en bits
de la palabra suele guardar “alguna” relación con la arquitectura hardware del sistema
digital y en cómo se realiza el procesamiento y “manejo” de la información de distinta
naturaleza. Es un término que se presta a interpretaciones que gozan de ambigüedad, será
el contexto y la experiencia lo que nos permitirá hacer una interpretación correcta del
mismo. En el contexto del ejemplo (códigos de operación de instrucciones) podemos
interpretar que dichos códigos se codifican utilizando como unidades palabras, y si
analizamos el código de operación de las distintas instrucciones podremos expresar su
tamaño por palabras, siendo en este caso el tamaño de la palabra de dos bytes. En otros
sistemas el tamaño de la palabra podría ser de un byte u otro valor diferente.
Por último, la información del fabricante nos propone un ejemplo de aplicación de la
instrucción. Lo que está a la derecha de los puntos y coma del ejemplo son comentarios
descriptivos que nos sugieren el contexto puntual del programa. Se trata de sumar
operandos de 16 bits y obtener su resultado utilizando el banco de registros de propósito
general del microcontrolador. Como los registros físicamente son de 8 bits, estamos
obligados a trabajar en doble precisión y encadenar por programa la suma de operandos
de 8 bits: primero la parte baja y luego la parte alta.
Para ello, los registros R0 y R1 albergarán un sumando: R0 el byte bajo y R1 el byte alto; y
los registros R2 y R3 albergarán el otro sumando: R2 el byte bajo y R3 el byte alto,
quedando el resultado de la suma en estos dos últimos registros con el mismo criterio.
69
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Suponiendo que los operandos ya se encuentren almacenados en los registros, la primera
instrucción “add r2, r0” (la que hemos descrito) se encarga de sumar los bytes bajos de
ambos operados, y como son las partes bajas no se tiene que tener en cuenta el acarreo de
ninguna etapa anterior, quedando el resultado de la suma de las partes bajas en r2.
A continuación tiene que sumar los bytes altos de los operandos, y ahora si tiene que tener
en cuenta un posible acarreo del octavo al noveno bit, es por eso que utiliza la instrucción
“adc r3, r1”, que hace lo mismo que la anterior con la diferencia que suma también el
contenido del bit de acarreo C del registro de estado (bit que se habrá puesto a 1 si
efectivamente se produjo acarreo al sumar el octavo bit de las partes bajas de los
operandos). El resultado de la suma de las partes altas más el posible acarreo de la parte
baja a la parte alta queda en el registro r3. Es por eso que la suma de los operandos de 16
bits queda almacenada en los registros r2 y r3: en r2 la parte baja del resultado y en r3 la
parte alta del resultado, y en el bit de acarreo del registro de estado nos quedaría ahora, si
es el caso, el bit para interpretar un resultado de 17 bits si es lo que se pretende.
Con este ejemplo ya podemos
advertir, cuando se programa a nivel
de ensamblador, la complejidad
asociada a la realización de una
“simple” operación aritmética de
16 bits (doble precisión) para un
sistema que organiza la información
de datos en “palabras” de 8 bits.
70
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La siguiente tabla recoge detalles relacionados con la ejecución del ejemplo descrito:
INSTRUCCIÓN adc r3, r1 (parte alta) add r2, r0 (parte baja)
Posición que
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ocupa el bit
Acarreos
0 0 0 1 0 0 1 1 1 1 0 0 0 0 0 1 *
suma 16 bits
Operando 1:
* 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1
r1, r0
Operando 2:
* 1 0 0 1 0 0 1 1 1 1 0 0 0 0 0 1
r3, r2
Resultado:
* 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 0
r3, r2
Indicador C
0 * * * * * * * 1 * * * * * * * *
del SREG
Consultando la documentación técnica del fabricante se podría desarrollar un
programa en lenguaje ensamblador de forma manual y llevar a cabo su traducción
a código de máquina también de forma manual. Lo que obtendríamos es un
listado de direcciones de memoria de programa con su correspondiente contenido:
el código máquina del programa.
71
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
No obstante, no es productiva esta forma manual de proceder. Lo normal es
disponer de un programa que corriendo en un ordenador nos ofrezca un entorno
con una interfaz gráfica que facilite la escritura del código en ensamblador y nos
ofrezca diferentes herramientas de apoyo y de ayuda para la depuración de
programas (búsqueda y eliminación de errores, etc.). Este entorno también
dispondrá de lo que se llama un ensamblador:
• Es un programa informático que se encarga de traducir un fichero fuente escrito en
un lenguaje ensamblador, a un fichero objeto que contiene el código máquina
ejecutable directamente por el microprocesador o microcontrolador de que se trate.
• Este programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de
los códigos nemotécnicos que aparecen por su código de operación correspondiente
en el sistema binario para la plataforma que se eligió como destino en las opciones
específicas del ensamblador, es decir, para un determinado microprocesador o
microcontrolador.
• Dentro de los ensambladores los hay básicos ofreciendo las tareas de bajo nivel
imprescindibles y los hay mucho más desarrollados permitiendo el uso de macros,
directivas y estructuras de programación propias de los lenguajes de alto nivel.
Sea de la forma que sea (manual o utilizando un entorno con ensamblador),
también se deberá disponer de una utilidad y conexión con el dispositivo o sistema
de destino para el volcado o grabación del programa en el sistema µP o en el µC.
72
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Después de esta aclaración sobre el lenguaje ensamblador y el código de
máquina, podemos entender mejor el lugar que ocupan los lenguajes de
alto nivel de los que se había empezado a hablar. Uno de sus objetivos es
ocultar al “programador de alto nivel” toda la complejidad subyacente y las
particularidades más íntimas del hardware de destino, para así liberarlo y
que pueda concentrar su atención en el desarrollo de programas de
aplicación vistos desde un nivel de abstracción mucho más alto. Pero al igual
que pasa con la escritura de código en ensamblador, la escritura de código
en alto nivel suele estar soportada por unos programas o herramientas de
software especializadas en esta labor, determinando en su conjunto una
“plataforma” de desarrollo; estas plataformas que dan soporte al trabajo de
programación se denominan Entornos de Desarrollo Integrado (IDE,
Integrated Development Environment).
Una de las utilidades esenciales que ofrecerán estos IDEs es la traducción
del programa escrito en lenguaje de alto nivel al lenguaje de máquina de
destino. Simplificando y sin entrar en detalles, a este proceso se le llama
compilación y a los programas que lo realizan compiladores.
Observación. En general, un compilador es un programa informático que traduce un
programa escrito en un lenguaje de programación a otro lenguaje de programación.
73
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Aunque todo esto es relativo, la programación de aplicaciones, en cierta
medida generales, en lenguajes de alto nivel, encajan en un perfil
profesional más informático; y la programación de aplicaciones, en cierta
medida específicas, en lenguajes de bajo nivel como el ensamblador,
encajan en un perfil profesional más electrónico.
Nanoestructura
DISPOSITIVOS LÓGICOS PROGRAMABLES
Dentro del mundo de la programación de sistemas y dispositivos cuya
naturaleza física es la electrónica, tenemos otro contexto cuyo perfil
profesional es básicamente electrónico (o al menos exige una cierta
especialización en sistemas electrónicos digitales). Se suele englobar bajo la
denominación de Dispositivos Lógicos Programables (PLDs, Programmable
Logic Devices) a un conjunto de tecnologías de fabricación de circuitos
integrados que permiten su programación estando esta orientada a la
configuración “última” de su hardware, por lo tanto, la funcionalidad
específica del dispositivo la determina el usuario (técnico) después de la
fabricación.
No se pretende aquí desarrollar en extenso este contexto, sino sólo dar una
brevísima visión panorámica.
74
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Los circuitos integrados digitales pueden dividirse en dos grandes
categorías:
▪ CIs de arquitectura no configurable. El conexionado de la circuitería
interna, su arquitectura hardware, está completamente definida por el
fabricante y así salen de fábrica. Pertenecen a este ámbito los
microprocesadores y microcontroladores, que pueden ejecutar diferentes
programas, pero su hardware es el mismo; también están todos los CIs
“estándar” de lógica combinacional y secuencial ya estudiados, algunos
tipos de memorias, etc.
▪ CIs de arquitectura configurable (ASIC, Application Specific Integrated
Circuit). El conexionado de la circuitería interna, su arquitectura hardware,
no está completamente definida por el fabricante, la definición última la
puede establecer el fabricante bajo pedido o ser realizada por el usuario
mediante técnicas específicas de programación. Cuando la realiza el
fabricante bajo pedido (CIs a medida), se tienen dos procesos: full-custom,
el cliente encarga un diseño “muy específico” y se fabrica para él; semi-
custom, el cliente encarga un diseño específico pero a partir de unas bases
de fabricación predefinidas. Full-custom suele derivar en costes más altos.
75
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Cuando se parte de un proceso de fabricación de CIs con una arquitectura
parcialmente preconfigurada, pendiente de la definición última por parte
del técnico que tiene que darles la configuración final, se habla de ASICs
programables por el usuario. Esta tecnología es la que da lugar a los
llamados Dispositivos Lógicos Programables, PLDs.
Los PLDs se clasifican a su vez en sencillos y complejos, englobando cada
una de estas categorías un conjunto de dispositivos que se diferencian por
su arquitectura interna y posibilidades de programación (configuración).
▪ PLD Sencillo (SPLD, Simple PLD). Como su nombre indica, son los de
arquitectura más sencilla, consistente, aunque hay variantes, en una doble
matriz de conexiones, una de tipo Y (AND) y otra de tipo O (OR),
realizándose la programación por la definición de las conexiones. Algunos
dispositivos pertenecientes a esta categoría son:
• PROM, Programmable Read Only Memory: ROM Programable.
• PLA, Programmable Logic Array: Matriz Lógica Programable.
• PAL, Programmable Array Logic: Matriz Lógica Y-Programable.
• GAL, Generic Array Logic: Matriz Genérica Programable.
76
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
▪ PLD Complejo (CPLD, Complex PLD). Como su nombre indica, son los de
arquitectura más compleja, existiendo variantes y ofreciendo la posibilidad
de configurar la interacción de circuitería combinacional y secuencial
dando lugar a sistemas digitales de considerable capacidad de proceso.
Algunos dispositivos pertenecientes a esta categoría son:
• CPLD, Complex Programmable Logic Device: Dispositivo Lógico
Programable Complejo. Los CPLDs presentan un elemento significativo
en su arquitectura interna llamado macrocelda que junto con otros
bloques determinan su gran capacidad de síntesis de funciones digitales
con cierto nivel de complejidad.
• FPGA, Field Programmable Gate Array: Matrices de Puertas
Programables en Campo. Como en otras muchas ocasiones una
traducción literal del “acrónimo” no resulta significativa para describir el
dispositivo. En realidad estos dispositivos pueden considerarse como una
evolución de los CPLDs. Son CIs que contienen bloques de lógica cuya
interconexión y funcionalidad puede ser configurada mediante un
lenguaje de descripción especializado. La lógica programable puede
reproducir desde funciones sencillas como las puertas lógicas, pasando
77
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
por diversos sistemas combinacionales y secuenciales, hasta alcanzar
diseños específicos de cierta complejidad próximos a lo que podrían ser
ASICs a media.
Observación. La variedad de PLDs es extraordinaria y no resulta fácil establecer una
diferenciación y clasificación clarificadora, de hecho se ha englobado bajo la
denominación genérica de PLDs a muchos de estos dispositivos, cuando bajo otros
puntos de vista pudiera no hacerse así. Sólo un estudio en profundidad de la gama
de dispositivos arrojaría clarividencia en la percepción de su alcance.
Sin pretender entrar en un desarrollo amplio, se van a describir algunas
estructuras de PLDs, las más sencillas, para hacerse una pequeña idea de lo
que son. Una determinada gama de PLDs podría responder a la siguiente
arquitectura general:

78
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Recordemos que cualquier función lógica puede ser expresada como una
suma de productos canónicos. El siguiente esquema de ejemplo muestra un
PLD (tipo PLA) de cuatro entradas (I1, I2, I3, I4) y tres salidas (O1, O2, O3):

En las PLA
tanto la matriz
Y (AND) como
la matriz O
(OR) son
configurables.

• : indica una
conexión fijada
de fábrica

X : indica una
conexión
configurable

79
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Con el objeto de simplificar las representaciones esquemáticas se utilizan
determinados convenios simbólicos:

Las entradas al PLD tienen que


pasar por buffers inversores y no
inversores para atacar a las
entradas de la matriz Y.

Se simplifica la
representación del
conexionado tanto en
la matriz Y como en la
matriz O: de fábrica el
PLD viene totalmente
conexo, para eliminar
una conexión hay que
fundir el “fusible”
correspondiente.
80
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Cuando se elimina una conexión en la matriz Y, la
entrada afectada debe quedar a nivel alto para que
la puerta Y correspondiente quede abierta, es decir,
a expensas de las otras entradas. En el ejemplo se
muestra que 𝐹 = 𝐴𝐵 por que son las variables que
le llegan a la puerta Y: una es una conexión fija (A),
otra es una conexión configurable que se mantiene
porque no se ha fundido su fusible (B), y la variable
C no le llega porque se ha fundido su fusible y al
hacer esto la entrada de la Y afectada debe quedar
a 1 para que deje pasar el producto 𝐴𝐵, dicho de otra manera, si al fundir un
fusible de la matriz Y la entrada quedara por defecto a 0, forzaría un 0 en la
salida de la puerta Y, no permitiendo la obtención del resultado esperado.
Cuando se elimina una conexión en la matriz O, la entrada afectada debe
quedar a nivel bajo para que la puerta O correspondiente quede abierta, es
decir, a expensas de las otras entradas. En el ejemplo mostrado se tiene que
𝐹 = 𝐴 + 𝐶 porque son las variables que le llegan a la puerta O: A y C son
conexiones configurables que no se han eliminado y B también es una
conexión configurable, pero esta se ha eliminado y la entrada asociada de la
81
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
puerta O debe quedar por defecto a 0 para que deje pasar la suma lógica
𝐴 + 𝐶, de otra manera, si quedara por defecto a 1 la salida de la O quedaría
forzada a nivel 1 y no conseguiríamos el resultado esperado.
Observación. Lo anterior se fundamenta en el álgebra de Boole, recuérdese el
postulado que establece la propiedad de identidad con respecto a las operaciones
de suma lógica y producto lógico: "1 ∙ 𝑎 = 𝑎" elemento neutro del producto (uno
por algo es ese algo) y "0 + 𝑎 = 𝑎" elemento neutro de la suma (cero más algo es
ese algo).
Con la simbología simplificada
el PLD 4 x 3 con 6 términos de
producto anterior quedaría
representado como muestra la
figura.
Las PLA suelen especificarse como “n x m
con p términos de producto”:
• n entradas y p puertas Y de 2n entradas.
• m salidas y m puertas O de p entradas.
• En general suele ser 𝒑 < 𝟐𝒏 .
82
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Hola
Ejercicio: Analizar cómo se
generan las cuatro funciones
lógicas indicadas con una
PLA de 2 x 4 con 4 términos
de producto.

Cómo programar un “0” o un “1”


constante:
• O1 es “1” porque la puerta Y “P1”
recibe ocho unos, entonces su salida
es “1” y este uno se lo aplicamos a
una entrada de la puerta “O1”.
• O2 es “0” porque sus seis entradas
están a cero. Piénsese en O3... ?
83
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Ejemplo de diseño. Implementar un comparador binario de dos bits, cuyo
funcionamiento se muestra en la tabla de verdad, a partir de una PAL de 4 x
4 con 16 términos de producto. Entradas
El comparador es
un sistema
combinacional de
4 entradas y 3
salidas: se trata,
por tanto, de
generar con la PAL
las tres funciones
lógicas de salida.
La PAL es de 4 x 4,
la matriz Y es
configurable y la
matriz O es fija, y
de las 4 salidas
que tiene solo se
emplearán 3. Salidas 84
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Se observa que las salidas A > B y A < B son sumas de seis productos
canónicos de cuatro variables, y la salida A = B es la suma de cuatro
productos canónicos de cuatro variables. Como el PAL tiene la matriz O fija y
cada puerta O está conectada a cuatro productos canónicos, la salida A = B
la podremos programar empleando estas cuatro conexiones, pero para las
salidas A > B y A < B deberemos probar a simplificar puesto que no
tenemos seis productos canónicos para cada una de ellas.
• Salida 𝐀 = 𝐁:
𝐀 = 𝐁 = ෍ 0, 5, 10, 15 = A1 A0 B1 B0 + A1 A0 B1 B0 + A1 A0 B1 B0 + A1 A0 B1 B0
4
• Salida 𝐀 > 𝐁:
Para las salidas 𝐀 > 𝐁 y 𝐀 < 𝐁
𝐀 > 𝐁 = ෍ 4, 8, 9, 12, 13, 14 se buscará una simplificación
4 aplicando el método tabular
• Salida 𝐀 < 𝐁: de Karnaugh. El objetivo es
que salgan sumas que no
𝐀 < 𝐁 = ෍ 1, 2, 3, 6, 7, 11
4
superen los cuatro términos.
85
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Hola
B0B1 B0B1

A0A1 00 01 11 10 A0A1 00 01 11 10
00 00 1 1 1
0 2 3 1 0 2 3 1

01 1 1 01 1
8 10 11 9 8 10 11 9

11 1 1 1 11
12 14 15 13 12 14 15 13

10 1 10 1 1
4 6 7 5 4 6 7 5

𝐀 > 𝐁 = A1 B1 + A1 A0 B0 + A0 B1 B0 𝐀 < 𝐁 = 𝐴1 𝐵1 + 𝐴1 𝐴0 𝐵0 + 𝐴0 𝐵1 𝐵0

Se observa que las dos salidas A > B y A < B quedan reducidas a la suma
de tres términos (productos) que no son canónicos. Ahora podremos
programar en la matriz Y dichos productos y sumarlos en la matriz O para
obtener las salidas. Las salidas de todos los productos no utilizados, los
cuatro correspondientes a la salida de la PAL no utilizada y uno por cada
salida que indica desigualdad, las dejamos a cero para que no tengan efecto.
86
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
En la figura se muestra como quedaría
el conexionado de la PAL después de su
programación.
Los PLDs se pueden programar utilizando
unos equipos programadores conectados
a un ordenador sobre el que se ejecuta
un software con herramientas apropiadas
para asistir al diseño y la programación.
También existen PLDs que admiten la
programación en circuito.
La implementación de
estructuras de
realimentación en la
arquitectura de los
PLDs, permite el
diseño de sistemas
secuenciales y en Programador
general de mayor Universal de
capacidad de proceso. Dispositivos
87
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
MICROPROGRAMACIÓN
Obsérvese que en esta introducción a los Sistemas Programables orientada
al desarrollo de proyectos electrónicos sobre la Plataforma Arduino UNO, no
se ha abordado un estudio genérico, estructurado y suficientemente amplio,
de una gran cantidad de ítems que entrarían a formar parte de un curso
general de sistemas electrónicos programables: desde la Arquitectura de
Sistemas abordando las diferentes estructuras de buses que implementan
(control, direcciones y datos), pasando por las distintas unidades funcionales
(unidades centrales de proceso, unidades de memoria y unidades de
entrada y salida), hasta llegar a la arquitectura interna de diferentes
unidades y cómo se integran en el sistema, teniendo especial relevancia la
implementación que se haga de la Unidad Central de Proceso y de todos sus
“posibles elementos” asociados (registro de instrucciones, decodificador de
instrucciones, unidad aritmético-lógica, banco de registros, registro de
estado, contador de programa, Unidad de Control, etc.).
Aun así, y siguiendo con esta presentación de diferentes contextos de
programación, se va a definir qué se entiende por Microprogramación en
ciertos campos de aplicación de los Sistemas Electrónicos Digitales.
88
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Simplificando mucho el tratamiento, en el diseño de numerosos sistemas
digitales intervienen dos unidades básicas: La Unidad de Control y la Unidad
de Proceso. La figura muestra un esquema general que se podría tomar
como punto de partida para la concepción de dichos sistemas digitales.
En sentido amplio, un sistema digital se concibe para realizar algún tipo de
procesamiento de información estando esta codificada mediante señales.

89
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La unidad de proceso es la encargada de procesar los datos de entrada para
obtener los datos de salida. La concepción de cómo se realiza este proceso
marca la diferencia entre unos sistemas digitales y otros. Si dicho proceso se
desgrana en un conjunto de microoperaciones que pueden ejecutarse
siguiendo una secuencia determinada, necesitaremos de una unidad de
control que gobierne la ejecución del citado conjunto de microoperaciones.
La unidad de control deberá generar Podemos calificarlo de sistema
las señales de control adecuadas que digital síncrono de proceso:
permitan a la unidad de proceso obsérvese la señal de reloj.
realizar las microoperaciones en el
orden establecido. La generación de
estas señales de control, en general,
dependerán de la microoperación
que se vaya a ejecutar, obviamente,
pero también de otras señales de
estado, representativas de ciertos
resultados del proceso en curso, e
inclusive de otras señales externas Otro esquema genérico para
representativas de la interacción del un sistema digital de proceso.
90
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
sistema digital con el “mundo exterior”. Si todas las actuaciones del sistema
están referidas a una señal de reloj (podrían ser varias) estaríamos ante un
Sistema Digital Síncrono de Proceso, en caso contrario podríamos hablar de
Sistema Digital Asíncrono de Proceso.
Pues bien, a la hora de abordar el diseño de la Unidad de Control existen
diversas alternativas. Lo primero es decidir si la unidad de control será fija o
podrá modificarse, esto da lugar a dos grandes líneas de diseño:
▪ Unidades de Control de Lógica Cableada. El diseño es específico para el
sistema digital de proceso propuesto y no puede modificarse.
Normalmente da lugar a sistemas más eficientes pero menos flexibles.
▪ Unidades de Control de Lógica Programada. Existen diferentes técnicas de
diseño que permiten modificar o condicionar las señales que genera la
unidad de control en función de la codificación de las microoperaciones (lo
que da lugar al denominado microcódigo) que deberá procesar la unidad
de proceso. Suelen derivar en sistemas menos eficientes aunque más
flexibles. Este es uno de los contextos en los que se habla de
Microprogramación: Diseño de Unidades de Control de Lógica
Programada.
91
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
La Unidad Central de Proceso (CPU) de un computador viene a ser un
sistema digital síncrono de proceso, y una de sus unidades funcionales es la
unidad de control. Pues haciéndolo extensivo, al desarrollo de las CPUs
también se les puede aplicar las dos líneas de diseño descritas:
▪ Diseñarse con un juego de instrucciones fijo. El juego de instrucciones de
ensamblador está determinado por el fabricante y no se puede modificar.
El desarrollo de programas tiene que basarse en este juego de
instrucciones. Esta situación es la más habitual en la mayoría de los
equipos que se utilizan.
▪ El juego de instrucciones se determina por microprogramación. Una
instrucción de ensamblador puede dividirse en un conjunto de
microoperaciones o microinstrucciones, es decir, el código máquina
asociado a una instrucción de ensamblador puede dividirse en una
secuencia particular de microcódigo. Por lo tanto, teniendo la posibilidad
de programar el microcódigo podremos modificar el juego de
instrucciones de ensamblador de una CPU.
El avance de las tecnologías de integración y la amplia gama de dispositivos
disponibles, hace que la microprogramación aplicada a CPUs esté en desuso.
92
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
EL IDE PARA LA PLATAFORMA ARDUINO
Después de la presentación de diferentes contextos de la tarea de
programación, y dentro de estos, de hacer énfasis en los que encajan con
más propiedad en la figura de un técnico electrónico, se va a precisar donde
nos vamos a situar nosotros a la hora de desarrollar programas para
nuestros proyectos.
Como ya se había sugerido, nosotros nos situaremos en un perfil de técnico
electrónico que desarrollará programas a partir de un lenguaje de alto nivel
con características de bajo nivel y adaptado a la plataforma Arduino, que nos
permitirá escribir, cargar y ejecutar programas en el microcontrolador
ATmega328P de la placa Arduino Uno. Sólo para algunos proyectos se podrá
descender a un nivel de programación en el lenguaje ensamblador del
citado microcontrolador.
Para facilitar el desarrollo de proyectos tomando como base las placas
Arduino, que incorporan microcontroladores de Atmel, se dispone de un IDE
(Entorno Integrado de Desarrollo) oficial: el “Arduino Software”, de código
abierto, y basado para el “entorno” en Java e internamente en código C/C++.
El software Arduino esta disponible para diferentes sistemas operativos.
93
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
PLACAS BASE Y PLACAS SUPLETORIAS EN LA PLATAFORMA ARDUINO
Recuérdese que Arduino es una plataforma electrónica de fuente abierta
basada en un hardware y software pensado para facilitar el desarrollo de
una gran variedad de proyectos: desde los aficionados a la tecnología hasta
el desarrollo de aplicaciones en el campo de la ingeniería.
La gama de productos es muy amplia y se distingue entre la línea oficial de
productos y otras fuentes no oficiales (sean empresas o usuarios de la
comunidad).
Existe una gama de productos
considerada de iniciación o de
entrada (entry level), y otra
gama de productos que ofrece
características más avanzadas
(enhanced features).
¡Se pueden tener proyectos de alta
complejidad sobre placas de menos
Productos oficiales
prestaciones y proyectos más
simples sobre placas más potentes!
94
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
Para el nivel de iniciación (prestaciones) tenemos diferentes productos:

Placas Base Módulos o placas básicas

Kits de aprendizaje Placas supletorias o shields

95
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
También existe otra gama de productos con funcionalidades más avanzadas:

Placas base de mayores prestaciones

Placas supletorias o shields

De toda la gama de productos, oficiales y no oficiales, merece hacer


hincapié en las placas supletorias (en inglés shields): Son placas que se
acoplan fácilmente a las placas base y permiten desarrollar proyectos de
mayor alcance al estar especializadas en diferentes campos de aplicaciones.
96
4. Instalación del Software Arduino
El Entorno de Desarrollo Integrado (IDE), es decir, el Software de Arduino,
está disponible para las plataformas Windows, Mac OS X y Linux. Dado que
nosotros trabajaremos en Windows, describiremos el proceso de instalación
del IDE para este sistema operativo:
1. Ir a la página oficial https://www.arduino.cc/
y elegir “Download”.
2. Elegir la opción “Windows Installer”.

3. En la siguiente pantalla, dependiendo


de lo que se quiera, se puede elegir
“JUST DOWNLOAD” para acceder a la
descarga del fichero de instalación.
97
4. Instalación del Software Arduino
4. Se iniciará la descarga y esperamos a que se complete.

5. En “este momento” la versión es la 1.6.7, doble clic y


ejecutamos el fichero de instalación.
6. Si nos sale una ventana con un mensaje del sistema
operativo pidiendo permisos de cambios decimos que “Si”.
7. Aceptamos el acuerdo de licencia “I Agree”.

98
4. Instalación del Software Arduino
8. Seleccionamos los componentes que queremos instalar: mejor aceptar
las sugerencias por defecto. Le damos a siguiente “Next”.
9. Elegimos la carpeta de destino
(Browse) y ordenamos el proceso
de instalación (Install).

10. Comienza el proceso de instalación.


Esperamos hasta que concluya el
proceso. Es posible que aparezcan
mensajes del sistema operativo de
confirmación de instalación de drivers.
99
4. Instalación del Software Arduino
11. Si “Seguridad de Windows” nos pide permiso para instalar “software de
dispositivo” se lo damos: “Instalar”.
12. Puede ocurrir de nuevo: otra
vez “Instalar”.

13. Cuando finalice el proceso de


instalación se activará el botón
“Close”, cerramos y ya está
instalado el Entorno Integrado de
Desarrollo: El Software Arduino.
100
4. Instalación del Software Arduino
14. Arrancamos el IDE de cualquiera de las formas posibles,
por ejemplo con doble clic sobre el acceso directo del
escritorio.
15. Si nos aparece una “Alerta de seguridad de Windows” relacionada con el
bloqueo de algunas características de la Plataforma de Java le decimos
“Permitir acceso”. No obstante, estas características pueden
configurarse a posteriori.
16. Acto seguido ya habremos
entrado en el entorno. En
la página siguiente se tiene
una captura del aspecto de
su interfaz gráfica.
No se realizará una
descripción genérica, sino
que se irán describiendo
sus elementos y
funcionalidades según
vayan surgiendo las
necesidades.
101
4. Instalación del Software Arduino
El

El entorno se abre preparado


para la edición de un programa
o “sketch”, donde por defecto
nos creará una carpeta y fichero
La instalación nos crea la estructura de
carpetas “Arduino > libraries” colgando con el programa si le damos al
de “Documentos” del “Explorador de botón “Salvar”:
archivos” de Windows: Les asigna como nombres por
defecto “sketch_feb09a”,
añade el mes y día actual
(al programa le pone la
extensión “.ino”)
¡¡Cualquier descripción de esta naturaleza
está sometida a la extraordinaria variedad
de sistemas y a la “volatilidad” de la Red!! PO.1

102
5. Conexión y reconocimiento de la placa Arduino
Ahora conectaremos la placa Arduino Uno al ordenador mediante un cable
USB tipo A/B: el objetivo es que la placa quede reconocida y que podamos
empezar a trabajar en nuestros proyectos a partir de entonces.
Dependiendo del sistema operativo y probablemente de su versión, las
operaciones pueden variar: desde prácticamente no tener que hacer nada,
hasta tener que realizar algunas configuraciones o instalación de
controladores específicos. Nuestro escenario, partiendo de la instalación del
IDE versión 1.6.7 sobre Windows 10 del punto anterior, es conectar una
placa Arduino Uno Rev3:
1. Arrancamos el IDE y sin tener conectada ninguna otra alimentación a la
placa Arduino, conectamos el conector B del cable USB a la placa Arduino
y el conector A a un puerto libre del ordenador.

103
5. Conexión y reconocimiento de la placa Arduino
2. Deberemos observar inmediatamente que el
LED verde smd “ON” de la placa se enciende,
indicándonos que la placa está recibiendo
alimentación del ordenador vía USB.
3. En el IDE vamos a “Herramientas > Placa” para comprobar que tenemos
elegida nuestra placa: puede estarlo ya, si no es así la elegimos.

4. El IDE viene con un conjunto de programas de ejemplo. Vamos a abrir el


típico programa con el que se comienza a programar (intermitencia de un
LED), en este caso nos servirá para comprobar si la placa está conectada
al puerto de comunicaciones adecuado del ordenador. 104
5. Conexión y reconocimiento de la placa Arduino
En el IDE vamos a “Archivo > Ejemplos > 01.Basics > Blink” para abrir el
programa Blink (parpadeo); este se abre en una nueva ventana
(podemos cerrar la anterior).

5. En esta nueva ventana tenemos


el código fuente del programa
que hará parpadear
(intermitencia luminosa) al LED
smd “L” que incorpora la placa
Arduino Uno.
105
5. Conexión y reconocimiento de la placa Arduino
6. Ahora no nos
ocuparemos del estudio
del programa. Lo que
haremos es ordenar que
lo cargue en el µC
ATmega328P de la placa
y le ceda el control a la
misma para que pase a
ejecutarlo. Para ello
pulsamos en el botón
“Subir” del IDE.
7. En este caso, tal y como
se está describiendo el
proceso, nos vamos a
encontrar con un
problema: No está
seleccionado el puerto
COM de comunicaciones
adecuado. En efecto:
¡¡Otros escenarios son posibles!!
106
5. Conexión y reconocimiento de la placa Arduino
En el IDE habremos observado que después de darle al botón “Subir”, el
entorno realiza la compilación del programa (traducción a código
máquina del microcontrolador) y después intenta cargarlo (subirlo) al µC
de la placa. Pero la subida falla: observemos el mensaje de error que nos
da el IDE en la zona inferior de la interfaz, e igualmente observemos el
puerto COM al que supuestamente está conectada la placa (lo indica en
la parte inferior derecha de la interfaz).

En el IDE elegimos
“Herramientas >
Puerto > COM3
(Arduino/Genuino
Uno)” y le volvemos
a dar al botón
“Subir”.
107
5. Conexión y reconocimiento de la placa Arduino
Ahora debería funcionar: el LED “L” comenzará a parpadear. Si es así ya
tenemos configurada y reconocida nuestra placa Arduino Uno.
Observación. La configuración del puerto COM descrita puede cambiar
dependiendo del uso de dispositivos que uno tenga entre manos. En todo
caso habrá que asegurarse de que en el entorno elegimos el puerto
adecuado para darle servicio a la placa Arduino Uno.
Llegados a este punto ya tenemos instalado el Entorno Integrado de
Desarrollo (el Software de Arduino) y reconocida la placa Arduino Uno, lo
que significa que estamos listos para iniciar el desarrollo de programas de
aplicación y sus proyectos asociados.
Para concluir esta introducción a los sistemas programables se partirá del
programa “Blink” para iniciar el proceso de aprendizaje de la programación
de microcontroladores.
Tanto para el conocimiento del IDE como para el aprendizaje de la
programación se utilizará una estrategia distribuida, es decir, se irán
introduciendo los conceptos según las exigencias que se deriven de los
proyectos que se vayan desarrollando.
PO.2
Ahora ya podemos salir del IDE y desconectar la placa del ordenador
108
6. Desarrollo del primer programa
Al abrir el IDE nos encontramos por defecto
la estructura básica “vacía” del programa
que nos proponemos desarrollar con un
nombre asignado: “sketch_feb12a”.
Observación. En terminología Arduino se
emplea el término de “sketch” para referirse
a un programa. Vemos que el nombre por
defecto que crea es sketch seguido de guion
bajo, el mes y el día actual y la letra “a”. Si
estando abierta la edición de este programa
le damos a “Archivo > Nuevo” el nombre que
le da es el mismo sólo que la letra será “b”.
Y si mantenemos el entorno abierto y
seguimos creando nuevos, aunque los
vayamos cerrando, los nombres se irán diferenciando en la letra: c, d, ..., etc.
Nota. Si tenemos varias ventanas abiertas editando varios programas que no
han sido guardados o que se han creado en la misma sesión y le damos a
“Archivo > Salir” en una de ellas, las cerramos todas. Para cerrar una, hacemos
clic en el aspa de la esquina superior derecha de la ventana en cuestión.
109
Elementos de Programación I
El lenguaje Arduino viene a ser una adaptación de los lenguajes de
programación C y C++ con el objetivo de ofrecer un entorno de
programación que facilite el desarrollo de código para los
microcontroladores que incorporan las placas Arduino. Si se tiene
conocimiento previo de programación en C/C++ se advertirá la similitud,
siendo conscientes de que el lenguaje Arduino es un “subconjunto” de
toda la funcionalidad que ofrece un entorno genérico de C/C++.
En la estructura “vacía” del programa de la imagen anterior observamos
dos secciones:
▪ La sección llamada “void setup()”, delimitada por llaves de apertura “{“
y cierre “}”, está reservada para escribir en ella el código que sólo se
ejecutará una vez, eso es precisamente lo que dice el comentario que
incluye:
“// put your setup code here, to run once:”
Hablemos de comentarios. En la escritura de un programa hay que
distinguir la parte de texto que es código en si mismo y que dará lugar a
código ejecutable, de la parte de texto que solo es eso, texto, y que no
dará lugar a código ejecutable, pues será ignorada por el compilador.
110
Este texto “adicional” se utiliza para comentar el programa y
documentarlo en cierta medida. Hasta el programador más
experimentado, pasado algo de tiempo, no hace falta que sea mucho, si
vuelve a leer el código fuente del programa que él mismo desarrolló, se
encontrará con dificultades para interpretarlo si en su edición decidió
dejarlo pelado, es decir, una lista fría de instrucciones sin comentarios
que puedan ayudarle a interpretar el propósito del programa y la razón
de sus partes.
“Es absolutamente necesario vencer la pereza y acostumbrarse desde el
principio a comentar los programas que se desarrollen.”
Para indicarle al compilador que lo que sigue es comentario, y no código
del programa, se utilizan elementos sintácticos del lenguaje de
programación. Los comentarios de línea se indican mediante una doble
barra inclinada “//”, es decir, todo lo que venga a continuación de la
doble barra inclinada, y hasta el final de la línea (que se haya pulsado un
“intro”), será considerado comentario y el compilador lo ignorará a la
hora de generar el código ejecutable. Ejemplo:
// Esto es un comentario de línea
Si deseamos realizar comentarios que incluyan varias líneas de texto se
utilizan como delimitadores los elementos sintácticos “/*” para abrir el
111
el comentario y “*/” para cerrarlo. Ejemplo:
/*
Esto es un comentario de varias líneas:
Suelen utilizarse para redactar la cabecera de presentación del
programa (título, propósito y descripción genérica del programa, autor,
fecha, etc.), y también en aquellos casos donde se considera necesario
realizar un comentario con cierta extensión para explicar en contexto
el objeto del código que se está escribiendo.
*/
La posición de la apertura “/*” y cierre “*/” pueden escribirse en
cualquier lugar, en el ejemplo se han puesto en líneas dedicadas por
cuestión de estilo (mi estilo).
Hablemos de estilos. Una cosa es respetar las reglas sintácticas del
lenguaje de programación y otra es “redactar” el programa siguiendo un
estilo. Las reglas sintácticas son de obligado cumplimiento, si no se
respetan el programa tendrá errores sintácticos y se abortará la
compilación. El redactar el programa siguiendo determinados estilos no
es obligatorio y no forma parte de la sintaxis del lenguaje, es una opción
del programador que mejora la legibilidad del código. Cualquiera que
tenga cierta experiencia en programación sabe valorar la extraordinaria
112
importancia que tiene facilitar la lectura del código fuente. Ahora bien,
estamos hablando de estilos, lo que abre la puerta a la subjetividad, y
por tanto cada programador podría tener el suyo; no obstante, suele
haber determinadas tendencias, inclusive incorporadas por los editores
de los IDEs, para ayudar en la redacción de los programas siguiendo
determinados estilos.
Nota. Un programa puede ser sintácticamente correcto y arrojar resultados
desastrosos. Es decir, la ausencia de errores sintácticos no conlleva que un
programa cumpla con sus objetivos: un programa de control de vuelo puede
haberse desarrollado a la perfección sintácticamente y con el estilo más cuidado, y,
a la postre, terminar estrellando la aeronave.
Volvamos con la sección “void setup() { }”. En el lenguaje Arduino la
palabra “setup” hace referencia a que el conjunto de instrucciones que se
coloquen entre sus llaves se utilizan para realizar tareas habituales de
preconfiguración que sólo es necesario que se ejecuten una vez al inicio
del programa. Viene a ser la llamada a una función del lenguaje: entre
sus paréntesis se pondrían parámetros que se le pasan a la función (no
es nuestro caso), y entre las llaves se escriben las instrucciones que
desempeñan la función invocada; “void” (vacío o nulo), significa que esta
función realiza algo pero no tiene nada que devolver.
Nota. En C una función es como un subprograma pensado para realizar una tarea
113
concreta. Este subprograma para que realice su función puede requerir que se le
pasen determinados parámetros (o datos), y al ejecutarse después de una llamada
a la función puede que tenga que devolver algún tipo de resultados (no
necesariamente).
▪ La sección llamada “void loop()”, delimitada por llaves de apertura “{“
y cierre “}”, está reservada para escribir en ella el código que se
ejecutará, después de la sección “setup”, de forma indefinida (loop:
bucle o lazo) hasta que la placa se apague o se reinicie, eso es
precisamente lo que dice el comentario que incluye:
“// put your main code here, to run repeatedly:”
Es habitual que los microcontroladores se programen para gestionar el
control in situ de algún tipo de proceso (el sistema de frenos antibloqueo
de ruedas ABS –del alemán AntiBlockierSystem– por ejemplo), por lo
tanto, el programa de control desarrollado, una vez grabado en su
memoria, su destino es estar ejecutándose indefinidamente en tanto esté
operativo el sistema donde se aplique. Por eso entre las llaves del “loop”
se pondrá el conjunto de instrucciones que realiza la tarea de control
encomendada y que deberá ejecutarse permanentemente.

114
6. Desarrollo del primer programa
Después de haber introducido algunos elementos de programación, cosa
que haremos sobre la marcha según necesidad, para entender la estructura
vacía de programa con la que se abre el IDE Arduino, vamos a abrir de nuevo
el entorno, y tal y como ya se
describió, abrimos el
programa de ejemplo “Blink”.
Hagamos un esfuerzo inicial:
intentemos leer el programa
y deducir lo que hace. Por lo
estudiado hasta ahora, al
menos seremos capaces de
discriminar entre lo que es
código y lo que son
comentarios, y observar el
código introducido en las
secciones “setup” y “loop”.
En la página siguiente
tenemos una réplica
“traducida” del programa.
115
6. Desarrollo del primer programa
Sal del IDE y vuelve a entrar. Escribe el programa tal cual lo ves en la captura
y mediante “Archivo > Guardar Como...”, guárdalo en la ruta “(X:) > EMP >
UD01 > intermitencia_led_L” dándole el nombre indicado.
El IDE de Arduino
guarda los
ficheros fuente de
nuestros
programas con la
extensión “.ino”
En un lápiz de memoria USB crea la
carpeta del módulo profesional EMP
(Equipos MicroProgramables) y como
subcarpeta UD01 (Unidad Didáctica 01).

En la subcarpeta UD01 guarda el programa con el


nombre “intermitencia_led_L”, observarás que te crea
una carpeta con el mismo nombre y en ella está el
fichero con el código fuente y extensión “.ino”

116
Elementos de Programación II
Una vez editado y guardado el programa, vamos a explicarlo y a
introducir nuevos elementos de programación.
Advertencia: abstenerse de la tentación de copiar y pegar, cuando se está
aprendiendo es mucho mejor teclear y teclear la edición de los programas, esto
nos hace conocer mejor el IDE y nos permite aprender de los errores sintácticos y
de otro tipo que sin duda cometeremos.
El programa trata de controlar el encendido y apagado del LED smd “L”
que incorpora la placa Arduino Uno. En esta placa dicho LED está
conectado al pin digital 13 de la placa que se corresponde con la línea
PB5 del puerto B del µC ATmega328P.
ATMEGA328P

Advertencia: el acceso a las “líneas” del


microcontrolador mediante los pines de la
placa está determinado por su diseño
(consultar el esquema eléctrico de la placa)
117
La edición del programa comienza con un bloque de comentarios que
explica el propósito del programa, fecha, autor, etc.
Analicemos la sección “setup”:
Si el elemento a controlar, en este caso un
LED, está conectado a la línea digital 13 de la placa, esta línea habrá que
programarla como salida. Para ello, dentro del lenguaje, disponemos de
una función cuya sintaxis es:
pinMode(pin, mode);
El nombre de la función es “pinMode” y su propósito es establecer el
modo (salida o entrada) que tendrán los pines digitales de la placa. Entre
paréntesis están los argumentos que hay que pasarle: “pin” es el número
de la línea digital de la placa que se desea configurar (de 0 a 13) y
“mode” determina si actuará como entrada “INPUT” o como salida
“OUTPUT”. La instrucción debe terminar con un punto y coma “;”.
Para esta aplicación, una vez configurada la línea 13 como salida, ya no
tendremos que volver a hacerlo, es por eso que la instrucción
correspondiente la ponemos en la sección de “setup”.
Obsérvese que la función descrita parece estar pensada exprofeso para
la configuración del hardware de la placa Arduino Uno, y así es, es decir,
118
esta función no es una función estándar del lenguaje C/C++, es por eso
que hablamos de lenguaje Arduino. Por otra parte seamos conscientes
de que al usar esta instrucción de “alto nivel” y pensada para la placa
Arduino Uno, evitamos tener que programar lo mismo utilizando el
lenguaje ensamblador del microcontrolador, e inclusive podemos obviar
ciertos detalles del esquema eléctrico de la placa. En efecto, con la
descripción de la función y sabiendo quien es el pin 13 de la placa ya
puedo controlar lo que esté conectado a dicho pin, ignorando por
completo que estoy trabajando con la línea PB5 del puerto B del
microcontrolador.
Por cierto... El lenguaje distingue entre minúsculas y mayúsculas,
siendo totalmente estricto. Si, por ejemplo, al escribir el nombre de la
función ponemos “pinmode” en vez de “pinMode”, tendremos un error
de compilación. Y para recordar... Las instrucciones tienen que
terminar en punto y coma, es como le indicamos al compilador que
termina esa instrucción o sentencia (es bastante frecuente olvidarse de
algún punto y coma de terminación).
Relacionado con las características del editor del IDE, se habrán
observado ciertos colores atribuidos a determinados elementos
sintácticos del lenguaje: son ayudas que facilitan el reconocimiento de
dichos elementos y conviene prestar atención a su comportamiento.
119
Analicemos ahora la sección “loop”:

Una vez programada la línea digital 13 como salida, el programa deberá


encender y apagar el LED asignándole un tiempo de encendido y un
tiempo de apagado, y esto es lo que tendrá que estar ejecutándose
permanentemente, por eso lo ponemos en el “loop”.
Para que el LED se encienda necesitamos sacar un potencial alto por la
línea 13, y para apagarlo el potencial tendrá que ser bajo. Para ello
disponemos de una función del lenguaje cuya sintaxis es:
digitalWrite(pin, value);
El nombre de la función es “digitalWrite” y entre paréntesis están los
argumentos o parámetros que hay que pasarle: “pin” es el número del
pin digital en el que queremos colocar el valor de potencial alto o bajo, y
“value” es precisamente dicho valor, “HIGH” para potencial alto y “LOW”
para potencial bajo. Si nuestra placa trabaja a 5 V, HIGH supondrá una
salida de 5 V 𝐼𝑚á𝑥 ≈ 40 𝑚𝐴 y LOW una salida de 0 V.
120
Nota. En este contexto, las palabras “HIGH” y “LOW” de la función “digitalWrite”, y
las palabras “INPUT” y “OUTPUT” de la función “pinMode”, reciben el nombre de
constantes predefinidas en el lenguaje. Esto significa que su “actuación” ya está
de partida definida en el lenguaje. En otro momento hablaremos de las
declaraciones: en los lenguajes de programación hay cosas que “no existen” hasta
que las declaremos (si las usamos sin declararlas el compilador no las reconocerá).
Si las instrucciones “digitalWrite(13, HIGH);” y “digitalWrite(13, LOW);”
las ejecutamos una a continuación de la otra y vuelta a empezar, la
intermitencia se produce a una frecuencia (función del reloj del sistema)
que nos impediría apreciarla. Una forma de controlar el tiempo de
encendido y de apagado es mediante una función de retardo (delay). El
lenguaje dispone de una función de retardo cuya sintaxis es:
delay(ms);
Esta función “pausa” el programa (hablaremos de esta pausa después)
durante el tiempo especificado en milisegundos “ms” pasado como
parámetro.
Entonces, interpretando el código, lo que hace el “loop” es colocar un
nivel alto en la línea 13 (enciende el LED) y espera 1000 ms (1 s), a
continuación coloca un nivel bajo en la línea 13 (apaga el LED) y espera
1000 ms (1 s), y vuelta a empezar.
Aunque el programa es sencillo, obsérvese la ayuda de los comentarios. 121
Por cierto... Obsérvese el estilo de sangrado (indentado del texto) que
se suele emplear en la edición de los programas, esta estructura de
sangrados tiene por finalidad hacer más legible el código.
¿Cómo funciona la función “delay(ms);”? Esta función de alto nivel
“esconde” un subprograma asociado en lenguaje ensamblador del µC
que suele llamarse subrutina de retardo, y que probablemente consiste
en gestionar un tiempo mediante la inicialización de un registro
empleado como contador: por ejemplo, se inicializa el registro con un
valor (función del tiempo requerido), a continuación se decrementa y se
pregunta si ha llegado a cero, si no a llegado a cero vuelve a
decrementarse y continúa este proceso en bucle hasta que se cumpla la
condición de llegar a cero, cuando se cumpla la condición sale del bucle y
se termina la subrutina de retardo. Desde la inicialización hasta que se
cumple la condición se están ejecutando instrucciones de ensamblador y
por lo tanto “consumiéndose” ciclos de reloj, es decir, estamos
gestionando una temporización (esto significaba la pausa del programa).
Importante Esta forma de gestionar una temporización es muy ineficaz,
obsérvese que mientras el µC esta metido en el bucle de la subrutina no hace otra
cosa que gastar tiempo. Según el contexto de la aplicación, existen formas de
gestionar el tiempo entre una acción de encendido y una de apagado, por ejemplo,
de tal forma que entre acción y acción el µC pueda estar haciendo otras cosas, eso
sí, tendremos que ser más creativos para aprovechar mejor el tiempo de proceso. 122
6. Desarrollo del primer programa
Una vez que tenemos editado el programa y guardado, y que también
sabemos cómo trabaja, vamos a compilarlo. Si no hemos cometido errores
sintácticos la compilación terminará con éxito, de otra forma nos aparecerán
mensajes de error.
Para ordenar la compilación
hacer clic en el botón

“Verificar”

y observar la indicación de
progreso en la barra debajo
del editor. Terminada la
compilación la barra de
progreso desaparece y el
mensaje cambia a
“Compilado”.
Estamos listos para cargar
el programa en la memoria
del µC y ejecutarlo.
123
6. Desarrollo del primer programa
Conectar la placa al ordenador. La carga del programa y el paso inmediato a
su ejecución se realiza haciendo clic en el botón “Subir” (se realizará de
nuevo la compilación). En la línea debajo del editor observaremos que nos
salen sucesivamente los mensajes: “Compilando programa...”, “Subiendo...”
y “Subido”, y nuestro programa iniciará su ejecución.

Vamos a comentar la información que muestra el IDE en su zona inferior:

Dice que el Sketch (programa) usa 1030 bytes de memoria de programa, siendo el
máximo disponible de 32 256 bytes. Recuérdese que la memoria de programa tiene
una capacidad de 32 KB (32 768 bytes), a los que hay que quitarle 512 bytes para el
gestor de arranque. Entonces, el porcentaje de uso ronda el 3 % (calcúlese). El resto
del mensaje hace referencia a la memoria SRAM de datos de 2 KB (2048 bytes).
En la última línea de la interfaz (izquierda) aparece un número: es el número de
línea que actualmente ocupa el cursor en el editor. A la derecha nos informa del
puerto COM con el que se comunica la placa. PO.3
124
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Notación empleada, según contexto, para hacer referencia a un
Microcontrolador
µC microcontrolador o a un microcomputador (un microcontrolador suele
o microcomputador
considerarse como un microcomputador en un solo circuito integrado).
µP Microprocesador Notación empleada para hacer referencia a un microprocesador.
Convertidor Analógico Digital: sistema electrónico que convierte señales
analógicas en señales digitales. Los microcontroladores pueden incluirlos
ADC Analog to Digital Converter
internamente en el chip. También se denotan mediante A/D. También suele
utilizarse el acrónimo en español: CAD.
Combinación de un determinado número de bits que se interpreta como
Address Dirección una dirección de una posición de memoria o de un registro interno de un
microprocesador o microcontrolador.
Unidad Aritmética y Lógica: es la parte constitutiva de la Unidad Central de
Proceso (CPU) encargada de la realización de las operaciones aritméticas y
ALU Arithmetic Logic Unit lógicas derivadas de las instrucciones en curso de ejecución. En un
microcontrolador la CPU está integrada en la pastilla, por lo tanto la ALU
también lo está.
Puerta Lógica Y: dentro de la electrónica digital es un tipo de puerta o
AND AND función lógica que se caracteriza por que su salida es 1 si todas sus entradas
están a 1 y su salida es 0 si al menos una de sus entradas es 0.
Proyecto de Hardware Libre que se gesta a partir de 2005 mediante la
colaboración de sus cofundadores cuando en el Instituto de Diseño
Interactivo de Ivrea (Italia) se proponen crear una placa para el desarrollo de
proyectos electrónicos que resultara sencilla de utilizar y accesible
Arduino Proyecto Arduino
económicamente. El nombre de Arduino es el de un Bar próximo al Instituto
citado (también Arduino fue marqués de Ivrea y después rey de Italia). Los
cofundadores son: Massimo Banzi, David Cuartielles, David Mellis, Tom Igoe y
Gianluca Martino.
125
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Referencia Analógica: en el microcontrolador ATmega328P terminal que se
AREF Analog REFerence emplea para aplicar un tensión analógica de referencia en procesos de
conversión analógico-digital.
Circuito Integrado de Aplicación Específica: vienen a ser circuitos integrados
de arquitectura configurable, es decir, el conexionado de la circuitería
Application Specific
ASIC interna, su arquitectura hardware, no está completamente definida por el
Integrated Circuit
fabricante, la definición última la puede establecer el fabricante bajo pedido
o ser realizada por el usuario mediante técnicas específicas de programación.
Tensión de Alimentación Analógica: en el microcontrolador ATmega328P
AVcc Analog Supply Voltage terminal en el que se aplica una tensión relacionada con aplicaciones que
emplean la conversión analógico-digital.
Hace referencia a un tipo de arquitectura de microcontroladores (no parece
Advanced Virtual RISC o
AVR estar claro el origen de su denominación, suelen considerarse las dos
Alf y Vegard RISC
expuestas, la segunda contempla los nombres de sus diseñadores).
Sistema Básico de Entrada y Salida de un ordenador: programa básico que
BIOS Basic Input Output System se encarga de los procesos primarios en tareas de arranque e inicialización de
dispositivos.
Dígito Binario: es la unidad elemental (más pequeña) de información digital,
Bit Binary Digit
solo puede tener dos valores, denominados "0" y "1".
Hace referencia a una intermitencia luminosa. En el IDE de Arduino se utiliza
Blink Parpadear o parpadeo el término para un programa básico de ejemplo cuyo propósito es obtener
una intermitencia luminosa sobre un led de la placa.

126
ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Es un programa que en algunos sistemas o dispositivos puede venir grabado
de fábrica y que suele prestar funcionalidades básicas para el uso inmediato
del sistema o dispositivo. Las placas Arduino vienen de fábrica con un gestor
Bootloader Gestor de arranque de arranque pregrabado en la memoria Flash de programa: este
"bootloader" permite la gestión automática del proceso de grabación en la
memoria flash del microcontrolador del programa de aplicación que tendrá
que ejecutar.
Bus o canal de comunicación digital: conjunto de líneas (conductores) al que
se conectan diversos dispositivos para que puedan intercambiar información.
Pueden ser externos (pistas de circuito impreso, por ejemplo) o internos
Bus Canal de comunicación
(conexiones entre bloques funcionales dentro de un chip). Cuando las líneas
se agrupan funcionalmente suelen recibir un nombre específico: bus de
datos, bus de direcciones, bus de control, etc.).
Byte Octeto Byte u octeto: agrupación de 8 bits o dígitos binarios (variables binarias).
Reloj: distintas abreviaturas con las que se nombra al oscilador (generador de
onda cuadrada) que proporciona una señal de control de actuaciones o
C, CL, CK, CLK Clock
sincronismo, de una frecuencia determinada, para un conjunto de elementos
dentro de un sistema digital.
Término con el que se reconoce a la pastilla de semiconductor que da origen
Chip Circuito Integrado
a un circuito integrado o este mismo.
Complex Programmable Dispositivo Lógico Programable Complejo: los PLDs se clasifican en Sencillo y
CPLD Logic Device Complejos, precisamente los Complejos son los de arquitectura más
(Complex PLD) compleja, ofreciendo más posibilidades para la síntesis de sistemas digitales.
Unidad Central de Proceso: en arquitectura de microcomputadores es la
unidad encargada de procesar las instrucciones del programa (cuando está
CPU Central Processing Unit integrada en un solo chip suele llamarse microprocesador). En un
microcontrolador forma parte del chip. También suele utilizarse el acrónimo
en español: UCP.
127
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Selección de Circuito o Chip: señal de la que disponen muchos circuitos
integrados o dispositivos en general utilizada para seleccionarlos de entre
varios o sencillamente para indicar que se les demanda que estén operativos.
CS Chip Select Suele actuar sobre patillas o terminales de conexión del circuito o dispositivo
seleccionado de tal manera que se conecten a líneas de comunicación
compartidas cuando esta señal CS está activa (su activación puede ser por
nivel alto o nivel bajo).
Convertidor Digital Analógico: sistema electrónico que convierte señales
digitales en señales analógicas. Los microcontroladores pueden incluirlos
DAC Digital to Analog Converter
internamente en el chip. También se denotan mediante D/A. También suele
utilizarse el acrónimo en español: CDA.
En programación suele emplearse para hacer referencia a un subprograma
que permite gestionar temporizaciones. En el Lenguaje de Arduino es el
delay Retardo nombre de una función que introduce un retardo (como si el programa
quedara parado) que durará el tiempo que se le especifique mediante un
parámetro.
Memoria de Acceso Aleatorio Dinámica: es un tipo de memoria de acceso
Dynamic Random Access
DRAM aleatorio, volátil y de lectura-escritura que precisa de un circuito de refresco
Memory
mientras está alimentada para el mantenimiento de los datos almacenados.
Es un programa informático que permite al sistema operativo interaccionar
driver
Controlador de dispositivo con un dispositivo (periférico), haciendo una abstracción del hardware y
(device
o manejador de dispositivo proporcionando una interfaz (a veces estandarizada) para utilizar dicho
driver)
dispositivo.
Ciclo de Trabajo: en una onda cuadrada de frecuencia constante (por lo tanto
periodo constante), relación entre el tiempo de alta y el periodo expresada
Duty Cycle Duty Cycle en porcentaje. DC = Ton (100 / T) = Ton (100 / (Ton + Toff)): DC es el Duty
Cycle, Ton es el tiempo de alta, Toff es el tiempo de baja y T el periodo (suma
de Ton + Toff).
128
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Memoria de Solo Lectura Programable y Borrable Eléctricamente: es un tipo
EEPROM Electrically Erasable de memoria de acceso aleatorio no volátil de solo lectura, que no admite la
o Programmable Read Only operación de escritura como operación normal aunque si un determinado
2
E PROM Memory número de ciclos de grabación (se puede borrar su contenido ꟷpor impulsos
eléctricosꟷ, grabarse de nuevo y vuelve a ser una memoria de solo lectura).
Memoria de Solo Lectura Programable y Borrable: es un tipo de memoria de
acceso aleatorio no volátil de solo lectura, que no admite la operación de
Erasable Programmable Read
EPROM escritura como operación normal aunque si un determinado número de
Only Memory
ciclos de grabación (se puede borrar su contenido ꟷpor rayos ultravioletaꟷ,
grabarse de nuevo y vuelve a ser una memoria de solo lectura).
Se conoce como firmware al programa que suele encontrarse registrado en
Software básico o "primario" una memoria ROM, Flash o similar, teniendo por misión determinar la "lógica
Firmware
de un sistema o dispositivo primaria" que ejerce el control de algunos sistemas o dispositivos,
normalmente en los procesos de arranque e inicialización.
Indicador de Acarreo, Indicador de Signo, etc.: indicadores del registro de
estado que informan sobre diferentes eventos, como un desbordamiento en
Flag Carry Flag, Negative Flag, etc.
una operación aritmética o el signo del resultado de una operación, por
ejemplo.
Matriz de Puertas Programable por Campo: la denominación en si misma,
traducida o no, no resulta significativa. Son CIs que contienen bloques de
lógica cuya interconexión y funcionalidad puede ser configurada mediante un
Field Programmable Gate lenguaje de descripción (de hardware) especializado. La lógica programable
FPGA
Array puede reproducir desde funciones sencillas como las puertas lógicas pasando
por diversos sistemas combinacionales y secuenciales, hasta alcanzar diseños
específicos de cierta complejidad próximos a lo que podrían ser ASICs a
media.

129
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Circuitos integrados a medida: se fabrican bajo pedido del cliente para
full-custom Diseño a medida satisfacer necesidades muy específicas de aplicación. Suele derivar en altos
costes de fabricación.
full-duplex Dúplex Sistema de comunicación bidireccional simultáneo.

Matriz Genérica Programable: pertenece a uno de los tipos de dispositivos


GAL Generic Array Logic
lógicos programables sencillos (SPLD).
Masa: punto de referencia de potenciales en un sistema electrónico
GND Ground
(normalmente cero voltios).

half-duplex Semi-Dúplex Sistema de comunicación bidireccional pero no simultánea.


Un sistema o dispositivo que para su funcionamiento, a parte del conjunto de
elementos físicos que constituyen su soporte material, necesita de otros
"componentes", en cierta medida intangibles, como el conjunto de órdenes
Sistema o soporte físico: que determinan en última instancia el comportamiento final del sistema o
Hardware
Circuitos dispositivo, constituye un sistema o dispositivo programable. Ese conjunto
de elementos físicos es lo que se entiende por hardware. El hardware
admite una jerarquía y una categorización dando lugar a diferentes tipos de
hardware.
Nivel alto o parte alta: puede hacer referencia al valor alto de un bit o a la
High Alto parte alta de una combinación de n bits (es habitual en combinaciones de n
bits, con n par, dividirlas en dos partes de n/2 bits: parte alta y parte baja).
Unidad de Entrada y Salida: en arquitectura de microcomputadores es la
unidad a través de la cual se produce la comunicación entre el
I/O Unit Input/Output Unit microcomputador y los periféricos de entrada y salida (puede presentarse
disponible en un circuito integrado al efecto). En un microcontrolador forma
parte del chip.
130
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Circuito Entre Integrados o Interfase a Dos Hilos: aunque la traducción
I2C Inter-Integrated Circuit "aséptica" no tiene mucho significado, estos dos acrónimos hacen referencia
o o a un bus de comunicaciones serie síncrono (semi-dúplex) utilizado para el
TWI Two-Wire Interface intercambio de datos entre microcontroladores y sus periféricos u otros
dispositivos.
Circuito Integrado: circuito electrónico cuyos componentes se alojan en la
misma pastilla de material semiconductor, presentándose en un único
IC Integrated Circuit encapsulado con las patillas accesibles al exterior que permiten acceder a las
conexiones pertinentes (existe una extraordinaria variedad). En este caso se
utiliza mucho el acrónimo en español: CI.
Programación Serie en Circuito: técnica y capacidad de algunos dispositivos
programables (microcontroladores por ejemplo) para ser programados
mientras están instalados en el sistema, sin necesidad de que tengan que ser
ICSP In Circuit Serial Programming
programados previamente antes de su instalación en dicho sistema.
Normalmente esta técnica exige disponer de un programador ISP que puede
utilizar un conector de 6 o 10 pines denominado conector ICSP.
Entorno de Desarrollo Integrado: aplicación informática que incluye un
Integrated Development
IDE determinado conjunto de herramientas de software que asisten y ayudan en
Environment
las tareas de programación (hay muchos contextos distintos).
Hace referencia a la entrada de información en un sistema: puede ser una
Input Entrada línea de entrada, un puerto de entrada, un periférico o dispositivo de
entrada, etc.
Programación En Sistema: hace referencia a la técnica que permite
ISP In System Programming programar los dispositivos programables estando instalados en el sistema de
destino.

131
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Diodo Emisor de Luz: diodo semiconductor que emite luz cuando se le aplica
tensión, esta definición es la que da la RAE. Es tan difundido su uso que este
LED Light Emitting Diode
término se ha lexicalizado y ha pasado a emplearse como sustantivo común y
su plural debería ser "ledes".
Último en Entrar, Primero en Salir: es un tipo de memoria de acceso
secuencial caracterizada por que el último dato almacenado es el primero
LIFO Last In, First Out
disponible para su lectura. Esta estructura de memoria puede implementarse
por hardware o por software.
Nivel bajo o parte baja: puede hacer referencia al valor bajo de un bit o a la
Low Bajo parte baja de una combinación de n bits (es habitual en combinaciones de n
bits, con n par, dividirlas en dos partes de n/2 bits: parte alta y parte baja).
Modelo Maestro-Esclavo: también llamado Principal-Subordinado, este
modelo se aplica en diferentes contextos técnicos, se fundamenta en que la
Master-Slave Maestro-Esclavo
actuación del "dispositivo" llamado esclavo o subordinado está supeditada,
de alguna forma, a la actuación del "dispositivo" llamado maestro o principal.
Entrada del Maestro Salida del Esclavo: en el protocolo de comunicación
MISO Master In Slave Out serie síncrona SPI línea que conecta una entrada de un dispositivo que actúa
como maestro con una salida de un dispositivo que actúa como esclavo.
Salida del Maestro Entrada del Esclavo: en el protocolo de comunicación
MOSI Master Out Slave In serie síncrona SPI línea que conecta una salida de un dispositivo que actúa
como maestro con una entrada de un dispositivo que actúa como esclavo.
Unidad de Memoria: parte de un sistema programable destinada al
MU Memory Unit almacenamiento de datos y programas (existe una extraordinaria variedad de
concepciones). En un microcontrolador forma parte del chip.
Puerta Lógica NO-Y: dentro de la electrónica digital es un tipo de puerta o
NAND NOT-AND función lógica que se caracteriza por que su salida es 1 si al menos una de sus
entradas es 0 y su salida es 0 si todas sus entradas están a 1.

132
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Puerta Lógica NO-O: dentro de la electrónica digital es un tipo de puerta o
NOR NOT-OR función lógica que se caracteriza por que su salida es 1 si todas sus entradas
están a 0 y su salida es 0 si al menos una de sus entradas es 1.
Off, sea con mayúsculas o minúsculas, se emplea profusamente con
Apagado
diferentes connotaciones: apagado o desactivación de un dispositivo (un led
off, OFF (puede tener más
por ejemplo), estado de una señal digital (bajo normalmente), un contacto
interpretaciones)
(interruptor abierto), etc.
On, sea con mayúsculas o minúsculas, se emplea profusamente con
Encendido
diferentes connotaciones: encendido o activación de un dispositivo o
on, ON (puede tener más
elemento (un led por ejemplo), estado de una señal digital (alto
interpretaciones)
normalmente), un contacto (interruptor cerrado), etc.
Puerta Lógica O: dentro de la electrónica digital es un tipo de puerta o
OR OR función lógica que se caracteriza por que su salida es 1 si al menos una de sus
entradas es 1 y su salida es 0 si todas sus entradas están a 0.
Asociación para el Hardware de Fuente Abierta: entidades similares a las del
Open Source HardWare
OSHWA software libre, que tratan de difundir la tecnología, en este caso el hardware
Association
de sistemas electrónicos, sin las trabas de las patentes clásicas.
Hace referencia a la salida de información en un sistema: puede ser una
output Salida
línea de salida, un puerto de salida, un periférico o dispositivo de salida, etc.
Matriz Lógica Y-Programable: pertenece a uno de los tipos de dispositivos
PAL Programmable Array Logic
lógicos programables sencillos (SPLD).
Placa de Circuito Impreso: técnica que permite disponer los componentes
electrónicos de un sistema en una placa mediante soldadura,
PCB Printed Circuit Board
estableciéndose las conexiones mediante pistas de cobre situadas en la
propia placa. Le dota al conjunto de solidez y fiabilidad.
Encapsulado de Plástico en Doble Hilera de Terminales: es un tipo de
PDIP Plastic Dual In-Line Package
encapsulado de circuitos integrados (existe una gran variedad de tipos).
133
ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Tecnología de bajo consumo propietaria del fabricante Atmel, que permite
picoPower picoPower Technology
obtener microcontroladores con bajo consumo eléctrico.
Normalmente se refiere a las patillas de un circuito integrado (elementos de
conexión que permiten acceder a su interior), pero también puede
pin Patilla emplearse para referirse a otros conectores disponibles en las placas de
circuito impreso como las tiras de conexión (macho o hembra): "tiras de
pines".
Matriz Lógica Programable: pertenece a uno de los tipos de dispositivos
PLA Programmable Logic Array
lógicos programables sencillos (SPLD).
Dispositivo Lógico Programable: hace referencia a un tipo de circuitos
integrados que permiten configurar parte del conexionado de sus elementos
PLD Programmable Logic Device internos aplicando técnicas específicas de programación (lo que supone
cierta configuración del hardware por programación). En otros contextos
podría interpretarse con mucha más generalidad.
Puerto de Comunicaciones: hace referencia a un conjunto de líneas o
terminales asociados a un registro (el puerto) que sirve de intermediario en
la comunicación entre determinadas partes internas del microcomputador y
Port Puerto los periféricos o elementos externos conectados al puerto. Forman parte de
la unidad de entrada y salida y en los microcontroladores esta unidad está
integrada en el propio chip (si hay varios suelen denominarse: PA, PB, PC,
etc.; y a una línea en particular: PA0, PB5, etc.)
Memoria de Solo Lectura Programable: es un tipo de memoria de acceso
Programmable Read Only aleatorio no volátil de solo lectura, es decir, que una vez grabada no admite
PROM
Memory la operación de escritura (admiten un solo ciclo de grabación efectuado por
el usuario).
Resistencia de polarización que se conecta entre una entrada y el nivel bajo
Resistencia de polarización a
pull-down de alimentación eléctrica (GND) para que en ausencia de señal de entrada el
nivel bajo
nivel lógico por defecto sea de nivel bajo (0 lógico).
134
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Resistencia de polarización que se conecta entre una entrada y el nivel alto
Resistencia de polarización a
pull-up de alimentación eléctrica (VCC o VDD) para que en ausencia de señal de
nivel alto
entrada el nivel lógico por defecto sea de nivel alto (1 lógico).
Modulación por Anchura de Pulsos: técnica que permite emular la acción de
una señal analógica mediante una onda cuadrada (un tren de pulsos) de
PWM Pulse Width Modulation frecuencia constante donde se puede variar el estado de alta, lo que permite
controlar el ciclo de trabajo de la onda y por lo tanto su valor medio, de esta
manera se puede modificar la cantidad de energía entregada a una carga.
Titanato Circonato de Plomo: material consistente en cristales mixtos de
circonato de plomo (PbZrO3) y titanato de plomo (PbTiO3). Las propiedades
Lead Zirconate Titanate (Lead de estos componentes piezocerámicos son aprovechadas para fabricar
PZT
es Plomo) resonadores piezoeléctricos (resonadores cerámicos) que se aplican en el
diseño de osciladores para establecer y estabilizar la frecuencia de oscilación
con una determinada precisión.
Leer: puede referirse a una señal de orden de lectura de un dato, activa con
R Read nivel bajo o alto, o a la propia operación de lectura (de una posición de
memoria o registro, por ejemplo).
Memoria de Acceso Aleatorio: es un tipo de memoria de acceso aleatorio,
RAM Random Access Memory
volátil y de lectura-escritura.
Se utiliza este término para referirse al proceso de inicialización de un
sistema, talvez con más propiedad al proceso de reinicialización en
"caliente", es decir, estando el sistema en funcionamiento o al menos con
Reset Reinicio
alimentación eléctrica: provocar mediante el accionamiento del reset el
proceso de reinicialización. Puede haber matices diferentes entre un reset en
frío y un reset en caliente.
Reduced Instruction Set Computador con Conjunto Reducido de Instrucciones: hace referencia a un
RISC
Computer tipo de arquitectura de computadores.

135
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Memoria de Solo Lectura: es un tipo de memoria de acceso aleatorio no
ROM Read Only Memory volátil de solo lectura, es decir, que no admite la operación de escritura
(admiten un solo ciclo de grabación normalmente efectuado en fábrica).
Señal de Reloj: en los sistemas digitales síncronos, señal periódica de una
SCK Signal ClocK determinada frecuencia que sirve de referencia y sincronización para la
actuación del conjunto.
Señal de Reloj: en el protocolo de comunicaciones serie síncrono I2C es la
SCL Signal CLock
señal de reloj que sincroniza la transferencia de datos.
Señal de Datos: en el protocolo de comunicaciones serie síncrono I2C es la
SDA Signal DAta
señal por la que se transfieren los datos.
Entrada Serie de Datos: en el protocolo de comunicación serie síncrona SPI
SDI Serial Data In
entrada serie de datos para un dispositivo conectado al bus.
Salida Serie de Datos: en el protocolo de comunicación serie síncrona SPI
SDO Serial Data Out
salida serie de datos para un dispositivo conectado al bus.
Circuitos integrados parcialmente a medida: se fabrican bajo pedido del
cliente para satisfacer necesidades específicas de aplicación, pero a partir de
Diseño parcialmente a
semi-custom unas bases de fabricación predefinidas, permitiéndole al fabricante amortizar
medida
tecnologías y recursos lo que favorece en cierta medida el abaratamiento de
los costes.
Es un término que suele aplicarse a procesos iniciales de configuración e
instalación. También puede ser un tipo de software que permite configurar
otro software o el propio hardware. En el Lenguaje de Arduino se emplea
Setup Configuración, inicialización
para hacer referencia al conjunto de instrucciones que se utiliza para
realizar tareas habituales de preconfiguración e inicialización que sólo es
necesario que se ejecuten una vez al inicio del programa.

136
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Shield es en inglés "escudo, armadura o pantalla protectora, etc.", en este
contexto hace referencia a placas de circuito impreso que se acoplan
shield Placa supletoria o auxiliar fácilmente a las placas base (la Arduino UNO, por ejemplo) y que permiten
desarrollar proyectos de mayor alcance al estar especializadas en diferentes
campos de aplicación.
Programa: aunque como vocablo inglés tiene otras acepciones, en el
Sketch Boceto, bosquejo o esbozo contexto de la plataforma Arduino se utiliza el término para referirse a un
programa desarrollado para el microcontrolador que tenga la placa.
Dispositivo de Montaje Superficial: componentes electrónicos de tamaño
SMD Surface Mount Device reducido que se sueldan a la placa de circuito impreso sin realizar taladrado,
es decir, sobre su superficie.
Un sistema o dispositivo que para su funcionamiento, a parte del conjunto de
elementos físicos que constituyen su soporte material, necesita de otros
"componentes", en cierta medida intangibles, como el conjunto de órdenes
Sistema o soporte lógico: que determinan en última instancia el comportamiento final del sistema o
Software
Programas dispositivo, constituye un sistema o dispositivo programable. Ese conjunto
de órdenes (instrucciones) es lo que se entiende por software. El software
admite una jerarquía y una categorización dando lugar a diferentes tipos de
software.
Puntero de Pila: es un registro especial que presentan los microprocesadores
y microcontroladores que contiene las direcciones de acceso a la zona de
memoria donde se haya implementado la memoria secuencial de tipo LIFO
SP Stack Pointer
(último en entrar, primero en salir). Es decir, este registro gestiona la
estructura de memoria LIFO que es útil dentro del tratamiento de saltos a
subrutinas e interrupciones.

137
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Interfase Serie entre Periféricos: más concretamente este acrónimo hace
referencia a un bus de comunicaciones serie síncrono (dúplex) utilizado para
SPI Serial Peripheral Interface
el intercambio de datos entre microcontroladores y sus periféricos u otros
dispositivos.
Simple Programmable Logic Dispositivo Lógico Programable Sencillo: los PLDs se clasifican en Sencillos y
SPLD Device Complejos, precisamente los Sencillos son los de arquitectura más simple o
(Simple PLD) sencilla.
Memoria de Acceso Aleatorio Estática: es un tipo de memoria de acceso
Static Random Access
SRAM aleatorio, volátil y de lectura-escritura capaz de mantener los datos mientras
Memory
siga alimentada sin necesidad de circuito de refresco.
Registro de Estado: es un registro especial que presentan los
microprocesadores y microcontroladores compuesto de un determinado
número de bits llamados "indicadores" que se activan ante determinados
SREG Status Register eventos relevantes al ejecutarse algunas instrucciones (signo del resultado de
una operación aritmética, por ejemplo). El programador dispone de
instrucciones que le permiten consultar el estado de estos indicadores y
actuar en consecuencia.
Selección de Esclavo: en un sistema que utiliza el modelo maestro-esclavo
SS Slave Select señal utilizada para seleccionar a un dispositivo esclavo (su activación puede
ser por nivel alto o nivel bajo).
Oscilador a Cristal de cuarzo con compensación de temperatura: los cristales
de cuarzo se emplean como dispositivos electromecánicos aprovechando sus
propiedades piezoeléctricas que son muy estables en el tiempo y poco
Temperature Compensated
TCXO afectadas por los cambios de temperatura y humedad, no obstante, cuando
Crystal Oscillator
se emplean para osciladores de referencia de alta precisión se encapsulan de
una determinada manera para mejorar su inmunidad frente a las variaciones
de temperatura.

138
A ACRÓNIMOS Y OTROS TÉRMINOS
ACRÓNIMO SIGNIFICADO DESCRIPCIÓN
Transmisor Receptor Asíncrono Síncrono Universal: circuito, módulo o
Universal Synchronous sistema que permite gestionar transmisiones serie de datos de diferentes
USART Asynchronous Receiver formas. Puede estar disponible como circuito integrado individual o ser un
Transmitter módulo de un circuito integrado con más funcionalidades (puede formar
parte de un microcontrolador, por ejemplo).
Bus Serie Universal: protocolo de comunicación serie que implementan los
USB Universal Serial Bus
ordenadores y múltiples dispositivos.
Escribir: puede referirse a una señal de orden de escritura de un dato, activa
W Write con nivel bajo o alto, o a la propia operación de escritura (de una posición de
memoria o registro, por ejemplo).
Cristal de cuarzo: se aprovechan su propiedades piezoeléctricas en el diseño
XTAL Quartz Crystal de osciladores para determinar y estabilizar la frecuencia de oscilación
consiguiéndose una alta precisión para la misma.

Volver al índice

139
III. MATERIAL E INSTRUMENTACIÓN. RECURSOS
Los recursos necesarios para el desarrollo de esta unidad didáctica o tema
curricular están desglosados en Recursos Generales y Recursos Específicos
bajo la consideración de un Aula-Taller con 15 Puestos de Trabajo (PT)
equipados para el alumnado, a dos alumnos o alumnas por puesto de
trabajo (ratio de 30), y un Puesto de Trabajo (PT) equipado para el profesor
o profesora.
Determinados recursos asociados a la categoría de generales, como puede
ser el mobiliario, se consideran obvios y no se relacionan.
Un puesto informático para el alumnado conlleva un ordenador completo
(en formato de sobremesa o portátil) con acceso a Internet.
RECURSOS GENERALES
Cantidad Cantidad
núm. Tipo, Clase o Concepto
por PT total
Aula-Taller con dotación de equipamiento informático:
1
ordenadores para el alumnado. 1 15
Puesto informático de profesor o profesora: ordenador
2
más cañón proyector. 1 1
140
RECURSOS ESPECÍFICOS
Cantidad Cantidad
núm. Tipo, Clase o Concepto
por PT total
Software Arduino (libre): Entorno de Desarrollo
1
Integrado (IDE, Integrated Development Environment). 1 16
3 Placa de desarrollo Arduino Uno R3 (Revisión 3). 1 16
4 Cable USB tipo A/B para placa Arduino Uno. 1 16

141
IV. PROCESO OPERATIVO (PO.X)
1. Instalación del Software Arduino. PO.1

a) Entra en la página oficial y descarga el fichero de instalación para


plataforma Windows del Software Arduino (IDE oficial).
b) A continuación realiza la instalación del citado software. Finalizada la
instalación comprueba que el proceso de instalación te ha creado la
estructura de carpetas “Arduino > libraries” colgando de la carpeta
“Documentos” del Explorador de archivos de Windows. Comprueba y
abre el fichero “readme.txt” que la instalación aloja en la carpeta
“libraries”: en este fichero te indica la página web donde obtendrás
información para instalar librerías (bibliotecas), de esto se hablará
más adelante.
c) Arranca el IDE y observa el aspecto de la interfaz y de la estructura
vacía de programa o sketch listo para su edición. Haciendo clic en el
botón “Salvar” guarda el programa aceptando las opciones por
defecto. Comprueba que te ha guardado el programa con el nombre
“sketch_mesdiaa.ino” con el mes y día actual, en la ruta “Arduino >
sketch_mesdiaa”.
d) Sal del IDE y elimina la carpeta “sketch_mesdiaa”.
142
2. Conexión y reconocimiento de la placa Arduino PO.2

Para la conexión y reconocimiento de la placa Arduino Uno Rev3 sigue la


descripción realizada en el punto 5 de la sección de conocimientos
previos.
Lee atentamente la citada descripción y ten presente que los escenarios
pueden ser distintos dependiendo de la versión del sistema operativo, la
configuración que se tenga del ordenador donde corre el IDE, etc.
El objetivo final será cargar el programa “Blink” en el microcontrolador
de la placa y que se inicie su ejecución. Si se realiza la compilación,
queda “subido” el programa y observamos su ejecución, parpadeo del
LED “L” smd de la placa, ya tendremos conectada y reconocida nuestra
placa Arduino y lista para desarrollar nuestros programas.

143
3. Desarrollo del primer programa
a) Conecta la placa Arduino Uno al ordenador mediante el cable USB y
arranca el IDE. Edita la versión traducida del programa “Blink”
mostrada en el punto 6 de conocimientos previos.
b) Compila el programa mediante el botón “Verificar” tal como se indica
en el punto 6 de conocimiento previos. Si obtienes errores de
compilación revisa el programa y vuelve a intentarlo. Cuando la
compilación termine con éxito, haz clic en el botón “Subir” para
cargar el programa en el microcontrolador y que comience su
ejecución. Presta atención a los mensajes, y en general al
comportamiento del IDE, para familiarizarte con su “funcionamiento”
y prestaciones. Merece reseñar darse cuenta de la actuación de los
LEDs “TX” y “RX” (Transmisión/Recepción) de la placa cuando el IDE
está cargando el programa en el microcontrolador (mensaje
“Subiendo...”), la actividad en estos LEDs indica que en ese momento
hay comunicación entre el IDE y la placa Arduino.
Se ha recorrido un largo camino para llegar
hasta aquí: comenzar a desarrollar programas
de aplicación para un sistema electrónico con
un mínimo conocimiento de contexto técnico.
144
4. Ensayo de variantes sobre el programa “Blink”
Algo que haremos habitualmente sobre los programas de los proyectos
que vayamos desarrollando, es ensayar diferentes modificaciones del
programa base para analizar su comportamiento. Esto nos permite
desde el punto de vista del aprendizaje amortizar los esfuerzos:
normalmente sobre un proyecto y su programa podremos pensar en
variantes que nos permitan la adquisición de nuevos conocimientos.
a) Modificación de los tiempos de encendido y apagado.
En el programa “Blink” vemos que el tiempo de encendido y apagado del
LED “L” queda determinado por el valor en milisegundos del parámetro
que le pasamos a la función “delay”. En nuestra primera versión le
pasamos 1000 ms o 1 s tanto para el apagado como para el encendido.
En realidad esto supone controlar el LED con una onda cuadrada
generada en el pin 13 de 0,5 Hz de frecuencia (periodo de 2 s y ciclo de
trabajo del 50 %).
Vamos a acelerar la intermitencia luminosa modificando la frecuencia a
2 Hz manteniendo el mismo ciclo de trabajo.
¿Qué valor le pasamos a “delay”?
1 11 1 1
𝑇= = −1 = 0,25 𝑠 = 250 𝑚𝑠
2 2𝑓 22 𝑠 145
b) Ráfaga de 5 pulsos de encendido de 250 ms cada 2 segundos.
Se trata de modificar el programa para provocar sobre el LED “L” una
ráfaga de 5 pulsos de encendido de duración de 0,25 s, separados por un
apagado también de 0,25 s, excepto entre el último pulso de la ráfaga y el
primero de la siguiente que será de 2 s de apagado. La onda cuadrada
que hay que generar en la línea digital 13 es la que muestra la figura:

𝟎, 𝟐𝟓 𝒔 𝟎, 𝟐𝟓 𝒔 𝟐𝒔
ON OFF OFF

Abre el IDE y desarrolla el programa. Verifícalo hasta que la compilación


termine sin errores (recuerda que esto no quiere decir que el programa
sea correcto y cumpla con las especificaciones). Cárgalo en la placa y
comprueba finalmente si el programa que has desarrollado es correcto.
Cuando estés desarrollando un programa en el IDE En la página siguiente tienes
ten papel, goma y lápiz al lado: Siempre nuestro una captura con una posible
bloc de notas tradicional al lado para nuestras solución: en programación no
anotaciones, cálculos, etc., en definitiva, para suele haber soluciones únicas,
dejar constancia de nuestros “pensamientos”: ¡Si unas serán mejores que otras
no se pasa a limpio, consérvese! ... Hazme caso. en algún sentido. 146
Hola Imagínate que una
aplicación exigiera
generar ráfagas de 50 o
100 pulsos espaciados
con diferentes
intervalos de tiempo.
Con lo que sabemos
hasta ahora de
programación
podríamos
solucionarlo, pero
sería una solución muy
ineficiente.
Más adelante
estudiaremos
estructuras de
programación que nos
permitirán gestionar
con más eficiencia
problemas
relacionados con
bloques repetitivos. 147
V. MEMORIA TÉCNICA
El alumno o alumna realizará una Memoria Técnica de Actividades donde
reflejará todas las actuaciones relacionadas con la ejecución del Proceso
Operativo asociado a esta Unidad Didáctica. En términos generales esta
memoria podrá recoger, entre otros, los siguientes elementos:
• Una primera sección que relacione las FINALIDADES pretendidas y una
segunda sección que recoja el listado de MATERIAL E INSTRUMENTACIÓN
necesario.
• Una tercera sección continuará con la descripción cualitativa y funcional
de las actuaciones solicitadas en cada punto del PROCESO OPERATIVO, así
como el análisis analítico que se derive del estudio de los circuitos y
sistemas electrónicos contemplados en el citado proceso.
• Los esquemas de circuitos y sistemas electrónicos de los que se haya
realizado su montaje y los oscilogramas y cronogramas de señales
asociados al funcionamiento de los mismos, así como las tablas de verdad
relacionadas con los elementos o bloques funcionales ensayados.
• Los programas desarrollados para las aplicaciones solicitadas, en su caso.
• Una cuarta sección de CONCLUSIONES derivadas del estudio de la Unidad.
A continuación se muestra un modelo-guion para la Memoria Técnica.
148
149
VI. CONCLUSIONES
Tanto en la estructura de la Unidad Didáctica elaborada por el docente como
en la Memoria Técnica realizada por el discente, se habrá observado que se
incluye una última sección de CONCLUSIONES. Esta sección suele
contemplarse en la mayor parte de los formatos de los procesos de
enseñanza y de aprendizaje, y la experiencia apunta a que también suele ser
una sección relegada al olvido, probablemente por la pereza que da
reflexionar después de haber concluido una temporada de estudio dedicada
a la Unidad. Y, efectivamente, el objetivo de esta sección es recoger la
reflexión del agente, docente o discente, después de haber “transitado” por
un proceso de enseñanza-aprendizaje, algo extraordinariamente importante
para asentar el conocimiento mediante la recapitulación de lo enseñado o
aprendido. Algo parecido, aunque con otras connotaciones, suele ocurrir
con la sección de FINALIDADES.
Una curiosidad. En los estudios de los textos legislativos suele decirse que es
mejor, antes de adentrarse en la lectura del cuerpo del articulado, leerse
primero el Preámbulo y las Disposiciones del final, pues esta secuencia crea
una imagen de conjunto inicial, aunque sea vaga, que facilita el seguimiento
del estudio en profundidad del cuerpo del texto. Esto mismo podría aplicarse
a la estrategia de estudio para las Unidades Didácticas: empezamos leyendo
las Finalidades y las Conclusiones y luego continuamos con los contenidos. 150
Se concluye después de todo lo visto y trabajado, que aunque se podría
haber entrado directamente en la instalación del software, conexión y
reconocimiento de la placa, y carga y ejecución del primer programa
(asépticamente esto puede hacerse en cinco o diez minutos, es decir, llegar al
momento de la realización eliminando la travesía), que no ha sido esa la
línea de aprendizaje seguida porque no se trata de aprender elementos
“sueltos” de trabajo sin ropaje y sin contexto: esto que puede ser útil para
una instrucción breve y circunscrita a unos objetivos muy limitados, no
resulta adecuado para la formación de un técnico formal que ha de
desarrollar mayores capacidades de base y alcance de transversalidad
dentro de su sector profesional.
Es por eso que se ha elaborado un recorrido de conocimientos técnicos,
circunscritos al ámbito de la programación de dispositivos electrónicos,
teniendo como referencia la plataforma de medios sobre la que se van a
realizar las prácticas o proyectos de electrónica programable: la Placa y
Software Arduino. Esto no quita, siendo el tiempo muy limitado, que
constantemente se tenga que estar pensando en alcanzar soluciones de
compromiso: entre el rigor formativo, la cantidad formativa y el tiempo
dedicado (aquí, la cantidad y el rigor no es compatible con el poco tiempo).
Como elemento de partida se ha establecido, de forma abstracta y
elemental, el concepto general de sistema electrónico.
151
Dado que el objetivo global de esta parte del curso es abordar el estudio de
los sistemas electrónicos programables, y siendo este ámbito muy amplio,
se ha acotado el objetivo circunscribiéndolo a la programación de sistemas
electrónicos que incorporen microcontroladores. Es por eso que se ha
introducido el concepto de microcontrolador como microcomputador
monopastilla o integrado, describiendo las partes funcionales principales
que internamente deberán incluir estos dispositivos.
Muchos son los recursos disponibles a la hora de buscar soluciones técnicas
en el ámbito de la electrónica programable. Entre ellos, como ya se ha
mencionado, se ha optado por una plataforma versátil que combina
hardware y software permitiendo el desarrollo de una gran variedad de
aplicaciones y proyectos, tantos como la imaginación plausible nos pueda
aportar. Elegida esta plataforma se ha hecho necesario introducir el estudio
de la misma reduciéndolo al modelo de la placa de hardware que se ha
empleado: la Arduino UNO Rev3.
No se ha realizado un estudio completo de todos los recursos de la Placa y
tampoco se han detallado todos los elementos electrónicos que recoge su
esquemático; pero si se ha realizado una descripción lo suficientemente
amplia de los aspectos más relevantes para así tener una visión general de
sus posibilidades antes de iniciar el desarrollo de proyectos de aplicación.
Algunos proyectos podrán requerir un estudio más profundo de la Placa.
152
A parte de mostrar la disposición de los componentes en la placa de circuito
impreso, uno de los elementos descritos con algo más de extensión ha sido
el microcontrolador que incorpora la placa: es obvio, pues es el elemento
principal sobre el que “gravita” el resto de componentes, es quien almacena
y ejecuta los programas. La documentación técnica del fabricante relativa a
un microcontrolador puede llegar a ser extraordinariamente amplia, esas
“hojas de datos” será conveniente tenerlas disponibles como guía de
referencia cuando resulte necesario. Lo que se ha hecho es describir parte
de la arquitectura interna del microcontrolador ATmega328P, la que en
principio será más relevante para el desarrollo de los primeros proyectos,
renunciando a introducir una teoría general sobre arquitectura de
computadores, así como de arquitectura interna de microprocesadores y
microcontroladores (esto último no tiene cabida en una asignatura de
Sistemas Digitales con el tiempo muy limitado).
También se han estudiado otras posibilidades de la Placa, como la necesidad
de establecer comunicaciones de datos con otros dispositivos o sistemas.
Por eso se han descrito algunos protocolos de comunicación serie sin entrar
en los detalles de las relaciones temporales de las señales que controlarán
dichos protocolos: cuando surjan aplicaciones relacionadas con estos
protocolos será preciso profundizar en su estudio, siendo mejor hacer esto
en el propio contexto de la exigencia que se derive de dichas aplicaciones.
153
Se ha descrito cómo se conecta la placa Arduino UNO al ordenador. Esto se
hace mediante una conexión USB: esta conexión permite la alimentación de
la placa (con limitaciones) y la transmisión de datos entre el ordenador y la
placa. Esto es importante, pues se ha visto que es esta conexión la que nos
permite volcar, de forma sencilla, el programa desarrollado en el IDE en la
memoria del microcontrolador para que esté listo para su ejecución. Una
vez grabado el programa en el microcontrolador de la placa, esta puede ser
alimentada mediante fuentes de alimentación externas para que la
aplicación electrónica final tenga su autonomía y se puedan garantizar las
necesidades de consumo.
El µC es el elemento principal que alberga el programa de control del
sistema y se encarga de su ejecución sincronizada. Pero el µC tiene que
interactuar con el mundo exterior para que lleve a cabo su cometido. Es por
eso que se ha estudiado sus posibilidades de conectividad con el mundo
exterior. Se ha viso que la placa Arduino UNO (a partir del µC que incorpora)
dispone de un conjunto de líneas de entrada y salida, digitales y analógicas,
que le permiten interactuar con el exterior. Este conjunto de líneas
conforma la conectividad: un determinado número de líneas para la
información digital (las líneas se configuran previamente como entradas o
salidas), otro para la información analógica de entrada (lo que lleva
asociado los canales de conversión A/D correspondientes) y otras líneas para
la información analógica de salida mediante emulación por PWM. 154
Se ha estudiado que el microcontrolador que incorpora la placa Arduino
UNO se puede programar mediante el IDE oficial o uno compatible, para lo
cual se empleará el gestor de arranque y este ocupará una parte pequeña
de la memoria flash de programa del µC, o directamente mediante un
programador ISP pudiendo de esta forma hacer uso para el programa de
aplicación de la parte ocupada por el gestor de arranque. Para facilitar esta
programación directa la placa incorpora un conector específico de seis
pines denominado ICSP (Programación Serie en Circuito).
Los sistemas digitales síncronos trabajan al ritmo que marca un oscilador
llamado reloj del sistema. En la configuración de estos osciladores hemos
visto que pueden intervenir elementos como los cristales de cuarzo o los
resonadores cerámicos que permiten estabilizar la frecuencia de oscilación
aportando una precisión determinada. En la placa Arduino UNO se tiene un
oscilador a cristal utilizado por un microcontrolador auxiliar encargado de la
comunicación serie USB entre la placa y el ordenador y otro oscilador con
resonador cerámico asociado al microcontrolador principal, el ATmega328P,
que establece la frecuencia de reloj para el sistema de aplicación que
determinemos. También se hizo observar que esta frecuencia se puede
modificar externamente.
Los sistemas digitales suelen disponer de un botón de reinicio o “reset” que
habitualmente surte el mismo efecto que al darle tensión al sistema.
155
Se ha visto que la placa Arduino UNO dispone de un botón o pulsador de
reset, de tal manera que cuando se pulsa se ejecuta el gestor de arranque
que tiene grabado por defecto y a continuación pasa a ejecutar el programa
de “usuario” que tenga grabado. Es claro que en aplicaciones “dedicadas”
del microcontrolador (no como en principio se concibe en la placa Arduino
UNO para practicar múltiples proyectos), si a dichas aplicaciones se les dota
de botón de reinicio, su activación provocaría la puesta en estado inicial de
cuantos dispositivos fuera necesario y el inicio de ejecución del programa de
aplicación que tenga que tomar el control del sistema (no se ejecutaría el
gestor de arranque porque no estaría).
La parte programable de los proyectos electrónicos que se van a realizar se
circunscribe a la programación particular del microcontrolador que exija
cada aplicación. Por lo tanto, el contexto de aprendizaje es el desarrollo de
habilidades para la programación de microcontroladores en aplicaciones
electrónicas cuyos circuitos también se montarán.
Aun siendo este el contexto principal de programación que ha sido y será
tratado, también se ha realizado un pequeño recorrido sobre otros
contextos de programación, que estando asociados a la formación de un
técnico electrónico, nos permitan situar mejor la programación de
microcontroladores dentro del amplio mundo de la programación de
sistemas o dispositivos en general.
156
Es por eso que se han estudiado diversos conceptos relativos a lenguajes de
alto nivel y lenguajes ensambladores, mostrando un “escenario” que
permita comprender y encajar la tarea de programación de aplicaciones
dirigida a microcontroladores.
También se ha considerado conveniente mostrar otros contextos de
programación propios de un profesional de la electrónica: la programación
de los llamados Dispositivos Lógicos Programables y lo que se conoce como
Microprogramación. Estos dos contextos abren otras dos vías de
especialización, no siendo este el objetivo (tampoco se dispone de tiempo),
si se han expuesto los elementos básicos de estos contextos de
programación, y se ha realizado algún ejemplo sencillo, para conformar una
idea más general de la programación de los sistemas digitales.
Después de presentar una imagen del panorama de la programación de
sistemas y dispositivos, se termina concretando el contexto de
programación donde nos hemos situado y en el que continuaremos:
desarrollar programas de aplicación para microcontroladores empleando un
Entorno de Desarrollo Integrado que nos proporciona el conjunto de
herramientas de software necesario: programando en un lenguaje de alto
nivel con funcionalidades de bajo nivel y adaptado al microcontrolador de la
placa electrónica que nos servirá de base para el desarrollo de nuestros
proyectos.
157
Dado que la plataforma electrónica elegida para el aprendizaje es la
correspondiente a la placa Arduino UNO en combinación con el Software
Arduino, se ha considerado conveniente introducir una visión panorámica de
los diferentes productos (placas base, módulos y placas supletorias)
disponibles para el desarrollo de proyectos de aplicaciones electrónicas.
Se ha visto que el Software de Arduino (el IDE) está disponible para
diferentes sistemas operativos. Se ha mostrado el proceso de descarga e
instalación de dicho software para el SO (Sistema Operativo) Windows.
Igualmente se han mostrado los contenidos (carpetas y ficheros) que por
defecto crea el proceso de instalación en el Explorador de Windows y lo que
ocurre cuando guardamos, con opciones por defecto, la edición de un
programa o “sketch” desde el citado IDE. Es necesario tener presente que lo
relacionado con lo anterior está en continuo desarrollo y que transcurrido
algún tiempo, a veces muy poco, el “escenario” puede haber cambiado,
cuando no desaparecido: en este tipo de escenarios siempre hay presente
cierta imponderabilidad.
Una vez instalado el IDE en el ordenador, el paso siguiente ha sido conectar
la placa Arduino UNO al mismo mediante el cable USB al efecto y
asegurarnos de que la placa es reconocida (que está conectada al puerto
COM adecuado). Realizado esto, se ha probado la carga y ejecución de un
programa de ejemplo para comprobar que todo funciona correctamente.
158
Para iniciar el aprendizaje de la programación de microcontroladores se ha
partido de un programa de ejemplo que incorpora el IDE de Arduino:
gestionar la intermitencia (Blink) de un diodo LED que incorpora la propia
placa. Utilizando el código de este programa se ha iniciado la descripción de
los elementos de programación que han sido necesarios para su
comprensión. Y se ha visto que esta es la estrategia que se va a seguir:
según se vayan desarrollando programas de aplicación se irán explicando los
elementos de programación necesarios para su correcta interpretación, de
esta manera, progresivamente se irá completando lo que podría ser un
curso de programación de microcontroladores, eso sí, centrado en la
plataforma Arduino para el microcontrolador ATmega328P, lo que no impide
extraer las generalizaciones y extrapolaciones pertinentes.
Una vez estudiado y probado el programa de ejemplo, en el proceso
operativo se han propuesto variantes o modificaciones del programa para
conseguir otros objetivos. Esto es muy habitual, y será de una gran utilidad
prestar atención a los programas que se desarrollen, porque poco a poco
nos daremos cuenta que según vayamos desarrollando programas iremos
acumulando no solo experiencia en sí, sino que iremos disponiendo de una
batería de recursos que muchas veces podremos reutilizar en nuevos
programas realizando las modificaciones oportunas, e incluso a veces
determinados trozos de código usarlos tal cual (cortar y pegar).
159
Bien, esta sección de CONCLUSIONES recoge la reflexión del docente, ahora
es el turno del discente, y en la sección de CONCLUSIONES de la Memoria
Técnica de Actividades deberá recoger su propia reflexión redactada con sus
propias palabras.
Es conveniente que el alumnado incluya en esta sección de la Memoria
Técnica los resúmenes y esquemas que considere pertinentes en base a su
experiencia de aprendizaje, y es muy recomendable hacerlo nada más
terminar el estudio de la unidad, y no dejar pasar demasiado tiempo, pues
provocaría una pérdida de “frescura” y entonces lo reflejado en esta sección
ya no tendría el mismo valor.

160

S-ar putea să vă placă și