Vous êtes sur la page 1sur 94

ALEXIS ESTEBAN RODRIGUEZ SANDOVAL

E15021097
26/07/2018
ING. JULIO ÁVILA HERNÁNDEZ
AULA T006
7F5B
MICRCONTROLADORES
ING. MECATRÓNICA
REPORTE DEL
CURSO DE
VERANO 2018
Índice
Introducción………………………………………………………………………………2
Introducción a los microcontroladores………………………………………………...3
Unidad 1: Arquitectura interna y externa del microcontrolador……………………..4
 Definición de microcontroladores………………………………………………4
 Arquitectura interna del microcontrolador……………………………………..6
 Arquitectura externa del microcontrolador……………………………………10
Unidad 2: El modelo de programación del microcontrolador en lenguaje
ensamblador……………………………………………………………………………..12
 Programación en el lenguaje ensamblador…………………………………..12
 Comandos más conocidos en el lenguaje ensamblador……………………15
Unidad 3: El modelo de programación del microcontrolador en lenguaje C……...18
 Programación en el lenguaje C………………………………………………..18
 Comandos más conocidos en el lenguaje C…………………………………19
Unidad 4: Interfaces de comunicación………………………………………………..21
 Comunicación serial síncrona y asíncrona…………………………………..21
 Comunicación I2C………………………………………………………………23
 Comunicación USB……………………………………………………………..30
Unidad 5: Desarrollo de aplicaciones con microcontroladores……………………..34
Contenido adicional: Libreta de apuntes……………………………………………...72
Conclusión………………………………………………………………………………..91
Anexos…………………………………………………………………………………….92

1
Introducción
La materia de microcontroladores no es una materia fácil ya que se debe tener
previos conocimientos sobre electrónica, ya que es fundamental saber que es un
microcontrolador o tener una idea de que es. A lo largo del curso pude observar
que el uso de microcontroladores facilita los procesos industriales o procesos
fáciles como el crear un soldadito de plomo. El microcontrolador es un circuito muy
útil en la vida cotidiana, gracias a ellos el avance de la electrónica no hubiese sido
posible y seguiríamos teniendo problemas al administrar un proceso muy sencillo
sin la supervisión del hombre o que sin el hombre intervenga.
A continuación, se estudiará más a profundo el uso de los microcontroladores en
este pequeño reporte del curso de verano 2018.

2
Introducción a los microcontroladores
Un microcontrolador es un circuito integrado de alta escala de integración que
incorpora la mayor parte de los elementos que configuran un controlador. Un
microcontrolador dispone normalmente de los siguientes componentes:
 Procesador o UCP (Unidad Central de Proceso).
 Memoria RAM para Contener los datos.
 Memoria para el programa tipo ROM/PROM/EPROM.
 Líneas de E/S para comunicarse con el exterior.
 Diversos módulos para el control de periféricos (temporizadores, Puertas
Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores
Digital/Analógico, etc.).
 Generador de impulsos de reloj que sincronizan el funcionamiento de todo
el sistema.
Los productos que para su regulación incorporan un microcontrolador disponen de
las siguientes ventajas:
 Aumento de prestaciones: un mayor control sobre un determinado elemento
representa una mejora considerable en el mismo.
 Aumento de la fiabilidad: al reemplazar el microcontrolador por un elevado
número de elementos disminuye el riesgo de averías y se precisan menos
ajustes.
 Reducción del tamaño en el producto acabado: La integración del
microcontrolador en un chip disminuye el volumen, la mano de obra y los
stocks.
 Mayor flexibilidad: las características de control están programadas por lo
que su modificación sólo necesita cambios en el programa de instrucciones.
El microcontrolador es en definitiva un circuito integrado que incluye todos los
componentes de un computador. Debido a su reducido tamaño es posible montar
el controlador en el propio dispositivo al que gobierna. En este caso el controlador
recibe el nombre de controlador empotrado (embedded controller).

3
Unidad 1: Arquitectura interna y
externa del microcontrolador
 Definición de microcontroladores
Un microcontrolador es un circuito electrónico que cuenta con la arquitectura
básica para el procesamiento de datos en forma digital, cuenta con una unidad
aritmética lógica que desarrolla funciones lógicas como AND, OR, XOR y
funciones aritméticas como suma, resta, multiplicación y división, también cuenta
con una unidad central de proceso “CPU” (Central Procesing Unit), esta unidad se
encarga de controlar las acciones internas y externas del microprocesador,
también cuenta con una unidad de memoria dividida en 3 partes principales:
MEMORIA DEL PROGRAMA; en donde los datos son programados
eléctricamente y no se borran.
MEMORIA DE DATOS; en los que son
programados durante el curso del programa y
depende de las operaciones que se realicen,
esta memoria es volátil, esto quiere decir, que
al desenergizar el microcontrolador los datos se
pierden.
MEMORIA “EEPROM”; otra memoria especial
denominada “EEPROM” se utiliza para que el
usuario pueda almacenar datos como son
tablas o estados permanentes de algún proceso como son los llamados “SET
POINT”, que deben de permanecer aunque la energía del sistema sea retirado del
microcontrolador. Un “mc” también cuenta con dispositivos de entrada y salida,
que pueden ser de entrada y salida digital, entrada analógica y en algunos
microcontroladores entrada analógica y salida analógica. Estos dispositivos de
entrada y salida le permiten al “mc” comunicarse con el usuario, ya sea este una
persona como una máquina o un proceso.
Como vimos anteriormente un “mc” es un circuito integrado pero para poder
utilizarlo se requieren varias cosas que mencionaremos a continuación:
A) FUENTE DE ALIMENTACIÓN; como sabemos los circuitos digitales requieren
de una fuente de alimentación para poder ser utilizados el estándar básico para la
mayoría de los “mc” son 5v y otras nuevas versiones utilizan 3.3v.
B) COMUNICACIÓN CON EL USUARIO; la comunicación con el usuario también
es importante ya que le permite al usuario grabar un programa en el “mc”, el
puerto USB, existe otro puerto que se llama programación en directo ICSP.

4
C) CIRCUITO IMPRESO; debido a que la mayoría de los
“mc” y circuitos de entrada y salida tienen que ser
interconectados, es necesario una tarjeta de circuito
impreso que realice la interconexión entre los circuitos
integrados.
D) PROGRAMA DE CONTROL; el programa de control
es un programa que es grabado en el “mc” en su
memoria de programa, este programa permite la
comunicación por medio del dispositivo entrada-salida
USB con la computadora a este programa se le ha denominado BOOT STRAP. La
computadora tendrá que tener un programa que se comunique con el programa
BOOT STRAP del “mc” para realizar la programación y el intercambio de datos
entre el “mc” y la PC.

5
 Arquitectura interna del microcontrolador
El procesador o CPU:
Es el elemento más importante del microcontrolador y determina sus principales
características, tanto a nivel hardware como software.
Se encarga de direccionar la memoria de instrucciones, recibir el código OP de la
instrucción en curso, su decodificación y la ejecución de la operación que implica
la instrucción, así como la búsqueda de los operandos y el almacenamiento del
resultado.
Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los
procesadores actuales.
 CISC: Un gran número de procesadores usados en los microcontroladores
están basados en la filosofía CISC (Computadores de Juego de
Instrucciones Complejo). Disponen de más de 80 instrucciones máquina en
su repertorio, algunas de las cuales son muy sofisticadas y potentes,
requiriendo muchos ciclos para su ejecución. Una ventaja de los
procesadores CISC es que ofrecen al programador instrucciones complejas
que actúan como macros.

 Instrucciones especializadas
 Se requieren un set de instrucciones amplio para dar soporte a una
arquitectura.
 Programas requieren menos código fuente.

 RISC: Tanto la industria de los computadores comerciales como la de los


microcontroladores están decantándose hacia la filosofía RISC

6
(Computadores de Juego de Instrucciones Reducido). En estos
procesadores el repertorio de instrucciones máquina es muy reducido y las
instrucciones son simples y, generalmente, se ejecutan en un ciclo. La
sencillez y rapidez de las instrucciones permiten optimizar el hardware y el
software del procesador. RISC (Reduced Instruction Set Computer):
 Set de instrucciones reducido
 Instrucciones de carácter general
 Duración homogénea de la ejecución de las instrucciones.
 Se requiere más código para describir una operación que con una
arquitectura CISC.

 SISC: En los microcontroladores destinados a aplicaciones muy concretas,


el juego de instrucciones, además de ser reducido, es "específico", o sea,
las instrucciones se adaptan a las necesidades de la aplicación prevista.
Esta filosofía se ha bautizado con el nombre de SISC (Computadores de
Juego de Instrucciones Específico).
Memoria:
En los microcontroladores la memoria de instrucciones y datos está integrada en
el propio circuito integrado. Una parte debe ser no volátil, tipo ROM, y se destina a
contener el programa de instrucciones que gobierna la aplicación. Otra parte de
memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos.
Hay dos peculiaridades que diferencian a los microcontroladores de los PC's:
1. No existen sistemas de almacenamiento masivo como disco duro o disquetes.
2. Como el microcontrolador sólo se destina a una tarea en la memoria de
programa, sólo hay que almacenar un único programa de trabajo.
La memoria de datos (RAM) en estos dispositivos es de poca capacidad pues sólo
debe contener las variables y los cambios de información que se produzcan en el
transcurso del programa. Por otra parte, como sólo existe un programa activo, no
se requiere guardar una copia del mismo en la RAM pues se ejecuta directamente
desde la memoria de programa (ROM).
El usuario de PC está habituados a manejar Megabytes de memoria, pero los
diseñadores con microcontroladores trabajan con capacidades de memoria de
programa de 512 bytes, 1K, 2K (hasta unos 64K) y de RAM de 20 bytes, 68 bytes,
512 bytes (hasta unos 4K).
Según el tipo de memoria de programa que dispongan los microcontroladores,
la aplicación y utilización de los mismos es diferente. Se describen las cinco
versiones de memoria no volátil que se pueden encontrar en los
microcontroladores del mercado:

7
1º. ROM con máscara
Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la
fabricación del chip.
Máscara viene de la forma cómo se fabrican los circuitos integrados. Estos se
fabrican en obleas que contienen varias decenas de chips. Estas obleas se
obtienen a partir de procesos fotoquímicos, donde se impregnan capas de silicio y
oxido de silicio, y según convenga, se erosionan al exponerlos a la luz. Como no
todos los puntos han de ser erosionados, se sitúa entre la luz y la oblea una
máscara con agujeros, de manera que donde deba incidir la luz, esta pasará. Con
varios procesos similares pero más complicados se consigue fabricar los
transistores y diodos que componen un circuito integrado.
El elevado coste del diseño de la máscara sólo hace aconsejable el empleo de
los microcontroladores con este tipo de memoria cuando se precisan cantidades
superiores a varios miles de unidades.

2ª. OTP
El microcontrolador contiene una memoria no volátil de sólo lectura "programable
una sola vez" por el usuario. OTP (One Time Programmable). Es el usuario quien
puede escribir el programa en el chip mediante un sencillo grabador controlado por
un programa desde un PC. La versión OTP es recomendable cuando es muy corto
el ciclo de diseño del producto, o bien, en la construcción de prototipos y series
muy pequeñas.
Tanto en este tipo de memoria como en la EPROM, se suele usar la
encriptación mediante fusibles para proteger el código contenido.

3ª EPROM
Los microcontroladores que disponen de memoria EPROM (Erasable
Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La
grabación se realiza, como en el caso de los OTP, con un grabador gobernado
desde un PC. Si, posteriormente, se desea borrar el contenido, disponen de una
ventana de cristal en su superficie por la que se somete a la EPROM a rayos
ultravioleta durante varios minutos. Las cápsulas son de material cerámico y son
más caros que los microcontroladores con memoria OTP que están hechos con
material plástico. Hoy día se utilizan poco, siendo sustituidas por memorias
EEPROM o Flash.

8
4ª EEPROM
Se trata de memorias de sólo lectura, programables y borrables eléctricamente
EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la
programación como el borrado, se realizan eléctricamente desde el propio
grabador y bajo el control programado de un PC. Es muy cómoda y rápida la
operación de grabado y la de borrado. No disponen de ventana de cristal en la
superficie.
Los microcontroladores dotados de memoria EEPROM una vez instalados en el
circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de
dicho circuito. Para ello se usan "grabadores en circuito" que confieren una gran
flexibilidad y rapidez a la hora de realizar modificaciones en el programa de
trabajo.
El número de veces que puede grabarse y borrarse una memoria EEPROM es
finito, por lo que no es recomendable una reprogramación continua. Hoy día están
siendo sustituidas por memorias de tipo Flash.
Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona
de memoria EEPROM en los circuitos programables para guardar y modificar
cómodamente una serie de parámetros que adecuan el dispositivo a las
condiciones del entorno.
5ª FLASH
Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y
borrar. Funciona como una ROM y una RAM pero consume menos y es más
pequeña.
A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es
más rápida y de mayor densidad que la EEPROM.
La alternativa FLASH está recomendada frente a la EEPROM cuando se
precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera
más ciclos de escritura/borrado. Son idóneas para la enseñanza y la Ingeniería de
diseño.
Las memorias EEPROM y FLASH son muy útiles al permitir que los
microcontroladores que las incorporan puedan ser reprogramados "en circuito", es
decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con
este tipo de memoria incorporado al control del motor de un automóvil permite que
pueda modificarse el programa durante la rutina de mantenimiento periódico,
compensando los desgastes y otros factores tales como la compresión, la
instalación de nuevas piezas, etc. La reprogramación del microcontrolador puede
convertirse en una labor rutinaria dentro de la puesta a punto.

9
 Arquitectura externa del microcontrolador
Von Neumann
La arquitectura de von Neumann se caracteriza por disponer de una sola memoria
principal donde se almacenan datos e instrucciones de forma indistinta. A dicha
memoria se accede a través de un sistema de buses único (direcciones, datos y
control) mientras que la arquitectura Harvard dispone de dos memorias
independientes, una que contiene sólo instrucciones y otra sólo datos. Ambas
disponen de sus respectivos sistemas de buses de acceso y es posible realizar
operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias.
 Ejecución secuencial de las instrucciones
 Existe solo una unidad de búsqueda y una unidad de ejecución.
 La instrucción siguiente se busca hasta que se ejecute la instrucción actual.
Segmentada
Esta arquitectura es similar al uso de una cadena de montaje en una fábrica de
manufacturación. Una cadena de montaje saca partida del hecho de que el
producto pasa atreves de varias etapas de producción. Extendiendo el proceso de
producción de una cadena de montaje se puede trabajar sobre los productos en
varias etapas como segmentación porque como en una tubería o cause en un
extremo nuevo entradas se aceptan antes de que algunas entradas aceptadas con
anterioridad aparezcan como salidas en el otro extremo.
Divide la búsqueda de las instrucciones de manera cuando se ejecute la
instrucción actual ya se está ejecutando la siguiente.
Multiplica la velocidad de ejecución al doble que la Von Newman.

Los microcontroladores PIC responden a la arquitectura Harvard.


 Se conoce como arquitectura de ejecución paralela.
 Divide los procesos
 Bus de direcciones y de datos separados en la arquitectura.

10
Podemos encontrar elementos comunes en los microcontroladores:
 ADC (convertidor Analogico Digital)
 USART
 RTC es un reloj de ordenador.
 Puertos entrada/salida paralelos
 PWM
 USB

11
Unidad 2: El modelo de programación
del microcontrolador en lenguaje
ensamblador
 Programación en el lenguaje ensamblador
El lenguaje ensamblador, o assembler (en inglés assembly language y la
abreviación asm), es un lenguaje de programación de bajo nivel. Consiste en un
conjunto de mnemónicos que representan instrucciones básicas para los
computadores, microprocesadores, microcontroladores y otros circuitos integrados
programables. Implementa una representación simbólica de los códigos de
máquina binarios y otras constantes necesarias para programar una arquitectura
de procesador y constituye la representación más directa del código máquina
específico para cada arquitectura legible por un programador. Cada arquitectura
de procesador tiene su propio lenguaje ensamblador que usualmente es definida
por el fabricante de hardware, y está basada en los mnemónicos que simbolizan
los pasos de procesamiento (las instrucciones), los registros del procesador, las
posiciones de memoria y otras características del lenguaje. Un lenguaje
ensamblador es por lo tanto específico de cierta arquitectura de computador física
(o virtual). Esto está en contraste con la mayoría de los lenguajes de programación
de alto nivel, que idealmente son portables. Un programa utilitario llamado
ensamblador es usado para traducir sentencias del lenguaje ensamblador al
código de máquina del computador objetivo. El ensamblador realiza una
traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias
mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con
los lenguajes de alto nivel, en los cuales una sola declaración generalmente da
lugar a muchas instrucciones de máquina. Muchos sofisticados ensambladores
ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar
el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría
de los ensambladores modernos incluyen una facilidad de macro (descrita más
abajo), y se llaman macroensambladores. Fue usado principalmente en los inicios
del desarrollo de software, cuando aún no se contaba con potentes lenguajes de
alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en
ambientes académicos y de investigación, especialmente cuando se requiere la
manipulación directa de hardware, alto rendimiento, o un uso de recursos
controlado y reducido. También es utilizado en el desarrollo de controladores de
dispositivo (en inglés, device drivers) y en el desarrollo de sistemas operativos,
debido a la necesidad del acceso directo a las instrucciones de la máquina.
Muchos dispositivos programables (como los microcontroladores) aún cuentan con
el ensamblador como la única manera de ser manipulados.

12
Características
 El código escrito en lenguaje ensamblador posee una cierta dificultad de ser
entendido ya que su estructura se acerca al lenguaje máquina, es decir, es
un lenguaje de bajo nivel.

 El lenguaje ensamblador es difícilmente portable, es decir, un código escrito


para un microprocesador, puede necesitar ser modificado, para poder ser
usado en otra máquina distinta. Al cambiar a una máquina con arquitectura
diferente, generalmente es necesario reescribirlo completamente.

 Los programas hechos por un programador experto en lenguaje


ensamblador son generalmente mucho más rápidos y consumen menos
recursos del sistema (memoria RAM y ROM) que el programa equivalente
compilado desde un lenguaje de alto nivel. Al programar cuidadosamente
en lenguaje ensamblador se pueden crear programas que se ejecutan más
rápidamente y ocupan menos espacio que con lenguajes de alto nivel.

 Con el lenguaje ensamblador se tiene un control muy preciso de las tareas


realizadas por un microprocesador por lo que se pueden crear segmentos
de código difíciles y/o muy ineficientes de programar en un lenguaje de alto
nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de
instrucciones del CPU que generalmente no están disponibles en los
lenguajes de alto nivel.

 También se puede controlar el tiempo en que tarda una rutina en


ejecutarse, e impedir que se interrumpa durante su ejecución.

Programa ensamblador
Generalmente, un programa ensamblador (assembler en inglés) moderno crea
código objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en
opcodes, y resolviendo los nombres simbólicos para las localizaciones de memoria
y otras entidades.1 El uso de referencias simbólicas es una característica clave del
lenguaje ensamblador, evitando tediosos cálculos y actualizaciones manuales de
las direcciones después de cada modificación del programa. La mayoría de los
ensambladores también incluyen facilidades de macros para realizar sustitución
textual - ej. generar cortas secuencias de instrucciones como expansión en línea
en vez de llamar a subrutinas. Los ensambladores son generalmente más simples
de escribir que los compiladores para los lenguajes de alto nivel, y han estado
disponibles desde los años 1950. Los ensambladores modernos, especialmente
para las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-
RISC, así como también para el x86 (-64), optimizan la planificación de

13
instrucciones para explotar la segmentación del CPU eficientemente. En los
compiladores para lenguajes de alto nivel, son el último paso antes de generar el
código ejecutable. Número de paso Hay dos tipos de ensambladores basados en
cuántos pasos a través de la fuente son necesarios para producir el programa
ejecutable. Los ensambladores de un solo paso pasan a través del código fuente
una vez y asumen que todos los símbolos serán definidos antes de cualquier
instrucción que los refiera. Los ensambladores de dos pasos crean una tabla con
todos los símbolos y sus valores en el primer paso, después usan la tabla en un
segundo paso para generar código. El ensamblador debe por lo menos poder
determinar la longitud de cada instrucción en el primer paso para que puedan ser
calculadas las direcciones de los símbolos.
La ventaja de un ensamblador de un solo paso es la velocidad, que no es tan
importante como lo fue en un momento dados los avances en velocidad y
capacidades del computador. La ventaja del ensamblador de dos pasos es que los
símbolos pueden ser definidos dondequiera en el código fuente del programa.
Esto permite a los programas ser definidos de maneras más lógicas y más
significativas, haciendo los programas de ensamblador de dos pasos más fáciles
de leer y mantener.

14
 Comandos más conocidos en el lenguaje
ensamblador
Lenguaje
El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en
lenguaje de máquina de la CPU, y pueden ser muy diferentes de una arquitectura
de CPU a otra. Cada arquitectura de microprocesador tiene su propio lenguaje de
máquina, y en consecuencia su propio lenguaje ensamblador ya que este se
encuentra muy ligado a la estructura del hardware para el cual se programa. Los
microprocesadores difieren en el tipo y número de operaciones que soportan;
también pueden tener diferente cantidad de registros, y distinta representación de
los tipos de datos en memoria. Aunque la mayoría de los microprocesadores son
capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen
difiere y los respectivos lenguajes ensamblador reflejan tal diferencia.

Instrucciones de CPU
a mayoría de las CPU tienen más o menos los mismos grupos de instrucciones,
aunque no necesariamente tienen todas las instrucciones de cada grupo. Las
operaciones que se pueden realizar varían de una CPU a otra. Una CPU particular
puede tener instrucciones que no tenga otro y viceversa. Los primeros
microprocesadores de 8 bits no tenían operaciones para multiplicar o dividir
números, por ejemplo, y había que hacer subrutinas para realizar esas
operaciones. Otras CPU puede que no tengan operaciones de punto flotante y
habría que hacer o conseguir bibliotecas que realicen esas operaciones. Las
instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de
la CPU, en los sistemas muy viejos también de 12, 18, 24, 36 y 48 bits).
Estas son operaciones realizadas por la Unidad aritmético lógica de la CPU

 Operaciones aritméticas. Como suma, resta, multiplicación, división,


módulo, cambio de signo
 Operaciones booleanas. Operaciones lógicas bit a bit como AND, OR,
XOR, NOT
 Operaciones de bits. Como desplazamiento o shift lógico y rotaciones u
Operadores a nivel de bits (hacia la derecha o hacia la izquierda, a través
del bit del acarreo o sin él)
 Comparaciones

15
Operaciones de mover datos:
Entre los registros y la memoria:
Aunque la instrucción se llama "mover", en la CPU, "mover datos" significa en
realidad copiar datos, desde un origen a un destino, sin que el dato desaparezca
del origen.
 Se pueden mover valores:
 Desde un registro a otro
 Desde un registro a un lugar de la memoria
 Desde un lugar de la memoria a un registro
 Desde un lugar a otro de la memoria
 Un valor inmediato a un registro
 Un valor inmediato a un lugar de memoria
Operaciones de pila (stack, en inglés):
 PUSH (escribe datos hacia el tope de la pila)
 POP (lee datos desde el tope de la pila)
Operaciones de entrada/salida:
Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de
la memoria, desde y hacia un puerto
 INPUT Lectura desde un puerto de entrada
 OUTPUT Escritura hacia un puerto de salida
Operaciones para el control del flujo del programa:
 Llamadas y retornos de subrutinas
 Llamadas y retornos de interrupciones
 Saltos condicionales de acuerdo al resultado de la comparaciones
 Saltos incondicionales
Operaciones con números reales:
El estándar para las operaciones con números reales en las CPU está definido por
el IEEE 754. Una CPU puede tener operaciones de punto flotante con números
reales mediante el coprocesador numérico (si lo hay), como las siguientes:

 Operaciones aritméticas. Suma, resta, multiplicación, división, cambio de


signo, valor absoluto, parte entera
 Operaciones trascendentales
 Operaciones trigonométricas. Seno, coseno, tangente, arcotangente
 Operaciones con logaritmos, potencias y raíces

16
 Otras
El lenguaje ensamblador tiene mnemónicos para cada una de las instrucciones de
la CPU en adición a otros mnemónicos a ser procesados por el programa
ensamblador (como por ejemplo macros y otras sentencias en tiempo de
ensamblado).
Las instrucciones del ensamblador
Instrucciones de transferencia Son utilizadas para mover los contenidos de los
operandos. Cada instrucción se puede usar con diferentes modos de
direccionamiento.
 MOV
 MOVS (MOVSB) (MOVSW)
Instrucciones de carga Son instrucciones específicas de los registros. Son usadas
para cargar en algoritmo registro bytes o cadenas de bytes.
 LODS (LODSB) (LODSW)
 LAHF
 LDS
 LEA
 LES
Instrucciones de la pila Estas instrucciones permiten el uso de la pila para
almacenar y extraer datos.
 POP
 POPF
 PUSH
 PUSHF

17
Unidad 3: El modelo
de programación del
microcontrolador en
lenguaje C
 Programación en el lenguaje C
C es un lenguaje de programación originalmente desarrollado por Dennis Ritchie
entre 1969 y 1972 en los Laboratorios Bell,2 como evolución del anterior lenguaje
B, a su vez basado en BCPL. Al igual que B, es un lenguaje orientado a la
implementación de Sistemas operativos, concretamente Unix. C es apreciado por
la eficiencia del código que produce y es el lenguaje de programación más popular
para crear software de sistemas, aunque también se utiliza para crear
aplicaciones. Se trata de un lenguaje de tipos de datos estáticos, débilmente
tipificado, de medio nivel, ya que dispone de las estructuras típicas de los
lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que
permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones
al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder
directamente a memoria o dispositivos periféricos. La primera estandarización del
lenguaje C fue en ANSI, con el estándar X3.159-1989. El lenguaje que define este
estándar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue
ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de este estándar
es muy amplia por lo que, si los programas creados lo siguen, el código es
portable entre plataformas y/o arquitecturas.
Características
Propiedades
 Núcleo del lenguaje simple, con funcionalidades añadidas importantes,
como funciones matemáticas y de manejo de archivos, proporcionadas por
bibliotecas.
 Es un lenguaje muy flexible que permite programar con múltiples estilos.
Uno de los más empleados es el estructurado "no llevado al extremo"
(permitiendo ciertas licencias de ruptura).
 Un sistema de tipos que impide operaciones sin sentido.
 Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como
definir macros e incluir múltiples archivos de código fuente.
 Acceso a memoria de bajo nivel mediante el uso de punteros.
 Interrupciones al procesador con uniones.

18
 Un conjunto reducido de palabras clave.
 Por defecto, el paso de parámetros a una función se realiza por valor. El
paso por referencia se consigue pasando explícitamente a las funciones las
direcciones de memoria de dichos parámetros.
 Punteros a funciones y variables estáticas, que permiten una forma
rudimentaria de encapsulado y polimorfismo.
 Tipos de datos agregados (struct) que permiten que datos relacionados
(como un empleado, que tiene un id, un nombre y un salario) se combinen y
se manipulen como un todo (en una única variable "empleado").
Carencias
 Recolección de basura nativa, sin embargo se encuentran a tal efecto
bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el
Recolector de basura de Boehm.
 Soporte para programación orientada a objetos, aunque la implementación
original de C++ fue un preprocesador que traducía código fuente de C++ a
C. Véase también la librería GObject.
 Funciones anidadas, aunque GCC tiene esta característica como extensión.
 Soporte nativo para programación multihilo. Disponible usando librerías
como libpthread.
Aunque la lista de las características útiles de las que carece C es larga, este
factor ha sido importante para su aceptación, porque escribir rápidamente nuevos
compiladores para nuevas plataformas, mantiene lo que realmente hace el
programa bajo el control directo del programador, y permite implementar la
solución más natural para cada plataforma. Ésta es la causa de que a menudo C
sea más eficiente que otros lenguajes. Típicamente, sólo la programación
cuidadosa en lenguaje ensamblador produce un código más rápido, pues da
control total sobre la máquina, aunque los avances en los compiladores de C y la
complejidad creciente de los microprocesadores modernos han reducido
gradualmente esta diferencia.En algunos casos, una característica inexistente
puede aproximarse. Por ejemplo, la implementación original de C++ consistía en
un preprocesador que traducía código fuente C++ a C. La mayoría de las
funciones orientadas a objetos incluyen un puntero especial, que normalmente
recibe el nombre "this", que se refiere al objeto al que pertenece la función.
Mediante el paso de este puntero como un argumento de función, esta
funcionalidad puede desempeñarse en C. Por ejemplo, en C++ se puede escribir:
stack.push(val);
Mientras que en C se podría escribir:
push(stack, val);

19
Donde el argumento stack es un puntero a una struct equivalente al puntero this
de C++, que es un puntero a un objeto.

20
Unidad 4: Interfaces de comunicación
 Comunicación serial síncrona y asíncrona
La comunicación sincrónica es el intercambio de información por Internet en
tiempo real. Es un concepto que se enmarca en la comunicación mediada por
computadora, que es aquel tipo de comunicación que se da entre personas y que
está mediatizada por ordenadores. La otra gran categoría de la CMC es la
comunicación asincrónica, cuyo ejemplo más claro sería el correo electrónico. La
comunicación asincrónica es la que permite la comunicación por internet entre
personas de forma no simultánea. En lo que respecta a comunicación sincrónica,
el máximo exponente es el chat. Su creación data de 1988, aunque el éxito masivo
no se empezó a dar y a popularizar hasta principios del siglo XXI. Los
participantes en este tipo de comunicación realizan una serie de características
más propias de la charla oral, pero usando los ordenadores y el texto escrito para
crear una ilusión de conversación. Hay dos obstáculos para solventar esta
informalización del discurso: La primera sería la ausencia de rasgos para
lingüísticos: se han tenido que recrear mediante símbolos, emoticones emoticonos
o repetición de palabras los rasgos comunicativos de la conversación cara a cara.
Por ejemplo, para indicar que estamos gritando escribimos en mayúscula (¡QUE
NO!) o para enfatizar aquello que decimos repetimos letras “hooolaaaaaaa”. El
otro obstáculo es el espacio. Si queremos emular la sensación de conversación
hemos de dominar el espacio por dos razones. La primera es la propia limitación
física de muchos chats. La otra es que una conversación requiere de
participaciones más o menos paritarias, para no parecerse en demasía a un
monólogo.

La comunicación asincrónica es aquella comunicación que se establece entre


personas de manera diferida en el tiempo, es decir, cuando no existe coincidencia
temporal. Un ejemplo de comunicación asincrónica es la carta de papel;
actualmente este tipo de comunicación se desarrolla a través de ordenadores o
computadores.
Elementos de la comunicación asincrónica
En la comunicación asincrónica observamos que algunos de elementos típicos de
la comunicación presentan unas características específicas y diferenciadas:
 Emisor: El emisor envía la información sabiendo que no obtendrá una
respuesta inmediata.

21
 Receptor: Este será consciente de la llegada del mensaje solo cuando
acceda al canal específico.
 Canal: Es el medio físico acordado por ambas partes por el que se
transmite el mensaje, debe ser perdurable en el tiempo ya que el mensaje
se almacenará allí durante un tiempo indefinido.
 Código: Debe ser perdurable en el tiempo, además deberá ser compartido
entre los elementos del evento comunicativo; deberá contar con un soporte
físico para su almacenamiento.
 Situación o contexto: La disponibilidad del emisor o receptor es incierta y
marca de forma importante el contexto de la comunicación.

22
 Comunicación I2C
El bus I2C, un estándar que facilita la comunicación entre microcontroladores,
memorias y otros dispositivos con cierto nivel de "inteligencia", sólo requiere de
dos líneas de señal y un común o masa. Fue diseñado a este efecto por Philips y
permite el intercambio de información entre muchos dispositivos a una velocidad
aceptable, de unos 100 Kbits por segundo, aunque hay casos especiales en los
que el reloj llega hasta los 3,4 MHz. La metodología de comunicación de datos del
bus I2C es en serie y sincrónica. Una de las señales del bus marca el tiempo
(pulsos de reloj) y la otra se utiliza para intercambiar datos.
Descripción de las señales
 SCL (System Clock) es la línea de los pulsos de reloj que sincronizan el
sistema.
 SDA (System Data) es la línea por la que se mueven los datos entre los
dispositivos.
 GND (Masa) común de la interconección entre todos los dispositivos
"enganchados" al bus.
Las líneas SDA y SCL son del tipo drenaje abierto, es decir, un estado similar al
de colector abierto, pero asociadas a un transistor de efecto de campo (o FET). Se
deben polarizar en estado alto (conectando a la alimentación por medio de
resistores "pull-up") lo que define una estructura de bus que permite conectar en
paralelo múltiples entradas y salidas.

El diagrama es suficientemente autoexplicativo. Las dos líneas del bus están en


un nivel lógico alto cuando están inactivas. En principio, el número de dispositivos
que se puede conectar al bus no tiene límites, aunque hay que observar que la
capacidad máxima sumada de todos los dispositivos no supere los 400 pF. El
valor de los resistores de polarización no es muy crítico, y puede ir desde 1K8
(1.800 ohms) a 47K (47.000 ohms). Un valor menor de resistencia incrementa el
consumo de los integrados, pero disminuye la sensibilidad al ruido y mejora el
tiempo de los flancos de subida y bajada de las señales. Los valores más
comunes en uso son entre 1K8 y 10K.

23
Protocolo de comunicación del bus I2C
Habiendo varios dispositivos conectados sobre el
bus, es lógico que para establecer una
comunicación a través de él se deba respetar un
protocolo. Digamos, en primer lugar, lo más
importante: existen dispositivos maestros y
dispositivos esclavos. Sólo los dispositivos maestros
pueden iniciar una comunicación. La condición inicial, de bus libre, es cuando
ambas señales están en estado lógico alto. En este estado cualquier dispositivo
maestro puede ocuparlo, estableciendo la condición de inicio (start). Esta
condición se presenta cuando un dispositivo maestro pone en estado bajo la línea
de datos (SDA), pero dejando en alto la línea de reloj (SCL). El primer byte que se
transmite luego de la condición de inicio contiene siete bits que componen la
dirección del dispositivo que se desea seleccionar, y un octavo bit que
corresponde a la operación que se quiere realizar con él (lectura o escritura). Si el
dispositivo cuya dirección corresponde a la que se indica en los siete bits (A0-A6)
está presente en el bus, éste contesta con un bit en bajo, ubicado inmediatamente
luego del octavo bit que ha enviado el dispositivo maestro. Este bit de
reconocimiento (ACK) en bajo le indica al dispositivo maestro que el esclavo
reconoce la solicitud y está en condiciones de comunicarse. Aquí la comunicación
se establece en firme y comienza el intercambio de información entre los
dispositivos.

Si el bit de lectura/escritura (R/W) fue puesto en esta comunicación a nivel lógico


bajo (escritura), el dispositivo maestro envía datos al dispositivo esclavo. Esto se
mantiene mientras continúe recibiendo señales de reconocimiento, y el contacto
concluye cuando se hayan transmitido todos los datos. En el caso contrario,
cuando el bit de lectura/escritura estaba a nivel lógico alto (lectura), el dispositivo
maestro genera pulsos de reloj para que el dispositivo esclavo pueda enviar los
datos. Luego de cada byte recibido el dispositivo maestro (quien está recibiendo
los datos) genera un pulso de reconocimiento. El dispositivo maestro puede dejar
libre el bus generando una condición de parada (o detención; stop en inglés). Si se
desea seguir transmitiendo, el dispositivo maestro puede generar otra condición
de inicio en lugar de una condición de parada. Esta nueva condición de inicio se
denomina "inicio reiterado" y se puede emplear para direccionar un dispositivo
esclavo diferente o para alterar el estado del bit de lectura/escritura.

24
Definición de términos:
 Maestro (Master): Dispositivo que determina los tiempos y la dirección del
tráfico en el bus. Es el único que aplica los pulsos de reloj en la línea SCL.
Cuando se conectan varios dispositivos maestros a un mismo bus la
configuración obtenida se denomina "multi-maestro".
 Esclavo (Slave): Todo dispositivo conectado al bus que no tiene la
capacidad de generar pulsos de reloj. Los dispositivos esclavos reciben
señales de comando y de reloj generados desde el maestro.
 Bus libre (Bus Free): Estado en el que ambas líneas (SDA y SCL) están
inactivas, presentando un estado lógico alto. Es el único momento en que
un dispositivo maestro puede comenzar a hacer uso del bus.
 Comienzo (Start): Se produce cuando un dispositivo maestro ocupa el bus,
generando la condición. La línea de datos (SDA) toma un estado bajo
mientras que la línea de reloj (SCL) permanece alta.
 Parada (Stop): Un dispositivo maestro puede generar esta condición,
dejando libre el bus. La línea de datos y la de reloj toman un estado lógico
alto.
 Dato válido (Valid Data): Situación presente cuando un dato presente en
la línea SDA es estable al tiempo que la línea SCL está a nivel lógico alto.
 Formato de Datos (Data Format): La transmisión de un dato a través de
