Objetivos
Material requerido
Paciencia y 20 minutos de sobra. |
De los modelos de Arduino y sus características
Ya es hora de que empecemos a hablar de los diferentes modelos de Arduino disponibles, y en qué consisten sus diferencias. Pero para comprenderlas correctamente, necesitamos conocer, además los diferentes procesadores y lo que les diferencia, así como las memorias de que cada modelo dispone, el tipo y su cantidad.
Y como este es un curso pensado para iniciarse desde cero, ha llegado el momento de hacer un pequeño resumen de procesadores y memorias, sus diferencias y el porqué de unas y otras. Poneros cómodos.
Haciendo un poco de historia (poco, tranquilos), el primer micro procesador con derecho a llamarse así, fue el Intel 8080 allá por los finales de los años 70.
Fue el primer chip, que integraba todo lo necesario para construir una unidad central de proceso (o CPU por sus siglas en ingles), en un único chip, y a su alrededor se construyeron los primeros ordenadores personales sin más que añadir memoria y elementos de entrada /salida).
Para no ponerme pesado, diré simplemente, que aquel modelo basado en CPU, memoria e I/O (Input Output) ha seguido vigente hasta hoy, en lo que conocemos como PCs.
Los números han crecido exponencialmente, claro, pero el modelo conceptual sigue siendo el mismo, desde el 8080 hasta los modernos Intel I7.
Modelo | IBM PC 1981 | Intel I7 | Multiplicador |
---|---|---|---|
Velocidad reloj | 8.8 MHz | 2.4 GHz | x300 |
Memoria RAM | 128 kB – 640 kB | 4 Gb – 64 Gb | x2.000 |
Disco duro | 500 kB | 4 Tb | x2.000.000 |
Bus datos | 8 | 64 | x8 |
Los procesadores han tenido un periodo de expansión infinita, pero siguen teniendo los mismos problemas que el primer día:
- No tiene conexión, ni influencia en el mundo físico. ¿Te imaginas encender unos LEDs, o mover un motor con tu PC? No es imposible, pero no sabríamos por dónde empezar.
- Podemos guardar datos en los cada día más enormes discos duros, pero los programas deben ejecutarse desde memoria RAM, y esto ha sido un cuello de botella, con los modernos sistemas operativos como Windows u OSX, que devoran ansiosamente, cuanta memoria tengas instalada.
- En cuanto pierdes la alimentación, la RAM vuela y tus datos salen por el desagüe, si no has tenido la precaución de salvar a disco periódicamente.
- Los microprocesadores modernos se han diseñado para ser rapidísimos haciendo cálculos complejos, y han alcanzado una capacidad tal, que sencillamente hace mucho que se sobrepasó lo que un usuario normal necesita, y les ha costado algunos años darse cuenta.
Entre tanto y en paralelo, pequeños fabricantes, a los que difícilmente conoce el público, han ido generando pequeños procesadores, menos ambiciosos, pero más dirigidos a resolver un tipo de problemas que Intel, AMD y alguno otro ignoraban. (Evito conscientemente el tema de los procesadores de teléfonos móviles, porque abriríamos una puerta que se sale de lo que nos atañe ahora mismo)
Es lo que se ha dado en llamar la computación física, en la que el resultado del cálculo no es solo un resultado numérico, sino una operación física que se traslada al mundo real.
Uno de esos fabricantes es ATMega, y nuestros Arduinos están construidos a partir de uno de sus procesadores: UN AT328 para el Arduino UNO. Y que se vende en dos encapsulados:
Podéis encontrar Arduinos UNO con ambos modelos y su única diferencia es el encapsulado plástico que los recubre, aunque el del primer tipo se suele montar en un zócalo, para poderlo reemplazar cuando le hagáis algo que no deberías.
Sus especificaciones técnicas son en principio modestas, comparándolos con los últimos procesadores de Intel,
Un procesador de 8 bits,16 MHz de reloj,32k de memoria FLASH y algo de memoria SRAM, 2K mas 1.024 posiciones de memoria EEPROM (Ahora entendéis porque vamos a tener que hablar de los tipos de memoria).
Pero tienen la curiosidad de incorporar pines digitales que pueden sentir y comandar el mundo exterior, (a los que los seguidores de estas sesiones están ya más que habituados) además de convertidores analógicos a digital (ADC)
Es la mezcla de estas características la que le dan a los procesadores como el de nuestro Arduino (a los que por cierto se les llama PICs), la capacidad que muestran. Son ordenadores completos, con procesamiento, memoria y entrada y salida. No demasiado potentes pero que pueden hacer trabajos periféricos, para los que las grandes estrellas de Intel o AMD, no disponen de recursos.
Enseguida hablaremos de los diferentes procesadores de nuestros modelos de Arduino, pero antes tenemos que hablar de memoria.
Tipos de memoria de ordenador
Es un modelo útil imaginar la memoria del ordenador, como en una hilera de cajas o cajones, todos del mismo tamaño que están numerados de 0 a la n, donde n es el tamaño de nuestra RAM. Cuando enciendes el ordenador lo primero que hace nuestra CPU en cuanto se despierta es salir corriendo al cajón 0, ver que instrucción tiene allí y ejecutarla. Después con el deber cumplido salta al siguiente cajón, el 1, lee la orden y la ejecuta, después salta al cajón 2 y……
Las primeras instrucciones que tiene en el cajón 0, se llaman boot strap (que es algo así como el cordón de arranque de un motor), en nuestro caso son las instrucciones que le enseñan a interpretar el modelo Arduino, para aceptar nuestros programas. Cuando termina con esto, el boot strap le dirige directamente a nuestras instrucciones y por eso los ordenadores ejecutan las órdenes en secuencia, porque sencillamente no saben hacerlo de otro modo, a no ser que nosotros les ordenemos saltar a otros cajones en función de las condiciones que les especifiquemos.
En los primeros ordenadores, solo había dos tipos de memoria: RAM y ROM, pero ya sabéis que las cosas tienden al caos y las todo se han ido complicando desde entonces.
Todo lo que ejecutamos en nuestros PCs debe estar almacenado en memoria RAM o Random Access Memory. Se suele traducir por memorias de acceso aleatorio. . Se pueden leer y escribir (lo ideal, vamos) pero tienen la mala costumbre de borrase cuando les quitan la corriente.
Cuando arrancas tu PC ya sabe hacer algunas, como leer el boot strap y por tanto, esto no puede estar en RAM (Se habría perdido al apagar), eso está en ROM.
Las memorias ROM, o Read Only Memories, como su nombre indica son de solo lectura y no se pueden escribir más que por el fabricante cuando las construye.
Tradicionalmente una sabia combinación de memorias RAM y ROM han permitido todo el desarrollo de la microinformática, pero pronto empezaron las variedades:
Memoria | Características |
---|---|
RAM | Se pueden leer y escribir pero son volátiles |
DRAM | Dynamic Random Access Memory,Son las memoria típicas de los PCs. Se construyen a base de condensadores y se pueden integrar cantidades ingentes de 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) |
SDRAM | Synchronous Dynamic Random Access MemoryComo las DRAM, pero el mecanismo de refresco es síncrono |
DDR | Double Data Rate Synchronous Dynamic Random Access Memory.Estas son las actuales memorias utilizadas en los PCS de sobremesa. Actualmente están en la versión DDR4 |
ROM | Read Only Memory, son no volátiles, pero solo se pueden leer, no escribir. |
PROM | Programable Read Only MemoryNo son volátiles y se pueden escribir y reescribir en unos equipos especiales. Hoy prácticamente están en desuso |
EEPROM | Electically Erasable Programable Read only MemorySon igual que las PROM, pero con la curiosidad que se pueden reescribir eléctricamente lo que evita el 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. |
FLASH | Es un derivado de la EEPROM, con varias ventajas, la principal es que no pierde la información cuando le quitamos la corriente y además pueden leerse y escribirse sobre la marcha.El inconveniente es que son lentas. Es la clase de memoria que se utiliza para fabricar las memorias USBs pendrives y demás |
Después de esta ensalada de siglas, ya podemos volver al tema de modelos y características de nuestros Arduinos.
Tenéis que saber que nuestros programas se graban en la memoria Flash (que es bastante lentora de escribir), pero las variables que definamos en nuestro programa se guardan en memoria SRAM (que es mucho más rápida para escribir en ella)
Por eso, nuestro familiar Arduino UNO, se os va a quedar corto enseguida porque va muy escaso de memoria. En cuanto empecéis a incluir librerías en vuestros programas el margen de memoria flash se reducirá peligrosamente y entre tanto, la parte de SRAM dedicada a manejar las variables se puede llenar con facilidad, sino controláis los tamaños de estas o de los arrays que creéis.
De hecho, quizás no os hayáis fijado, pero cada vez que compiláis y volcáis un programa vuestro Arduino, el IDE os informa de como andáis de memoria, de uno y otro tipo:
Así que, a medida que vuestros programas y proyectos vayan creciendo es interesante que tengáis en reserva un Arduino Mega para lo que sea menester. Que desde luego, es el siguiente Arduino que os interesa añadir a vuestra colección.
¿Por qué un Mega y no un DUE?
Porque el DUE es una bestia de carga muy sexy, pero el inconveniente de que funcione a 3,3V le coloca en un una especie de tierra de nadie y no es fácil de recomendar sin saber exactamente su destino, porque si no, puede tener más inconvenientes que ventajas.
Si necesitas potencia de cálculo, para procesar audio, hacer transformadas de Fourier FFT, o filtros digitales, en los que lo que prima es la potencia y la velocidad, el DUE es tu candidato, sin duda.
Pero si quieres ponerle algún shield (ya hablaremos) o enganchar con integrados TTL y similares, los 3 voltios del DUE te van a complicar la vida, en seguida. Si quieres un Arduino UNO a lo bestia para lo que haga falta, compra el Mega (que además es bastante más barato) y estarás encantado.
Además con la evolución de precios que todo esto esta teniendo (a la baja) es probable que te acabes comprando uno de cada.
Hay más modelos de Arduino por ahí:
Hay mas modelos en camino, pero de momento no conviene complicarnos mas.
Usando la EEPROM de Arduino
No quiero dejar pasar esta ocasión de hablar de la EEPROM interna de Arduino.
¿Porque tiene EEPROM Arduino?, pues sencillamente porque aunque guardamos el programa en FLASH y por tanto, no se pierde al apagar, no ocurre lo mismo con las variables que se guardan en SDRAM y su valor e pierde cada vez que apagamos.
Por eso hay ocasiones, en las que es interesante poder conservar opciones de configuración del usuario, sin tener que preguntarle lo mismo cada vez que reinicia.
Imagínate un reloj digital, en el que le preguntamos usuario si prefiere e formato de 12 0 24h, o a qué hora poner el despertador.
Vamos a escribir un pequeño programa que muestre como almacenar valores en la EEPROM, de forma que podamos recuperarlos aun cuando se vaya la luz.
Para escribir en la memoria EEPROM, tenemos que incluir la librería correspondiente:
#include <EEPROM.h> for (int i = 0; i < 255; i++) EEPROM.write(i, i);
Y para leer de la EEPROM
#include <EEPROM.h> value = EEPROM.read(pos);
Donde pos, es la posición de EEPROM que queremos escribir. Para un UNO pos puede llegar hasta un máximo de 1.024, que es la longitud de EEPROM disponible. Para un Mega puede alcanzar 4k = 4.096
Y poco más se puede decir de este asunto. Que está disponible una especie de mini disco duro secuencial, dentro de vuestro Arduino, y que es bueno que sepáis que podéis usarlo cuando lo necesitéis.<
100.000/4 /365 = algo más de 68 años, así que ya sabéis, mucho cuidado al escribir la EEPROM, no vayáis a gastarla.
Resumen de la sesión
Hoy en nuestro curso de arduino hemos aprendido lo siguiente: