Practica 3 Calculadora Arduino
Practica 3 Calculadora Arduino
Calculadora
Prof. Victor Manuel Fuentes Olivares
[email protected]
1. ___________________________________
Contenido
• Introducción
• Objetivos
• Actividades
• Evaluaciones
• Conclusiones
Introducción
Microcontroladores programables.
Un microcontrolador contiene toda la estructura (arquitectura) de un sencillo pero completo
computador contenidos en el corazón (chip) de un circuito integrado. Los resultados de tipo
práctico, que pueden lograrse a partir de estos elementos, son sorprendentes.
Se trata de un circuito integrado de alta escala de integración que incorpora la mayor parte de los
elementos que configuran un controlador. Se dice que es “la solución en un chip” porque su
reducido tamaño minimiza el número de componentes y el coste.
Según el modelo de microcontrolador que se trate, el tamaño y el tipo de memoria pueden diferir,
así como el número de líneas de E/S y los módulos de control de periféricos. La diversificación de
modelos permite seleccionar el más adecuado según la aplicación de que se trate. Una estructura
interna fija supone una limitación, que se convierte en una ventaja en el caso de que en un simple
circuito integrado residan todos los componentes que necesita el controlador.
La única limitación que tienen las aplicaciones de los microcontroladores actuales está en la
imaginación del diseñador. Los campos más destacados en los que se emplean
microcontroladores son los siguientes:
Automatización industrial.
Medida y control de procesos.
Enseñanza e investigación.
Periféricos y dispositivos auxiliares de las computadoras.
Electrodomésticos.
Aparatos portátiles y de bolsillo.
Máquinas expendedoras y juguetería.
Instrumentación.
Industria de la automoción.
Electromedicina.
Robótica.
Sistemas de navegación.
Sistemas de seguridad y alarma.
Domótica.
Termorregulación.
La industria de la informática acapara gran parte de los microcontroladores que se fabrican. Casi
todos los periféricos de un ordenador, desde el ratón hasta la impresora o el teclado, son regulados
por el programa de un microcontrolador.
Los electrodomésticos de gama blanca (lavadoras, hornos, lavavajillas, etc.) y de línea marrón
(televisores, vídeos, aparatos musicales, etc.) incorporan numerosos microcontroladores.
Igualmente, los sistemas de supervisión, vigilancia y alarma en los edificios utilizan estos chips
para optimizar el rendimiento de ascensores, calefacción, aire acondicionado, alarmas de incendio
y robo, etc.
La configuración de Harvard resulta ser una buena elección para las aplicaciones embebidas y el
chip Atmega 328 usado en el UNO de Arduino utiliza una arquitectura relativamente pura de
Harvard.
Los programas se almacenan en la memoria Flash y los datos se almacenan en SRAM.
El resto de componentes de la placa Arduino sirven para regular voltajes, su gestión en las
diferentes salidas, y conexiones y buses que interconectan otros componentes para la
comunicación.
A continuación, se pueden ver las características de los diferentes tipos de memoria más utilizadas.
Memoria Características
ellas en un único chip de forma barata. A cambio tiene que ser refrescadas cada
poco, lo que complica el diseño con mecanismos de refresco de la memoria ( Por
supuesto fuera de los ojos del orgullosos propietario)
ROM Read Only Memory, son no volátiles, pero solo se pueden leer, no escribir.
Electically Erasable Programable Read only Memory Son igual que las PROM,
pero con la curiosidad que se pueden reescribir eléctricamente lo que evita el
EEPROM
engorro de llevarlas a reprogramar a maquinas raras. A cambio son lentas de
escribir y tienen un número limitado de escrituras antes de morir.
En un registro interno del microcontrolador se encuentran 5 opciones diferentes de reloj que son
seleccionadas por medio de un Multiplexor.
La señal de reloj es distribuida por la unidad de control a los diferentes bloques existentes: la CPU,
las memorias, los módulos de entrada/salida, los contadores/timers, el SPI y la USART, al igual
que el conversor Análogo Digital ADC.
El tamaño de la memoria Flash de Arduino puede variar dependiendo del microcontrolador, aunque
no es muy grande. Por ejemplo, para el chip ATmega168 el tamaño de la memoria Flash es de 16
kilobytes, de los cuales 2 kilobytes son utilizados por el bootloader. Para el caso del
microcontrolador ATmega328 (como el que incorpora Arduino UNO) el tamaño de la memoria
Flash es de 32KB, de los cuales el bootloader usa 0,5KB. Por lo que debemos desarrollar los
programas de forma muy optimizada, usando los tipos de variables que menos memoria requieran,
en la medida de lo posible. También debemos optimizar el código fuente de la aplicación para no
repetir líneas de código.
La memoria flash se utiliza para almacenar la imagen del programa y cualquier información
inicializada. Puede ejecutar código de programa desde flash, pero no puede modificar los datos en
la memoria flash de su código de ejecución. Para modificar los datos, primero se debe copiar en
SRAM.
La memoria flash es la misma tecnología utilizada para las unidades de pulgar y tarjetas SD.
La memoria Flash tiene una vida útil limitada de unos 100.000 ciclos de escritura. Así que, si subes
10 programas al día, todos los días durante los próximos 27 años, podrías agotarlo.
El asignador de memoria implementado en avr-libc intenta hacer frente a todas estas restricciones,
y ofrece algunas opciones de ajuste que se pueden usar si hay más recursos disponibles que en la
configuración predeterminada.
Memoria SRAM (Static Random Access Memory ó memoria estática de acceso aleatorio) en
Arduino
La memoria SRAM de Arduino es muy pequeña, por lo que debemos optimizar nuestros programas
al máximo y no abusar de variables de tipo char muy grandes. Hay que tener en cuenta que cada
carácter de una variable char utiliza un byte. En el microcontrolador ATmega 168 el tamaño de la
memoria SRAM es de 1024 bytes, para el caso de un chip ATmega328 (como el que incorpora
Arduino UNO) el tamaño es de 2KB (2048 bytes).
Si la SRAM se queda sin espacio, el programa de Arduino fallará de forma imprevista, aunque se
compile y se suba a Arduino correctamente la aplicación no se ejecutará o se ejecutara de manera
extraña.
Variables locales, datos parciales. Usualmente se trata como banco de registros (PIC), Memoria
volátil. Donde el sketch crea y manipula las variables cuando se ejecuta.
Datos estáticos - Este es un bloque de espacio reservado en SRAM para todas las variables
globales y estáticas de su programa. Para las variables con valores iniciales, el sistema de
ejecución copia el valor inicial de Flash cuando se inicia el programa.
Heap - El montón es para elementos de datos asignados dinámicamente. El montón crece desde la
parte superior del área de datos estáticos hasta que se asignan los elementos de datos.
Stack - La pila es para variables locales y para mantener un registro de interrupciones y llamadas
de función. La pila crece desde la parte superior de la memoria hacia abajo hacia el montón. Cada
interrupción, llamada de función y / o asignación de variable local hace que la pila crezca. Al
regresar de una llamada de interrupción o de función, se recuperará todo el espacio de pila
utilizado por esa interrupción o función.
El tamaño de la EEPROM para un chip ATmega128 es de 512 bytes, para un chip ATmega328 es
de 1KB (1024 bytes). Hay que tener en cuenta que el tamaño de la memoria EEPROM interna de
Arduino es "pequeño" pero Arduino admite añadir módulos de memoria EEPROM externa de
mayor tamaño.
Se puede grabar desde el programa del microcontrolador. Usualmente, constantes de programa.
Memoria no volátil para mantener datos después de un reset. Las EEPROMs tienen un número
limitado de lecturas/escrituras.
Una desventaja de la memoria EEPROM es que es mucho más lenta que la memoria SRAM. El
proceso de escritura de una celda (byte) cuesta en torno a 3.3 ms. El proceso de lectura es mucho
más rápido (aunque sigue siendo más lento que la SRAM), leer 1024 bytes cuesta en torno a
0.3ms, es decir, 10.000 veces más rápida que la escritura.
Objetivos
• Utilizar dispositivos los puertos de entrada y salida de Arduino como
interfaz de datos para controlar la información que aparece en un display.
• Analizar el bus de datos de Arduino como instrumento de análisis para el envió de
información.
• Comprender la dificultad de obtener resultados esperados si se desconocen las
características técnicas de los dispositivos.
Lista de Materiales
Simulador PROTEUS
potenciómetro (resistencia variable). O resistencia de 1Kohm
Datasheet de Teclado matricial
Datasheet Display
Actividades:
NOTA: En caso de no aparecer la librería, solicitar al profesor los archivos para agregarla.
6.- Agregar un potenciómetro (Resistencia Variable): POT DEVICES
#include <Keyboard.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', '-'},
{'4', '5', '6', '*'},
{'7', '8', '9', '/'},
{'X', '0', '=', '+'}
};
void setup(){
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("@Unitec");
lcd.setCursor(0,1);
lcd.print("@Calculadora");
delay(2500);
lcd.clear();
}
void loop(){
char key = myKeypad.getKey();
if (key != NO_KEY && (key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
if (valorActual != true){
num1 = num1 + key;
int numLength = num1.length();
movimiento = numLength;
lcd.setCursor(0, 0);
lcd.print(num1);
}
else {
num2 = num2 + key;
int numLength = num2.length();
lcd.setCursor(movimiento+1, 0);
lcd.print(num2);
final = true;
}
}
else if (valorActual == false && key != NO_KEY && (key == '/' || key == '*' || key == '-' || key == '+')){
if (valorActual == false){
valorActual = true;
op = key;
lcd.setCursor(movimiento,0);
lcd.print(op);
}
}
12.- Ejecutamos Play en Proteus, debe aparecer la siguiente pantalla de simulación, probar el
funcionamiento con operaciones básicas
Nota: El programa acepta valores y da resultados máximos de 4 dígitos y solo números
enteros.
13- Llenar la siguiente tabla para determinar el tiempo de ejecución del programa.
Nota: Cuando el microcontrolador ejecuta una instrucción que definimos en el sketch, internamente
hace muchas operaciones y cada una de esas operaciones se ejecuta en un ciclo de reloj. Para el
ATmega 328p que tiene una frecuencia de 16 MHz, es decir, cada ciclo tarda 0,0000000625
segundos = 0,0625 microsegundos = 62,5 nanosegundos
Frecuencia=ciclos/tiempo
Tiempo=ciclos/frecuencia
14.- Revisa cual es el tamaño del archivo creado en Arduino y comenta donde se guarda el archivo
de acuerdo con la arquitectura Harvard.
Nota: Para revisar debes compilar el código Arduino y revisar los resultados
Ejemplo:
15.- De acuerdo con el siguiente esquema, comenta cual fue el proceso ejecutado por el bus de
datos para crear el letrero en Arduino.
4.- ¿Cuál es la memoria que permite reescribir eléctricamente, es lenta de escribir y tienen un
número limitado de escrituras?