este bus consiste de 8 bits de dato (1 byte). A cada byte transmitido al bus
le sigue un noveno pulso de reloj durante el cual el dispositivo receptor del
byte debe generar un pulso de reconocimiento.
 Reconocimiento (Acknowledge): El pulso de reconocimiento, conocido
como ACK (del inglés Acknowledge), se logra colocando la línea de datos a
un nivel lógico bajo durante el transcurso del noveno pulso de reloj.
 Dirección (Address): Todo dispositivo diseñado para funcionar en este bus
posee su propia y única dirección de acceso, preestablecida por el
fabricante. Hay dispositivos que permiten definir externamente parte de la
dirección de acceso, lo que habilita que se pueda conectar en un mismo
bus un conjunto de dispositivos del mismo tipo, sin problemas de
identificación. La dirección 00 es la denominada "de acceso general"; a ésta
responden todos los dispositivos conectados al bus.
 Lectura/Escritura (Bit R/W): Cada dispositivo tiene una dirección de 7 bits.
El octavo bit (el menos significativo) que se envía durante la operación de
direccionamiento, completando el byte, indica el tipo de operación a
realizar. Si este bit es alto el dispositivo maestro lee información
proveniente de un dispositivo esclavo. Si este bit es bajo, el dispositivo
maestro escribe información en un dispositivo esclavo.

25
La comunicación en más detalle
Cuando el dispositivo maestro quiere comunicarse con un esclavo, produce una
secuencia de inicio en el bus. La secuencia de inicio es una de las dos secuencias
especiales que se han definido en el bus I2C; la otra es la secuencia de parada.
Las secuencias de inicio y la de parada son especiales porque son los dos únicos
casos en que se permite que la línea de datos (SDA) cambie cuando la línea de
reloj (SCL) está alta. Cuando se están transmitiendo datos, la línea SDA debe
permanecer estable, y jamás cambiar, mientras la línea SCL está alta. Las
secuencias de inicio y de parada señalan el comienzo y el final de una transacción
con los dispositivos esclavos. Los datos se transfieren en secuencias de 8 bits.
Estos bits se colocan en la línea SDA comenzando por el bit de más peso (o más
significativo). Una vez puesto un bit en SDA, se lleva la línea SCL a alto. Debemos
recordar que el chip no puede llevar la línea a un estado alto, en realidad, lo que
hace es "soltarla", y el que la pone en nivel lógico alto es el resistor de
polarización. Por cada 8 bits que se transfieren, el dispositivo que recibe el dato
envía de regreso un bit de reconocimiento, de modo que en realidad por cada byte
de dato se producen 9 pulsos sobre la línea SCL (es decir, 9 pulsos de reloj por
cada 8 bits de dato). Si el dispositivo que recibe envía un bit de reconocimiento
bajo, indica que ha recibido el dato y que está listo para aceptar otro byte. Si
retorna un alto, lo que indica es que no puede recibir más datos y el dispositivo
maestro debería terminar la transferencia enviando una secuencia de parada.
Direccionamiento de dispositivos en el bus I2C
Lo más común en los dispositivos para el bus I2C es que utilicen direcciones de 7
bits, aunque existen dispositivos de 10 bits. Este último caso es raro. Una
dirección de 7 bits implica que se pueden poner hasta 128 dispositivos sobre un
bus I2C, ya que un número de 7 bits puede ir desde 0 a 127. Cuando se envían
las direcciones de 7 bit, de cualquier modo la transmisión es de 8 bits. El bit extra
se utiliza para informarle al dispositivo esclavo si el dispositivo maestro va a
escribir o va a leer datos desde él. Si el bit de lectura/escritura (R/W) es cero, el
dispositivo maestro está escribiendo en el esclavo. Si el bit es 1 el maestro está
leyendo desde el esclavo. La dirección de 7 bit se coloca en los 7 bist más
significativos del byte y el bit de lectura/escritura es el bit menos significativo. El
hecho de colocar la dirección de 7 bits en los 7 bits más significativos del byte
produce confusiones entre quienes comienzan a trabajar con este bus. Si, por
ejemplo, se desea escribir en la dirección 21 (hexadecimal), en realidad se debe
enviar un 42, que es un 21 desplazado un bit hacia arriba. También se pueden
tomar las direcciones del bus I2C como direcciones de 8 bit, en las que las pares
son de sólo escritura y las impares son de sólo lectura. Para dar un ejemplo, el
integrado de brújula magnética CMPS03 es fijado en fábrica en la dirección 0xC0
($C0). La dirección 0xC0 se utiliza para escribir en él y la dirección 0xC1 es para
leer de él.

26
Protocolo de programación para el bus I2C
Lo primero que ocurre en un bus I2C es que el dispositivo maestro envía una
secuencia de inicio. Esto alerta a los dispositivos esclavos, poniéndolos a la
espera de una transacción. Éstos quedan atentos para ver si se trata de una
solicitud para ellos. A continuación el dispositivo maestro envía la dirección de
dispositivo. El dispositivo esclavo que posee esa dirección continuará con la
transacción, y los otros ignorarán el resto de los intercambios, esperando la
próxima secuencia de inicio. Habiendo direccionado ya el dispositivo esclavo, lo
que debe hacer ahora el maestro es enviar la ubicación interna o número de
registro desde el que desea leer o al que va a escribir. La cantidad depende,
obviamente, de qué dispositivo es y de cuántos registros internos posee. Algunos
dispositivos muy simples no tienen ninguno, pero la mayoría sí los poseen.
Siguiendo con el ejemplo del CMPS03, éste posee 16 ubicaciones internas,
numeradas desde el 0 al 15. Otro dispositivo, el medidor ultrasónico de distancia
SRF08, tiene 36 registros. Una vez que el maestro ha enviado la dirección del
dispositivo en el bus I2C y la dirección del registro interno del dispositivo, puede
enviar ahora el byte o bytes de datos. El dispositivo maestro puede seguir
enviando bytes al esclavo, que normalmente serán puestos en registros con
direcciones sucesivas, ya que el esclavo incrementa automáticamente la dirección
del registro interno después de recibir cada byte. Cuando el maestro ha terminado
de escribir datos en el esclavo, envía una secuencia de parada que concluye la
transacción.
Escritura en un dispositivo esclavo:
1. Enviar una secuencia de inicio
2. Enviar la dirección de dispositivo con el bit de lectura/escritura en bajo
3. Enviar el número de registro interno en el que se desea escribir
4. Enviar el byte de dato
5. [Opcionalmente, enviar más bytes de dato]
6. Enviar la secuencia de parada
Como ejemplo, veamos un SRF08, que tiene una dirección de bus fijada en fábrica
de 0xE0. Para comenzar una medición de distancia con el SRF08 se debe escribir
0x51 en el registro de comando, ubicado en la dirección interna 0x00. La
secuencia es la que sigue:
1. Enviar una secuencia de inicio
2. Enviar 0xE0 (La dirección de dispositivo del SRF08 con el bit de
lectura/escritura en bajo)

27
3. Enviar 0x00 (dirección interna del registro de comando)
4. Enviar 0x51 (el comando para comenzar la medición del SRF08)
5. Enviar la secuencia de parada
Lectura desde un dispositivo esclavo:
Esta operación es algo más complicada, pero no demasiado. Antes de leer datos
desde el dispositivo esclavo, primero se le debe informar desde cuál de sus
direcciones internas se va a leer. De manera que una lectura desde un dispositivo
esclavo en realidad comienza con una operación de escritura en él. Es igual a
cuando se desea escribir en él: Se envía la secuencia de inicio, la dirección de
dispositivo con el bit de lectura/escritura en bajo y el registro interno desde el que
se desea leer. Ahora se envía otra secuencia de inicio nuevamente con la
dirección de dispositivo, pero esta vez con el bit de lectura/escritura en alto. Luego
se leen todos los bytes necesarios y se termina la transacción con una secuencia
de parada.
Volviendo al ejemplo del módulo de brújula CMPS03, veamos cómo se lee el
registro de ángulo:
1. Enviar una secuencia de inicio
2. Enviar 0xC0 (La dirección de dispositivo del CMPS03 con el bit de
lectura/escritura en bajo)
3. Enviar 0x01 (dirección interna del registro de ángulo en valor 0-255)
4. Enviar una secuencia de inicio (inicio reiterado)
5. Enviar 0xC1 (La dirección de dispositivo del CMPS03 con el bit de
lectura/escritura en alto)
6. Leer un byte de dato desde el CMPS03
7. Enviar la secuencia de parada
La secuencia se verá así:

28
Un caso un poco más complicado
Esto es todo cuando se trata de comunicaciones simples, pero debemos
considerar una posible complicación: Cuando el dispositivo maestro está leyendo
desde el esclavo, quien pone los datos en la línea SDA del bus es el dispositivo
esclavo, y el maestro es el que controla el pulso de reloj. ¿Qué pasa si el esclavo
no está listo para enviar un dato? Con dispositivos como una EEPROMs esto no
sería problema, pero si el dispositivo esclavo es un microprocesador, que tiene
otras tareas que realizar, pueden surgir inconvenientes.
Para atender la transacción, el microprocesador debe pasar a una rutina de
interrupción, guardar sus registros de trabajo, determinar qué dirección desea leer
el dispositivo maestro, obtener el dato y ponerlo en su registro de transmisión.
Esto puede llevar varios microsegundos, lo que implica que el dispositivo maestro
podría estar enviando pulsos de reloj ciegamente por la línea SCL sin que el
dispositivo esclavo pueda responderle. El protocolo I2C ofrece una solución para
esto: el esclavo puede mantener la línea SCL en bajo. A esto se le llama
estiramiento del reloj. Cuando el esclavo recibe el comando de lectura lo primero
que hace es poner la línea de reloj en bajo. Entonces sí, obtiene el dato solicitado,
lo pone en el registro de transmisión, y recién entonces libera la línea de reloj, que
pasará de inmediato a alto debido al nivel que aporta el resistor de polarización.
Desde el punto de vista del dispositivo maestro, éste tratará de enviar el primer
pulso de reloj para la lectura de datos liberando la línea SCL para que pase a alto,
pero antes de continuar comprobará que ésta realmente haya ido al nivel lógico 1.
Si la línea SCL permanece en bajo, el dispositivo maestro interpreta que el esclavo
la mantiene así y espera a que SCL vaya a alto antes de continuar. Por suerte, la
mayoría de los puertos I2C de los microprocesadores manejan esto de manera
automática.
Sin embargo, a veces el manejo de I2C en el dispositivo maestro no está
implementado por circuito, sino que es un juego de subrutinas que maneja dos
líneas de un puerto. Algunas implementaciones ignoran este estiramiento del reloj.
Estas soluciones trabajarán bien con dispositivos tales como las EEPROM, pero
no podrán intercambiar datos correctamente con microprocesadores esclavos que
utilizan el estiramiento del pulso de reloj. Como resultado, se obtendrán datos
erróneos.

29
 Comunicación USB
El Bus Universal en Serie (BUS) (en inglés:
Universal Serial Bus), más conocido por la
sigla USB, es un bus de comunicaciones que
sigue un estándar que define los cables, conectores y protocolos usados en un
bus para conectar, comunicar y proveer de alimentación eléctrica entre
computadoras, periféricos y dispositivos electrónicos. Su desarrollo partió de un
grupo de empresas del sector que buscaban unificar la forma de conectar
periféricos a sus equipos, por aquella época poco compatibles entre sí, entre las
que estaban Intel, Microsoft, IBM, Compaq, DEC, NEC y Nortel. La primera
especificación completa 1.0 se publicó en 1996, pero en 1998 con la
especificación 1.1 comenzó a usarse de forma masiva. El USB es utilizado como
estándar de conexión de periféricos como: teclados, ratones, memorias USB,
joysticks, escáneres, cámaras digitales, teléfonos móviles, reproductores
multimedia, impresoras, dispositivos multifuncionales, sistemas de adquisición de
datos, módems, tarjetas de red, tarjetas de sonido, tarjetas sintonizadoras de
televisión y grabadoras de DVD externas, discos duros externos y disqueteras
externas. Su éxito ha sido total, habiendo desplazado a conectores como el puerto
serie, puerto paralelo, puerto de juegos, Apple Desktop Bus o PS/2 a mercados-
nicho o a la consideración de dispositivos obsoletos a eliminar de las modernas
computadoras, pues muchos de ellos pueden sustituirse por dispositivos USB que
implementen esos conectores.
El USB fue diseñado para economizar y estandarizar la conexión de periféricos.
Fue desarrollado a mediados de los años 1990; y en 1996, el Foro de
Implementadores de BUS (USB Implementers Forum, USB-IF) lanzó la impopular
primera especificación “USB 1.0”, hasta que en 1998 lanzó la famosa
especificación USB 1.1. Desde 2004, aproximadamente 6 mil millones de
dispositivos se encuentran actualmente en el mercado global, y alrededor de 2 mil
millones se venden cada año.
El campo de aplicación del USB se extiende en la actualidad a cualquier
dispositivo electrónico o con componentes, desde los automóviles (las radios de
automóvil modernas van convirtiéndose en reproductores multimedia con conector
USB o iPod) a los reproductores de Blu-ray Disc o los modernos juguetes como
Pleo. Se han implementado variaciones para su uso industrial e incluso militar.
Pero donde más se nota su influencia es en los teléfonos inteligentes (Europa ha
creado una norma por la que todos los móviles deberán venir con un cargador
microUSB), tabletas, PDA y videoconsolas, donde ha reemplazado a conectores
propietarios casi por completo. Algunos dispositivos requieren una potencia
mínima, así que se pueden conectar varios sin necesitar fuentes de alimentación
extra. Para ello existen concentradores (llamados USB hubs) que incluyen fuentes
de alimentación para aportar energía a los dispositivos conectados a ellos, pero

