Documente Academic
Documente Profesional
Documente Cultură
UNIDAD 01
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.
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
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
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.
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.
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:
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.
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:
95
3. Entorno de desarrollo de aplicaciones
electrónicas con Arduino
También existe otra gama de productos con funcionalidades más avanzadas:
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).
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.
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).
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
“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.
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.
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
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
160