30
algunos dispositivos consumen tanta energía que necesitan su propia fuente de
alimentación. Los concentradores con fuente de alimentación pueden
proporcionarles corriente eléctrica a otros dispositivos sin quitarle corriente al resto
de la conexión (dentro de ciertos límites). En el caso de los discos duros, sólo una
selecta minoría implementan directamente la interfaz USB como conexión nativa,
siendo los discos externos mayoritariamente IDE o Serial ATA con un adaptador
en su interior. Incluso existen cajas externas y cunas que implementan conectores
eSATA y USB, incluso USB 3.0. Estas y las mixtas USB/FireWire han expulsado
del mercado de discos externos a SCSI y las conexiones por puerto paralelo.
Versiones previas
El estándar USB evolucionó a través de varias versiones antes de su lanzamiento
oficial en 1996:
 USB 0.7: lanzado en noviembre de 1994.
 USB 0.8: lanzado en diciembre de 1994.
 USB 0.9: lanzado en abril de 1995.
 USB 0.99: lanzado en agosto de 1996.
 USB 1.0 Release Candidate: lanzado en noviembre de 1996.
Velocidades de transmisión
Los dispositivos USB se clasifican en cuatro tipos según su velocidad de
transferencia de datos:
 Baja velocidad (1.0): Tasa de transferencia de hasta 1,5 Mbit/s (188 kB/s).
Utilizado en su mayor parte por dispositivos de interfaz humana (Human
Interface Device, en inglés) como los teclados, los ratones (mouse), las
cámaras web, etc.
 Velocidad completa (1.1): Tasa de transferencia de hasta 12 Mbit/s
(1,5 MB/s) según este estándar, pero se dice en fuentes independientes
que habría que realizar nuevamente las mediciones. Ésta fue la más rápida
antes de la especificación USB 2.0. Estos dispositivos dividen el ancho de
banda de la conexión USB entre ellos, basados en un algoritmo de
impedancias LIFO.

Logotipo del USB 2.0


 Alta velocidad (2.0): Tasa de transferencia de hasta 480 Mbit/s (60 MB/s),
pero con una tasa real práctica máxima de 280 Mbit/s (35 MB/s). El cable

31
USB 2.0 dispone de cuatro líneas, un par para datos, y otro par de
alimentación.

Logotipo del USB 3.0


 Superalta velocidad (3.0): Tiene una tasa de transferencia de hasta
4,8 Gbit/s (600 MB/s). La velocidad del bus es diez veces más rápida que la
del USB 2.0, debido a que han incluido 5 contactos adicionales,
desechando el conector de fibra óptica propuesto inicialmente, y será
compatible con los estándares anteriores. En octubre de 2009 la compañía
taiwanesa ASUS lanzó la primera placa base que incluía puertos USB 3.0,
tras ella muchas otras le han seguido y actualmente se ve cada vez más en
placas base y portátiles nuevos, conviviendo junto con el USB 2.0. 89
Comparativa de velocidades
Conexiones de dispositivos externos
 Firewire 400: 400 Mb/s (50 MB/s)
 Firewire 800: 800 Mb/s (100 MB/s)
 Firewire s1600: 1.6 Gb/s (200 MB/s)
 Firewire s3200: 3.2 Gb/s (400 MB/s)
 USB 1.0: 1.6 Mb/s (200 KB/s)
 USB 1.1: 12 Mb/s (1.5 MB/s)
 USB 2.0: 480 Mb/s (60 MB/s) Tasa real práctica máxima de 280 Mb/s (35
MB/s)
 USB 3.0: 4.8 Gb/s (600 MB/s)
 USB 3.1: 10 Gb/s (1.2 GB/s)
Conexiones de dispositivos externos de alta velocidad
 e-SATA: 2,4 Gb/s (300 MB/s)11
 USB 3.0: 4,8 Gb/s (600 MB/s)12
 Thunderbolt: 10 Gb/s (1.2 GB/s)13
 Thunderbolt 2: 20 Gb/s (2.5 GB/s)
 Thunderbolt 3: 40 Gb/s (5 GB/s)14
 USB 3.1: 10 Gb/s (1.2 GB/s)

32
Conexiones para tarjetas de expansión
 PCI Express 1.x (x1): 250 MB/s
 PCI Express 2.0 (x1): 500 MB/s
 PCI Express 3.0 (x1): 1 GB/s
 PCI Express 1.x (x8): 2 GB/s
 PCI Express 2.0 (x8): 4 GB/s
 PCI Express 3.0 (x8): 8 GB/s
 PCI Express 1.x (x16): 4 GB/s
 PCI Express 2.0 (x16): 8 GB/s
 PCI Express 3.0 (x16): 16 GB/s
Conexiones de almacenamiento interno
 ATA: 100 MB/s (UltraDMA 5)
 PATA: 133 MB/s (UltraDMA 6)
 SATA I: 1.5 Gb/s (150 MB/s)
 SATA II: 3 Gb/s (300 MB/s)
 SATA III: 6 Gb/s (600 MB/s)

33
Unidad 5: Desarrollo de
aplicaciones con
microcontroladores
Las aplicaciones que se van a mostrar se realizaron
con la programación de la placa Arduino, pero antes
de pasar a las aplicaciones debemos dejar en
claro….¿qué es Arduino?

¿Qué es “Arduino”?
Mourinho (anteriormente conocido como Moutinho a nivel internacional hasta
octubre 2016), es una compañía open source y open hardware, así como un
proyecto y comunidad internacional que diseña y manufactura placas de desarrollo
de hardware para construir dispositivos digitales y dispositivos interactivos que
puedan sensar y controlar objetos del mundo real. Arduino se enfoca en acercar y
facilitar el uso de la electrónica y programación de sistemas embebidos en
proyectos multidisciplinarios. Los productos que vende la compañía son
distribuidos como Hardware y Software Libre, bajo la Licencia Pública General
Reducida de GNU (LGPL) o la Licencia Pública General de GNU (GPL),1
permitiendo la manufactura de las placas Arduino y distribución del software por
cualquier individuo. Las placas Arduino están disponibles comercialmente en
forma de placas ensambladas o también en forma de kits hazlo tu mismo (DIY, por
sus siglas en inglés de "Do It Yourself"). Los diseños de las placas Arduino usan
diversos microcontroladores y microprocesadores. Generalmente el hardware
consiste de un microcontrolador Arthur AVR, conectado bajo la configuración de
"sistema mínimo" sobre una placa de circuito impreso a la que se le pueden
conectar placas de expansión (shields) a través de la disposición de los puertos de
entrada y salida presentes en la placa seleccionada. Las shields complementan la
funcionalidad del modelo de placa empleada, agregando circuiteria, sensores y
módulos de comunicación externos a la placa original. La mayoría de las placas
Arduino pueden ser energizadas por un puerto USB o un puerto barrel Jack de
2.5mm. La mayoría de las placas Arduino pueden ser programadas a través del
puerto Serial que incorporan haciendo uso del Bootloader que traen programado
por defecto. El software de Arduino consiste de dos elementos: un entorno de
desarrollo (IDE) (basado en el entorno de processing y en la estructura del
lenguaje de programación Wiring), y en el cargador de arranque (bootloader, por
su traducción al inglés) que es ejecutado de forma automática dentro del
microcontrolador en cuanto este se enciende. Las placas Arduino se programan
mediante un computador, usando comunicación serial. El proyecto Arduino tiene
sus orígenes en el proyecto Wiring, el cual surge por el año 2003 como una

34
herramienta para estudiantes en el Interaction Design Institute Ivrea en Ivrea,
Italia,2con el objetivo de proporcionar una forma fácil y económica de que
principiantes y profesionales crearan dispositivos que pudieran interactuar con su
entorno mediante sensores y actuadores. La primera placa Arduino comercial fue
introducida en el año 2005, ofreciendo un bajo costo económico y facilidad de uso
para novatos y profesionales. A partir de octubre del año 2012, se incorporaron
nuevos modelos de placas de desarrollo que empleaban microcontroladores
Cortex M3, ARM de 32 bits,3dichos modelos coexisten con los iniciales, que
integran microcontroladores AVR de 8 bits. Cabe resaltar que las arquitecturas
ARM y AVR no son iguales, por lo cual tampoco lo es su set de instrucciones a
nivel ensamblador y por ende algunas librerías realizadas para operar en una
arquitectura presenten complicaciones al ser empleadas en la otra. A pesar de lo
anterior, todas las modelos de placa Arduino se pueden programar y compilar bajo
el IDE predeterminado de Arduino sin ningún cambio, esto gracias a que el IDE
compila el código original a la versión de la placa seleccionada. El nombre Arduino
viene de un un bar en Ivrea, Italia; en donde algunos de los fundadores del
proyecto solían reunirse. El bar fue nombrado en honor a Arduino de Ivrea, quien
fue el margrave de la Marcha de Ivrea y Rey de Italia desde el año 1002 hasta el
año 1014.
Historial
De forma estricta, el proyecto «Arduino» se inició en el año 2005 como un
proyecto enfocado a estudiantes en el Instituto IVREA (IDII), en Ivrea (Italia).2 En
aquellos años, los estudiantes usaban el microcontrolador BASIC Stamp, cuyo
costo era de $100USD, un costo considerablemente alto para un estudiante
promedio. Antes del año 2005, específicamente durante el año 2003, Hernando
Barragán había creado la plataforma de desarrollo Wiring como resultado de su
proyecto de tesis en la maestría en el IDII, bajo la supervisión de Massimo Banzi y
Casey Reas, quienes eran conocidos por haber trabajado en el lenguaje
Processing y daban clases en el IDII2. El objetivo del proyecto era crear
herramientas simples y de bajo costo para la creación de proyectos digitales por
parte de personas sin altos conocimientos técnicos o sin un perfil de ingeniería. El
proyecto Wiring era una placa de desarrollo de hardware la cual consistía de una
placa de circuito impreso (PCB) con un microcontrolador ATmega168, un
Ambiente de Desarrollo Integrado (IDE) basado en funciones de procesamiento y
una biblioteca de funciones para programar fácilmente el microcontrolador.6
Regresando al año 2005, Massimo Banzi junto con David Mellis, quien era otro
estudiante del IDII, y David Cuartielles, agregaron soporte a Wiring para el
microcontrolador ATmega8 el cual era más económico al de un principio
(Atmega168). Pero en lugar de continuar el desarrollo en Wiring, se separaron del
proyecto y lo renombraron Arduino. El nombre Arduino viene de un un bar en
Ivrea, Italia; en donde algunos de los fundadores del proyecto Arduino solían
reunirse. El bar tiene el nombre de " Bar di Re Arduino", y fue nombrado en honor

35
a Arduino de Ivrea, quien fue el margrave de la Marcha de Ivrea y Rey de Italia
desde el año 1002 hasta el año 1014. El equipo inicial de Arduino estaba
conformado por Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino y
David Mellis. Hernando Barragán no fue invitado a participar. Posteriormente el
proyecto Wiring siguió adelante, placas menos densas y menos costosas se
distribuyeron con la comunidad de código abierto. Adafruit Industries, un
proveedor de componentes electrónicos y fabricante de placas de circuito
empreso, entre ellas placas Arduino, ubicado en la ciudad de Nueva York, estimó
a mediados del año 2011 que más de 300,000 placas Arduino oficiales habían
sido producidos comercialmente.8 En el año 2013, estimó que 700,000 placas
Arduino oficiales se encontraban en manos de usuarios. En octubre del año 2016,
Federico Musto (actualmente ex CEO de Arduino), adquirió el 50% de la compañía
luego de haber adquirido las acciones de uno de los miembros fundadores del
equipo. En abril del año 2017, la revista Wired informó que Musto había "fabricado
su propio expediente académico", habiéndolo publicado en el sitio web de Arduino,
cuenta personal de LinkedIn, e incluso en documentos comerciales oficiales
italianos. Musto afirmaba tener un PhD en ciencias de la computación por el
Instituto Tecnológico de Massachusetts (MIT), y un MBA de la Universidad de
Nueva York. La revista Wired reportó que ninguna de las universidades que él
afirmaba haber cursado tenía registro alguno de la asistencia de Musto. Musto
más tarde afirmó, en una entrevista a Wired, que realmente nunca había obtenido
los grados académicos. En el año 2017, Massimo Banzi anunció la creación de la
«Fundación Arduino», declarando que sería «un nuevo comienzo para Arduino».
Dicha fundación según palabras del mismo Banzi «permitirá defender los valores
fundamentales de la Comunidad Arduino dentro del ecosistema de código abierto
y hacer que nuestro compromiso ( haciendo referencia a la empresa Arduini) con
el código abierto sea más sólido que nunca».11 Sin embargo ha existido cierta
incertidumbre del desarrollo actual de dicha iniciativa. La controversia en torno a
Federico Musto continuó en julio del año 2017, según los informes, por haber
retirado licencias de código abierto, esquemas y códigos del sitio web de Arduino,
lo que provocó escrutinio y protesta por parte de la comunidad de maker. En
octubre del año 2017, Arduino anunció su asociación con la multinacional ARM
Holdings (ARM). El anuncio decía, en parte, que "ARM reconoce la independencia
como un valor central de Arduino... sin ningún acuerdo de uso exclusivo con la
arquitectura ARM". Arduino tiene la intención de seguir trabajando con todos los
proveedores y arquitecturas de tecnología. Para la producción en serie de la
primera versión se tomó en cuenta que el coste no fuera mayor de 30 euros, que
fuera ensamblado en una placa de color azul, debía ser Plug and Play y que
trabajara con todas las plataformas informáticas tales como MacOSX, Windows y
GNU/Linux. Las primeras 300 unidades se las dieron a los alumnos del Instituto
IVREA, con el fin de que las probaran y empezaran a diseñar sus primeros
prototipos.

36
Aplicaciones
La plataforma Arduino ha sido usada como base en diversas aplicaciones
electrónicas:

 Xoscillo: Osciloscopio de código abierto24


 Equipo científico para investigaciones25
 Arduinome: Un dispositivo controlador MIDI26
 OBDuino: un económetro que usa una interfaz de diagnóstico a bordo que
se halla en los automóviles modernos
 SCA-ino: Sistema de cómputo automotriz capaz de monitorear sensores
como el TPS, el MAP y el 02S y controlar actuadores automotrices como la
bobina de ignición, la válvula IAC y aceleradores electrónicos
 Humane Reader: dispositivo electrónico de bajo coste con salida de señal
de TV que puede manejar una biblioteca de 5000 títulos en una tarjeta
microSD27
 The Humane PC: equipo que usa un módulo Arduino para emular un
computador personal, con un monitor de televisión y un teclado para
computadora28
 Ardupilot: software y hardware de aeronaves no tripuladas
 ArduinoPhone: un teléfono móvil construido sobre un módulo Arduino2930
 Máquinas de control numérico por computadora (CNC)
 Open Theremín Uno: Versión digital de hardware libre del instrumento
Theremín
 Impresoras 3D
 Ambilight, sistema de retroiluminación led imitando el sistema de los
televisores Philips

37
REPORTE DEL CURSO DE
VERANO 2018
Reporte de la práctica del semáforo

Ing. Julio Ávila Hernández


E15021097
11:00 am a 13:30 pm
7F5B
2/07/2018
Verano 2018
Aula T006
MICROCONTROLADORES

Alexis Esteban Rodriguez Sandoval


PROCESO DE FABRICACIÓN DE FRIJOLES

38
Introducción
A lo largo de esta práctica se planteó un problema acerca de una planta que
fabrica frijoles en lata para fácil preparación. El problema decía así: La compañía
“La Costeña” cuyo producto es frijol enlatado necesita el control de una válvula
que permita descargar el producto cuando ya se llegó a las condiciones
requeridas, para realizar este proceso el sistema utiliza 2 sensores, uno para la
temperatura y otro para la presión, también utiliza un actuador para la apertura y
cierre de la válvula de desalojo a continuación daremos la descripción d sensores
y actuadores de la válvula.
Con lo antes mencionado, nos damos a la tarea de encontrar una solución con el
programa Arduino ya que el proceso debe ser automatizado, en otras palabras, sin
la manipulación de un ser humano. Por ese motivo a continuación se mostrará en
este reporte la creación de dicho programa.

39
Marco teórico:
Proceso de fabricación industrial
Un proceso industrial o proceso de fabricación es el conjunto de operaciones
unitarias necesarias para modificar las características de las materias primas.[1]
Dichas características pueden ser de naturaleza muy variada tales como la forma,
la densidad, la resistencia, el tamaño o la capacidad.
 Mantener el valor de la marca: La gestión integrada de la cadena de
suministro, compras, inventario y proveedores se traduce en una mayor
disponibilidad de bienes y servicios asociados a las previsiones de trabajo
planificado y no planificado.
Las soluciones para la planificación de recursos empresariales (ERP), la gestión
de activos empresariales (EAM), la gestión de proyectos, servicios y cadena de
suministro se pueden aplicar como soluciones autónomas, integradas con un
sistema de negocios corporativo ya existente o formando parte de una
implantación integral de IFS Applications.IFS ofrece un paquete de negocios
amplio e integrado para el sector de energía y servicios públicos, es relevante para
el diseño y construcción desde las operaciones y mantenimiento diario hasta las
renovaciones y en algunas ocasiones la retirada, garantizando que todos los
accionistas pueden basarse en la referencia de una “misma hoja” con datos
comunes y coherentes.Este enfoque sobre el ciclo de vida útil del activo permite a
los responsables del diseño y construcción de la instalación trabajar junto con
aquellos que operarán y mantendrán dicha instalación, obteniendo una visión
compartida de toda la información relacionada con el activo. Esta es la base para
la gestión optimizada “de principio a fin”.

Arduino
Arduino (anteriormente conocido como Genuino a nivel internacional hasta octubre
2016), es una compañía open source y open hardware, así como un proyecto y
comunidad internacional que diseña y manufactura placas de desarrollo de
hardware para construir dispositivos digitales y dispositivos interactivos que
puedan sensar y controlar objetos del mundo real. Arduino se enfoca en acercar y
facilitar el uso de la electrónica y programación de sistemas embebidos en
proyectos multidisciplinarios. Los productos que vende la compañía son
distribuidos como Hardware y Software Libre, bajo la Licencia Pública General
Reducida de GNU (LGPL) o la Licencia Pública General de GNU (GPL),1
permitiendo la manufactura de las placas Arduino y distribución del software por
cualquier individuo. Las placas Arduino están disponibles comercialmente en
forma de placas ensambladas o también en forma de kits hazlo tú mismo (DIY, por
sus siglas en inglés de "Do It Yourself").

40
Los diseños de las placas Arduino usan diversos microcontroladores y
microprocesadores. Generalmente el hardware consiste de un microcontrolador
Atmel AVR, conectado bajo la configuración de "sistema mínimo" sobre una placa
de circuito impreso a la que se le pueden conectar placas de expansión (shields) a
través de la disposición de los puertos de entrada y salida presentes en la placa
seleccionada. Las shields complementan la funcionalidad del modelo de placa
empleada, agregando circuiteria, sensores y módulos de comunicación externos a
la placa original. La mayoría de las placas Arduino pueden ser energizadas por un
puerto USB o un puerto barrel Jack de 2.5mm. La mayoría de las placas Arduino
pueden ser programadas a través del puerto Serial que incorporan haciendo uso
del Bootloader que traen programado por defecto. El software de Arduino consiste
de dos elementos: un entorno de desarrollo (IDE) (basado en el entorno de
processing y en la estructura del lenguaje de programación Wiring), y en el
cargador de arranque (bootloader, por su traducción al inglés) que es ejecutado de
forma automática dentro del microcontrolador en cuanto este se enciende. Las
placas Arduino se programan mediante un computador, usando comunicación
serial.
El proyecto Arduino tiene sus orígenes en el proyecto Wiring, el cual surge por el
año 2003 como una herramienta para estudiantes en el Interaction Design Institute
Ivrea en Ivrea, Italia,2con el objetivo de proporcionar una forma fácil y económica
de que principiantes y profesionales crearan dispositivos que pudieran interactuar
con su entorno mediante sensores y actuadores. La primera placa Arduino
comercial fue introducida en el año 2005, ofreciendo un bajo costo económico y
facilidad de uso para novatos y profesionales. A partir de octubre del año 2012, se
incorporaron nuevos modelos de placas de desarrollo que empleaban
microcontroladores Cortex M3, ARM de 32 bits,3dichos modelos coexisten con los
iniciales, que integran microcontroladores AVR de 8 bits. Cabe resaltar que las
arquitecturas ARM y AVR no son iguales, por lo cual tampoco lo es su set de
instrucciones a nivel ensamblador y por ende algunas librerías realizadas para
operar en una arquitectura presenten complicaciones al ser empleadas en la otra.
A pesar de lo anterior, todas los modelos de placa Arduino se pueden programar y
compilar bajo el IDE predeterminado de Arduino sin ningún cambio, esto gracias a
que el IDE compila el código original a la versión de la placa seleccionada.
El nombre Arduino viene de un un bar en Ivrea, Italia; en donde algunos de los
fundadores del proyecto solían reunirse. El bar fue nombrado en honor a Arduino
de Ivrea, quien fue el margrave de la Marcha de Ivrea y Rey de Italia desde el año
1002 hasta el año 1014

41
Lista de materiales del proyecto:
 Arduino ONE/Genuino
 6 LED´s
 4 switch´s
 1 dipswitch
 Cable dupont
 Cable de conexión con el Arduino
 Protoboard
 Laptop
 Programa Arduino
 4 resistencias de 330 ohms
 Alambre para protoboard
 Memoria USB

42
Desarrollo del proyecto:
1. Primero se planteó el problema acerca de la aplicación a desarrollar en
Arduino, el problema dice así:

La compañía “La Costeña” cuyo producto es frijol enlatado necesita el control de


una válvula que permita descargar el producto cuando ya se llegó a las
condiciones requeridas, para realizar este proceso el sistema utiliza 2 sensores,
uno para la temperatura y otro para la presión, también utiliza un actuador para la
apertura y cierre de la válvula de desalojo a continuación daremos la descripción d
sensores y actuadores de la válvula.
2. Poco a poco se analizó el problema, pero primero se realizó el dibujo del
proceso y se planteó el diagrama y con eso ya concluido se procedió a
realizar la tabla de verdad del proceso para fijarnos como quedaría el
programa.
3. A continuación, en una USB se copio una carpeta en la cuál venía el
programa solo con los comandos, debimos haber visto el proceso y con eso
empezamos a programar cada uno de los pines del Arduino, aparte de que
se programo para el uso de switches pero en mi caso use un dipswitch.
4. Después de haber verificado que el programa compilara se procedió a
montar el circuito en la protoboard.
5. Por último se procedió a checar el circuito funcionando en la proboard y se
anotó los resultados.

43
Tabla de verdad
Fase 1:

Frijoles Aceite Agua Bomba Sensor Frijol Calor o Alarma


de de Resist. del
agua Aceite Térmica proceso

0 0 0 1 0 0 0 0

0 0 1 0 1 0 0 0

0 1 0 0 0 0 0 1

0 1 1 0 0 1 0 0

1 0 0 0 0 0 0 1

1 0 1 0 0 0 0 1

1 1 0 0 0 0 0 1

1 1 1 0 0 0 1 0

Fase 2:
Temperatura Presión Válvula Alarma
0 0 0 0
0 1 0 1
1 0 X X
1 1 1 0

Fase 3:
Resistencia Térmica Descarga
0 0
1 1

44
Diagrama del sistema de fabricación de Frijoles

Frijoles

Válvula de los frijoles

Sensor cuando está lleno


Sensor de Presión

Sensor a ½ de lleno
¼ de
Aceite
Mezcla de Frijoles,
Aceite y Agua Bomba del aceite

Resistencia Térmica
Agua

H2o

Bomba del agua

Sensor a ¾ de lleno

45
Diagrama de los sensores utilizados: Diagrama de los actuadores utilizados:

46
Procedimiento de la programación en Arduino
1) Se nombran las variables del proceso a programar y se declaran los pines
del Arduino
boolean S_AGUA, S_ACEITE, S_FRIJOL, S_DESCARGA, S_TEMPERATURA,
S_PRESION;
int AGUA=3, ACEITE=2, FRIJOL=4, DESCARGA=5, TEMPERATURA=6,
PRESION=7; //
int B_AGUA=11, B_ACEITE=12,V_FRIJOL=13, C_CALOR=10, C_ALARMA=9,
V_DESCARGA=8;
int FASE=1,SF1,SF2,SF3;
int F1_A,F2_A,F3_A;
2) Se declaran las entradas y las salidas
pinMode(AGUA,INPUT);
pinMode(ACEITE,INPUT);
pinMode(FRIJOL,INPUT);
pinMode(DESCARGA,INPUT);
pinMode(TEMPERATURA,INPUT);
pinMode(PRESION,INPUT);
pinMode(B_AGUA,OUTPUT);
pinMode(B_ACEITE,OUTPUT);
pinMode(V_FRIJOL,OUTPUT);
pinMode(C_CALOR,OUTPUT);
pinMode(C_ALARMA,OUTPUT);
pinMode(V_DESCARGA,OUTPUT)
3) Se establece el número de fases
int F1_A,F2_A,F3_A;
4) Se declaran los switch y el número de casos que implica la fase 1
void loop()
{
switch (FASE)

47
{
case 1:
F1_A=0;
while(F1_A==0)
{
sensorRead();
switch(SF1)
{
case 0: Serial.println("Fase 1 BOMBA DE AGUA ENCENDIDA");
digitalWrite(B_AGUA,HIGH);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,LOW);
break;
case 1: Serial.println("Fase 1 BOMBA DE ACEITE ENCENDIDA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,HIGH);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,LOW);
break;
case 2: Serial.println("Fase 1 ALARMA ENCENDIDA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,HIGH);
break;
case 3: Serial.println("Fase 1 VALVULA DE FRIJOL ABIERTA");
digitalWrite(B_AGUA,LOW);

48
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,HIGH);
digitalWrite(C_ALARMA,LOW);
break;
case 4: Serial.println("Fase 1 ALARMA ENCENDIDA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,HIGH);
break;
case 5: Serial.println("Fase 1 ALARMA ENCENDIDA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,HIGH);
break;
case 6: Serial.println("Fase 1 ALARMA ENCENDIDA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,HIGH);
break;
case 7: Serial.println("Fase 1 LISTA LA OLLA LLENA");
digitalWrite(B_AGUA,LOW);
digitalWrite(B_ACEITE,LOW);
digitalWrite(V_FRIJOL,LOW);
digitalWrite(C_ALARMA,LOW);
F1_A=1;

49
FASE=2;
delay(1000);
break;
5) Se declara la fase 2 con sus respectivos casos usando la tabla de verdad
case 2:

F2_A=0;
while(F2_A==0)
{
sensorRead();
switch(SF2)
{
case 0: Serial.println("Fase 2 CALEFACTOR ENCENDIDO");
digitalWrite(C_CALOR,HIGH);
digitalWrite(C_ALARMA,LOW);
break;
case 1: Serial.println("Fase 2 ALARMA ENCENDIDA");
digitalWrite(C_CALOR,LOW);
digitalWrite(C_ALARMA,HIGH);
break;
case 2: Serial.println("Fase 2 CALEFACTOR ENCENDIDO");
digitalWrite(C_CALOR,HIGH);
digitalWrite(C_ALARMA,LOW);
break;
case 3: Serial.println("Fase 2 CALEFACTOR ENCENDIDO");
digitalWrite(C_CALOR,LOW);
digitalWrite(C_ALARMA,LOW);
F2_A=1;

50
FASE=3;
delay(1000);
break;

}
}
break;
6) La última fase es declarada con sus casos
case 3:
F3_A=0;
while(F3_A==0)
{
sensorRead();
switch(SF3)
{
case 0:Serial.println("Fase 3 VALVULA DE DESCARGA
ENCENDIDA");
digitalWrite(V_DESCARGA,HIGH);
digitalWrite(C_ALARMA,LOW);
break;
case 1:Serial.println("Fase 3 DESCARGA COMPLETA ");
digitalWrite(V_DESCARGA,LOW);
digitalWrite(C_ALARMA,LOW);
F3_A=1;
FASE=1;
delay(1000);
break;

51
}
break;
}
}
7) Por último, se establece las lecturas de los valores introducidos al inicio del
código y se establecen parámetros para que las fases se respeten por el
programa, aparte de que se la indicación al programa de que vuelva a
iniciar
void sensorRead()
{
S_AGUA=digitalRead(AGUA);
S_ACEITE=digitalRead(ACEITE);
S_FRIJOL=digitalRead(FRIJOL);
SF1=0;
if(S_AGUA==1){SF1=SF1+1;}
if(S_ACEITE==1){SF1=SF1+2;}
if(S_FRIJOL==1){SF1=SF1+4;}
S_TEMPERATURA=digitalRead(TEMPERATURA);
S_PRESION=digitalRead(PRESION);
SF2=0;
if(S_TEMPERATURA==1){SF2=SF2+1;}
if(S_PRESION==1){SF2=SF2+2;}
S_DESCARGA=digitalRead(DESCARGA);
SF3=0;
if(S_DESCARGA==1){SF3=SF3+1;}
} //Termina el proceso y vuelve iniciar

52
Significado de funciones en la programación

Función Significado Función Significado


Boolean; Se nombran las S_AGUA Sensor de agua
variables
Int; Salida de los S_ACEITE Sensor de aceite
pines en el
Arduino
Void setup; Aquí inicia la S_FRIJOL Sensor de frijol
programación

Serial begin; Establece la S_DESCARGA Sensor de


comunicación con descarga
la computadora
pinMode; Establece si un S_TEMPERATURA Sensor de
pin va a ser salida temperatura
o entrada
OUTPUT Salida S_PRESION Sensor de
presión
INPUT Entrada B_AGUA Bomba de agua
Swicht (Fase) Declara que la V_FRIJOL Válvula de frijol
fase iniciará con
un switch
Case Caso que C_CALOR Control de calor
declarar
While Mientras o C_ALARMA Control de alarma
entretanto ocurre
algo
Break Termina un V_DESCARGA Válvula de
evento o cas descarga
Serial.printl Nombre de la
etapa o fase
digitalWrite Determina el valor
si es alto o bajp
HIGH Alto

53
LOW Bajo
Delay Pausa el
programa en
milisegundos
SensorRead Lee los sensores
que van a ser
incluidos en el
programa
Void Establece la
SensorRead lectura e inicio de
los parámetros de
los sensores

54
Resultados:
El proceso implementado en la protoboard fue un éxito, tal parece ser que el
sistema funcionó a la perfección, había unos pequeños retrasos al abrir el
programa pero fue solucionado cambiando los datos de programación y
optimizando el sistema a un 87% ya que el sistema tardaba en ser compilado, esto
se debió al extenso código que se generó para el proceso.
Sin más demoras el sistema logro cumplir su objetivo, y pudimos observar como
se comportaba el sistema.

55
Anexos del reporte:

Imagen 1.1. En esta imagen se puede observar que el primer led está prendido lo
que indica que el proceso de los frijoles está iniciándose, en otras palabras, se
está llenando el tanque de agua.

Imagen 1.2. En está imagen se puede observar que si se activa la válvula de


aceite sin ante llenarse se activa la alarma.

Imagen 1.3. Si el proceso continúa normal como es el agua con aceite se activa el
led de aceite, lo que indica que el proceso debe continuar.

56
Imagen 1.4. Si no hay aceite y se activa la válvula de los frijoles hace que salté la
alarma del proceso.

Imagen 1.5. Si se agregan los 2 elementos correctamente se activa la válvula de


los frijoles que da a indicar que la olla se esta llenando y por lo tanto llegará a su
capacidad máxima.

Imagen 1.6. Al cerrar la válvula de los frijoles se activa el calefactor el cual


ayudará adquirir la presión y la temperatura deseada.

57
Imagen 1.7. Si hay presión y no hay temperatura salta la alarma

58
Reporte del curso de verano 2018
Reporte de la práctica del semáforo

E15021097
Ing. Julio Ávila Hernández
11:00 am a 13:30 pm
7F5B
Verano 2018
Aula T006
Microcontroladores

59
Introducción
Los semáforos, también conocidos técnicamente como señales de control de
tráfico,1 son dispositivos de señales que se sitúan en intersecciones viales y otros
lugares para regular el tráfico, y por ende, el tránsito peatonal. Se instaló el primer
semáforo, diseñado por John Peake Knight, en Londres en 1868.
El auge de las señales de tráfico está ligado al rápido aumento del tráfico
automovilístico, sobre todo en Estados Unidos después de que Henry Ford
introdujo el modelo T en 1908 y lo comenzó a producir en mesa a partir de 1913.
Por primera vez, los coches eran baratos y lo suficientemente confiables para los
desplazamientos en una mesa.
La palabra "semáforo" es de origen griego: «σῆμα (sema)», que significa señal, y
«φόρος (foros)», que significa portador, es decir, semáforo es lo que "lleva las
señales".3
En castellano, desde hace siglos, se llamaba semáforos a las torres de señales
que se extendían por todo el territorio, desde las que por medio de señales ópticas
(luces de noche, banderas de colores de día) se comunicaban las noticias
importantes, más deprisa que con caballo al galope.
También a las estaciones desde las que se trasmitían las señales del telégrafo
óptico establecido en las costas,en los puertos, cuyo objeto era dar a conocer las
llegadas y las maniobras de los buques que venían de alta mar o navegaban a la
vista o bien darles a conocer avisos urgentes por medio de bolas o de banderas o
recibirlos de ellos. El semáforo consistía en un elevado mástil en el cual los vigías
efectuaban las señales por medio de travesaños con las expresadas bolas o bien
con banderas y si era de noche, con linternas. Por lo general, los semáforos
estaban en comunicación con las estaciones telegráficas cercanas.
Actualmente un semáforo se puede considerar un dispositivo mecánico o eléctrico
que regula el tráfico de vehículos y peatones en las intersecciones de caminos.
Actualmente la Real Academia Española define al semáforo como:
[…] Aparato eléctrico de señales luminosas para regular la circulación. […]

60
Marco teórico
Viendo las consecuencias del tráfico vehicular se ha realizado investigaciones de
las cuales algunas ya se implementaron, para mejorar el flujo de vehículos en las
vías; entre estas investigaciones todos tienen un fin común, que es el de reducir, y
poder controlar el congestionamiento vehicular usando sensores y cámaras para
que de esa manera el sistema controle el tiempo de cada semáforo
automáticamente, enviando la información a una central, además de que afirman
que permitirá registrar un ahorro de combustible del 15%, también está la empresa
francesa “SAGEM” que ya está ofreciendo este producto a la venta, así también
como en Brasil en la “Companhia de Engenharia de Tráfego (CET).
Aunque pocos, existen en nuestro país semáforos exclusivos para las personas
que caminan; son los llamados semáforos peatonales. A diferencia del vehicular,
están compuestos solamente de dos luces: roja y verde. Las figuras que tienen
estos semáforos son de gran ayuda para los peatones, en especial para los niños
pequeños, pues el color y los dibujos nos indican qué hacer.
Luz roja
Indica DETENCIÓN. Los peatones no deben bajar de la calzada ni cruzar. La
figura está en actitud de ALTO.
Luz verde
Indica SIGA. Al peatón le está permitido cruzar la calzada. La figura nos indica que
se puede cruzar la calzada por el paso de peatones. Cuando la luz verde se torna
intermitente, se acaba el tiempo para cruzar. ¡No cruces, espera! Pero si ya estás
cruzando, debes terminar de hacerlo con mucha precaución.
El semáforo es la tercera señal con mayor prioridad, únicamente por detrás de los
agentes y las señales de balizamiento y circunstanciales.
Los semáforos son señales luminosas que indican quién debe pasar o detenerse,
en el caso de un peatón cuándo debe cruzar una calle o en el caso de un
conductor cuándo debe esperar porque es el turno de los peatones o cuándo
circular.

61
Lista de materiales usados en el proyecto
 Arduino ONE/Genuino
 Protoboard
 10 LEDS de colores (ROJO, AMARILLO, VERDE)
 Cables dupont
 Resistencias de 330 ohms
 Cable de transferencia de datos
 Laptop
 Programa Aduino

62
Desarrollo del proyecto
1. Primero se observó cómo funciona un semáforo y de igual manera que el
proceso de desarrollo de frijoles se trazó un dibujo y su diagrama del
semáforo.
2. Después de observo que el programa del semáforo sería un problema,
pero poco a poco se sintetizó el programa,
3. Poco a poco se fue estableciendo el programa en el Arduino, se verificó si
el programa compilaba.
4. Después de la compilación se procedió a cargar el programa en el Arduino
5. Se verifico el correcto funcionamiento a la hora de cargar el sistema.
6. Se armó el circuito en la protoboard.
7. Se checó el correcto funcionamiento del semáforo y se anotó las
conclusiones.

Fotografía 1) Fotografía 2)
En esta fotografía se logra observar el En esta segunda fotografía se
semáforo en funcionamiento, sincronizó los tiempos para poder
empezando por la primera parte de añadir el último semáforo que es el de
J.P. Silva M. A. de Quevedo(NORTE-SUR)

63
Dibujo esquemático del problema

M. A. Quevedo (NORTE)

M. A. Quevedo (SUR)

J. P. Silva (SUR-NORTE)

64
Diagrama del funcionamiento del semáforo

65
66
Programación del semáforo
1) Se declaran las variables en los pines y se les pone nombre a esas mismas
variables.
int VERDE1=11, AMAR1=12, ROJO1=13, VERDE2=10, AMAR2=8, ROJO2=9,
VERDE3=7, AMAR3=6,ROJO3=5, FLECHA=4; // Declaramos las salidas
int FASE=1,X,Y,Z;
2) Inicia la fase de programación
void setup()
{ //Rutina de configuración
Serial.begin(9600); //Comunicación serie en 9600 Baudios

pinMode(VERDE1,OUTPUT);
pinMode(VERDE2,OUTPUT);
pinMode(VERDE3,OUTPUT);
pinMode(AMAR1,OUTPUT);
pinMode(AMAR2,OUTPUT);
pinMode(AMAR3,OUTPUT);
pinMode(ROJO1,OUTPUT);
pinMode(ROJO2,OUTPUT);
pinMode(ROJO3,OUTPUT);
pinMode(FLECHA,OUTPUT);
}
3) Se empieza con la primera fase
void loop()
{
Serial.print("FASE=");
Serial.print(FASE);
switch (FASE)
{

67
//Semaforo 1

case 1:

digitalWrite(ROJO1,LOW);
digitalWrite(ROJO2,HIGH);
digitalWrite(ROJO3,HIGH);
digitalWrite(VERDE1,HIGH);
delay(20000);
FLASH(VERDE1);
digitalWrite(AMAR1,HIGH);
delay(2000);
digitalWrite(AMAR1,LOW);
digitalWrite(ROJO1,HIGH);
digitalWrite(ROJO2,LOW);
digitalWrite(ROJO3,HIGH);

FASE=2;
break;
4) Se empieza la segunda fase
case 2:

digitalWrite(ROJO1,HIGH);
digitalWrite(ROJO2,LOW);
digitalWrite(ROJO3,HIGH);
digitalWrite(VERDE2,HIGH);
delay(25000);
FLASH(VERDE2);

68
digitalWrite(AMAR2,HIGH);
delay(2000);
digitalWrite(AMAR2,LOW);
digitalWrite(ROJO2,HIGH);
digitalWrite(ROJO1,HIGH);
digitalWrite(ROJO3,LOW);
digitalWrite(ROJO3,LOW);
digitalWrite(ROJO2,HIGH);
digitalWrite(ROJO1,HIGH);
digitalWrite(VERDE3,HIGH);
digitalWrite(FLECHA,HIGH);
delay(30000);
FLASH(VERDE3);FLASH(FLECHA);
digitalWrite(AMAR3,HIGH);
delay(2000);
digitalWrite(AMAR3,LOW);
digitalWrite(ROJO3,HIGH);

//Semaforo 2 y 3
FASE=1;

break;

}
}
5) Por último, se establecen los parámetros del comando FLASH
void FLASH(int LED)
{

69
for(int F1=0; F1<=4; F1++){
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
}
6) Se reinician las fases

70
Resultados
El proceso implementado en la protoboard fue un éxito, tal parece ser que el
sistema funcionó a la perfección, había unos pequeños retrasos al abrir el
programa, pero fue solucionado cambiando los datos de programación y
optimizando el sistema a un 87% ya que el sistema tardaba en ser compilado, esto
se debió al extenso código que se generó para el proceso.
Sin más demoras el sistema logro cumplir su objetivo, y pudimos observar cómo
se comportaba el sistema.

71
Contenido adicional: Libreta de
apuntes

72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Conversión analógica a digital
La diferencia entre una señal analógica y digital es que la señal digital únicamente
tiene dos valores y la señal analógica puede tener una serie infinita de valores, por
ejemplo, si nosotros queremos medir la temperatura que se encuentra en el
procesador de frijoles sabemos que la temperatura va avanzando desde los 25°C
temperatura ambiente hasta los 110°C entonces nos damos cuenta que la
temperatura no tiene un cambio radical de 25 a 110°C si no que lentamente va
cambiando su valor dependiendo de la resolución que nosotros queramos
podemos decir que la temperatura se incrementa en fracciones de un 1° o 0.1° o
0.01° y así sucesivamente podemos llegar hasta el infinito teóricamente pero en la
practica tenemos limites, entonces ese limite lo determina la calidad del equipo
que medirá la temperatura entonces la señal que obtenemos es una señal
analógica también llamada una señal continua.
Si quisiéramos mostrar la temperatura para que un usuario la pueda observar lo
podemos hacer de 2 formas, en forma analógica o en forma digital, para esta
representación en forma analógica se acostumbra a usar lo que se llama display
de reloj donde la manecilla se mueve en forma continua al variar la temperatura y
la aguja indica en una escala el valor correspondiente en ese momento, este
instrumento lo podemos llamar termómetro analógico como el que se muestra en
la siguiente figura:

Si quisiéramos mostrar la temperatura en forma digital nos encontramos con un


problema, una señal digital únicamente tiene dos valores por lo tanto tendremos
que utilizar varias señales digitales y asignarles a cada una de ellas un peso
especifico cuyo valor de derecha a izquierda sería: 1,2,4,8,16,32……1024, esto
quiere decir que la lectura que obtendríamos digital no sería una lectura continua
sino que seria una lectura escalonada, si por ejemplo nuestra señal de
temperatura varía de 0°C a 110°C como máximo, tendríamos que fraccionar ese
rango de valores a 1024 partes entonces tendríamos 110/1024=0.107°C ese sería
la resolución que tendríamos con un convertidor analógico a digital de 10 bits, para
realizar este proceso, tendríamos que convertir la señal de temperatura en un

87
señal de voltaje pero cuyo máximo
valor de voltaje no exceda el valor
que el micro controlador Arduino
permita en sus entradas analógicas
cuyo valor máximo es de 5V. Si
tuviéramos un sensor de
temperatura que convierta de 0°C a
110°C de 0 a 5V entonces
podríamos hacer la siguiente
relación 5V equivaldría al máximo
valor digital obtenido con 10 bits que es igual a (2n-1) este sería el máximo valor
que el convertidor analógico-digital nos entregaría cuando la entrada sea 5V y la
temperatura sea 110°C, entonces el microcontrolador haría el siguiente cálculo: Si
110°C equivale a 1023 que es la señal digital, cuando la señal digital vale 1 es
0.107°C será la mínima fracción de temperatura que podríamos medir, por ejemplo
el Arduino duo tiene un convertidor analógico a digital de 12 bits ¿Cuál sería la
mínima fracción que se podría obtener? La respuesta sería 0.0268, como
podemos observar al aumentar el numero de bits aumentaría la fracción mínima
que podemos medir, a esta mínima fracción se le ha dado el nombre de resolución
de convertidor lógico a digital.

Como ejemplo colocaremos un potenciómetro de 5 a 10 komhs para que girar el


potenciómetro en sentido horario el voltaje aumente de 0 a 5V en la entrada
analógica A0 y al girar en sentido antihorario el voltaje baje de 5 a 0V, entonces el
central del potenciómetro vaya al pin A0 y las otras dos terminales una a la de 5V
y la otra a la tierra.
Esta conexión aparentemente es muy sencilla, pero es muy común quemar el
potenciómetro en esta práctica ya que si conectan un extremo a VCC y el central a
tierra por equivocación cuando giren el potenciómetro a su mínima valor de
resistencia o queman el potenciómetro o queman la fuente de Arduino

Programación
Para programar la lectura del convertidor analógico-digital tenemos que declarar
una variable, como la variable es entera y va de 0 a 1023 sin signo esta variable
obtendrá en valor digital que le entregará al convertidor analógico digital utilizando
la función “analogRead” que tiene la siguiente sintaxis:
analogRead(pin)
de tal forma que si declaramos una variable. Unsigned int entonces la lectura del
convertidor analógico digital será para la entrada A0.
Sería temp=analogRead(A0)

88
Entonces como primera prueba obtendremos la lectura del valor obtenido al hacer
la lectura del convertidor analógico digital al movimiento del potenciómetro.

SOFTWARE SERIAL
Existe dos tipos de comunicación serie en los microcontroladores de cualquier
marca la transmisión por hardware y la transmisión por software como describimos
a continuación
COMUNICACIÓN SERIE POR HARDWARE
La comunicación por serie por hardware es la más rápida y eficiente esto es que
en el microcontrolador hay un circuito especializado en la transmisión denominado
UART que significa UNIVERSAL ASINCRONOS RECIEVER AND TRANSMITER
esto es un transmisor receptor universal asíncrono, cuando se quiere mandar un
carácter a través del UART con la instrucción serial.print esta instrucción le manda
el carácter del UART y este se encarga de transmitirlo, después del pronto el
usuario puede seguir su programa de forma normal. Los micros de Arduino UNO
solo traen un UART pero lo utilizan para la comunicación con la PC y para
programar el Arduino, sin embargo el MEGA cuenta con 3 UART (foto del Arduino)

COMUNICACIÓN POR SOFTWARE


Cuando no se tiene UARTS embebidos en el sistema como en el Arduino UNO ya
que lo utilizamos para la programación entonces nos veremos en la necesidad de
utilizar lo que se denomina SOFTWARE SERIAL, el software serial simula el
comportamiento de un UART y la comunicación la hace por medio de software
pero limita la velocidad de transmisión ya que todo el proceso lo hace mediante el
programa, por lo que el usuario no puede hacer nada mientras se esté
transmitiendo y el tiempo de espera seria el siguiente:
Si la transmisión serie se hace a 9600 bous o sea 9600 bits por segundo y la
transmisión se hace en 8 bits más un bit de inicio llamado start bit y otro de paro

89
llamado stop bit ya suman 10 bits de trasmisión, entonces trasmitir un carácter de
8 bit nos llevaría 1.040 milisegundos por lo tanto cuando se transmite el software
serial con la instrucción “Alexis Esteban Rodriguez S.” (A). Esta instrucción se
llevará acabo 1.040 milisegundos ya que ese tiempo que se tarda en enviar un
carácter de 8 bits esto tratándose del transmisor, el receptor tardara el mismo
tiempo en recibirlo, es necesario considerar estos tiempos de recepción y
transmisión para establecer una buena comunicación. Para programar el serial
software se utilizará la librería software serial.

90
Conclusión
Al finalizar el curso aprendí una gran variedad de cosas sobre el pequeño
microcontrolador del Arduino, sobre todo como usarlo, puesto que nunca había
tenido la oportunidad de usar esta maravillosa herramienta para facilitar los
procesos sin supervisión del hombre, a lo largo del curso pude observar que a
esta placa se le pueden asignar diferentes tareas que se ejecutan con una
programación no muy compleja, todo es cuestión de saber usar el programa, aún
me queda mucho por aprender y espero que pronto pueda utilizar esta
herramienta como un verdadero experto.
El curso de verano me pareció muy interesante ya que es una materia interesante
y me parece una gran herramienta el Arduino que nos funcionará más adelante a
lo largo de la carrera de Ing. Mecatrónica.

91
Anexos

Bibliografia:
www.wikipedia.com
www.google.com

92
www.historiadelosmicro.com
www.ricondelaelectronica.com
www.enciclopediagratis.com
www.electronicaavanzada.com
www.google.com/imagenes
www.youtube.com.mx
www.electronicabasica.com
www.tuespaciodeprogramacion.com

93

Vous aimerez peut-être aussi