bclose

Los modelos de Arduino

Procesadores y tipos de memoria de Arduino
tienda online prometec

Objetivos

 

 
    • Conocer los modelos básicos de Arduino y sus características.
    • Comprender los PICs.
    • Mostrar los diferentes tipos de memorias disponibles.
    • Aprender a usar la memoria EEPROM interna sin miedo.
 

Material requerido.

 Taza de café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.

ModeloIBM PC 1981Intel I7Multiplicador
Velocidad reloj8.8 MHz2.4 GHzx300
Memoria RAM128 kB – 640 kB4 Gb – 64 Gbx2.000
Disco duro500 kB4 Tbx2.000.000
Bus datos864x8

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:

 Atmega 328 THT Atmega 328 SMD

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.

 
  • En una sesión futura tengo previsto que montemos un Arduino en una protoboard, para que veáis lo sencillo que es.
 

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:

MemoriaCaracterísticas
RAMSe pueden leer y escribir pero son volátiles
DRAMDynamic 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
DDRDouble 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
ROMRead Only Memory,  son no volátiles, pero solo se pueden leer, no escribir.
PROMProgramable Read Only MemoryNo son volátiles y se pueden escribir y reescribir en unos equipos especiales. Hoy prácticamente están en desuso
EEPROMElectically 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.
FLASHEs 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.

Arduino UNOMEGADUE
ProcesadorATMEGA 328ATmega2560Atmel SAM3X8E
Anchura8 bits8 bits32 bits
Velocidad16 MHz16 MHz84 MHz
Pines digitales145454
Pines PWM61612
Convertidores ADC61612
Convertidores DAC002
Interrupciones224
Memoria FLASH32Kb256Kb512Kb
SRAM2Kb8kb96Kb
EEPROM1Kb4kb0
Atmega 328 THT Atmega 328 SMDProcesador del Arduino MegaProcesador del Arduino DUE

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:


Reporte de memoria

 

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í:

ImagenModelo
LeonardoArduino Leonardo.Es como un UNO y con las mismas prestaciones, pero es el primer Arduino que incorpora gestión interna del USB (Y no gestionado por un segundo procesador como en el UNO), lo que le permite presentarse al PC host como si fuera un ratón o un teclado.
MiniArduino Mini.Es como un UNO, el mismo procesador, pero en minúsculo, montado pensando en el que ocupe lo mínimo.Es ideal para incluir en prototipos, pero no incluye USB, debes comprar otro cacharrito para programarlo.
MicroArduino Micro.Es como un Leonardo, pero en miniatura y con todo incluido. Hasta un mini USB para programarlo cómodamente.Es ideal para incluir en la protoboard, porque viene con los pines adecuados.
 YUNArduino Yun.No sé muy bien qué decir del Yun. Es un Leonardo, al que le  han puesto un copiloto que corre un Linux chiquito pero matón.El equipo Arduino ha desarrollado una librería para interactuar entre el procesador Arduino y el Linux, y aparentemente es muy sencillo.Además lleva incluido WIFI y lector de tarjetas, y solo la tarjeta WIFI ya suele costar más que el Yun.Tengo uno por aquí, así que si tengo ocasión montaremos una sesión con él.

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.

 
  • En cuanto al tema de que esta memoria se degrada con el uso y acaba volviéndose inservible, vale la pena revisar la documentación del fabricante (Si, el dichoso manual que hay que leerse siempre) confirma este punto y dicen que solo aguanta 100.000 reescrituras antes de degradarse.
  • Así que si grabas 4 datos diarios, se estropeara al cabo de, veamos, 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.
  • Parece existir un absurdo temor a usar las EEPROM en la comunidad Arduino. Os recomiendo que las escribais sin miedo. Hay muchas posiciones y si alguna se estropea, siempre podéis escribir en otras posiciones. El UNO tiene 1024 diferentes.
 

 

Resumen de la sesión

 

  • Hemos hablado un poco de los diferentes tipos de memoria y de sus motivos de ser.
  • Hemos visto las características de diferentes procesadores, al redor de donde se con construyen los modelos de Arduino.
  • Hemos presentado varios modelos diferentes de Arduino.

 

 

 

(18) Comments

  • Hola,

    Se que el artículo es antiguo pero dejo igualmente el mensaje. Recientemente me regalaron un Arduino M0, que funciona a 3.3 V. Aparte también me regalaron un kit de sensores ( dejo el enlace por si acaso https://www.pccomponentes.com/kit-de-sensores-compatible-arduino).

    El caso es que quería saber si puede llegar a haber algún problema de compatibilidad o algo.

    Muchas gracias por su atención.

    • Hola Alejandro, la mayoría de sensores que he probado funcionan también a 3.3v.

    • Linford Taricuarima

    Hola buenos días, soy nuevo en esto del arduino, aunque debo hacer algo que tiene (creo yo) nada de principiante. Quisiera saber con qué tipo de arduino puedo hacer uso de sensores, manejar dos motores de corriente continua y un servo. gracias

    • Pues depende del número de sensores que quieras usar, sino son muchos te valdría con un Arduino UNO y un shield para motores para facilitarte un poquito el trabajo. Y sino siempre puedes tirar al MEGA que seguro que te da más que de sobra. Un saludo.

  • Hola jose tal vez ya hallaz resuelto tu duda, la cuestion que es cierto que el chip ATmega328P lo podemos retirar del arduino y montarlo a parte ya sea en un protoboard o un PCB, en en la red podemos encontrar muchos planos de los componentes básicos para ponerlo a correr sin la placa, en realidad es facil y muy útil lo importante es tener en cuenta que el nuevo ATmega tenga montado el booloader de arduino porque de lo contrario ya no lo reconoce el ide y no subirá nuevos programas a nuestra placa de arduino, las tiendas suelen venderlo con el booloader grabado por un par de pesos mas o si tienes quemador de micros Atmel le puedes grabar el boot desde el ide de arduino.

  • A ver si entendi, un ATMega 2560 tendria 4096 posiciones de memoria EEPROM de 8 bits cada una, es asi? Ademas, por lo que vi en el ejemplo, estas irian de la pos 0 a la 4095, vamos bien?
    Otra cosa aparte, yo podria hacer un proyecto con un arduino Uno, una vez que estoy seguro que hace lo que quiero, montar un pseudo arduino solo con los componentes que necesito para mi proyecto (sin un puerto usb, por ejemplo) , mudar el ATMega 328 ya programado y comprar uno nuevo para el arduino que se encuentra pronto para afrontar nuevos desafios. Es asi, o el aire enrarecido por la calefaccion me esta afectando las capacidades cognitivas?
    Muchas gracias!!!!

  • Gracias Admin.
    Si, lo que necesito saber es la velocidad de mi arduino procesando un programa, saber cuanto tarda o cuantas veces puede hacer el proceso por segundo.
    El programa que lo estoy manejando simplemente obtiene datos de una entrada analógica, y los muestra en pantalla.

    Como podría medir el tiempo a la entrada y salida del proceso para poder imprimir la diferencia..???

    Ayuda…

    • Lo mas facil es algo asi:

      long t0 = millis() ;

      { Aqui tu programa }

      long t1 = millis ;
      Serial.println( t1 – t0 );

  • Saludos amigos.
    Por favor me podrían ayudar, abría la posibilidad de calcular el procesamiento de trabajo de arduino mega… es decir la velocidad de operación/procesamiento…
    No se si me comprenden, es que deseo hacer un programa en arduino el cual calcule el consumo de memoria, bateria y procesamiento.del arduino.

    Desde ya Gracias por sus respuestas

    • Hola Juan, no estoy seguro de entender lo que quieres, pero vamos a ver. La velocidad de proceso s epuede medir por ciclos de reloj o numero de microinstruccione spor segundo y ambos datos los puedes encontrar en la informacion del fabricante.
      Otra cuestion e sla velocidad de tu arduino procesando un programa concreto, por ejemplo, y que quieras saber cuanto tarda o cuantas veces puede hacer ese proceso por segundo.
      Esto es bastante facil de hacer sin mas que medir el tiempo a la entrada y salida del proceso e imprimir la diferencia

    • Fernando

    Hola, creo que hay algún pequeño error en cuanto al origen de este tipo de micros.
    Los microprocesadores comenzaron con el 4004 de intel (en 1971, https://es.wikipedia.org/wiki/Intel_4004, aunque el primero usable se considera el 8080). Como bien indicas el proposito de los microprocesadores no era la interacción con el mundo real, por ello se crearon los microcontroladores: https://es.wikipedia.org/wiki/Microcontrolador
    Los microcontroladores están destinados a sistemas embebidos y en un solo chip integran todos los componentes: microprocesador, memoria (RAM y ROM) y reloj.
    Si la familia de microprocesadores más famosa de Intel es la serie 80×86, la de microcontroladores era la 80×81.
    Hay microcontroladores en casi cualquier lugar: routers, televisores, sintonizadores TDT/Satélite…
    Los PIC son una familia muy conocida de microcontroladores que se ha utilizado muchisimo para el mismo propósito que los Arduino: aprender, cacharrear y realizar algunos proyectos industriales… sin embargo la simplicidad de programación, la versatilidad y el formato del Arduino ha hecho que se imponga a los PIC.

    Bueno, me he extendido más de lo que pretendía, así que lo dejo, si queréis algo más completo con pedirlo bastará ;P

    Saludos

    • Muchas gracias por el aporte Fernando

    • Jorge

    Flipo contigo! Y con tus definiciones!

    • Jmcn

    Buenos dias:
    Entiendo que en la instruccion para escrbir en la memoria EEPROM.write (i, i), el primer parametro es la posicion de memoria y el segundo el contenido, no?.
    Cuando en un Mega hablamos de que tiene 4 k, queremos decir que las posiciones seran menos si almacenamos variables long, que si almacenamos int?

    • En efecto, segun el manual de arduino la instrucción es:
      EEPROM.write(address, value)

      como en Arduino un int son 2 bytes y un long 4 bytes, en la memoria de 4k podemos escribir 2k integers y 1k longs

    • Alberto Palomero

    Helou,

    Muy interesante el tema de la EEPROM. Te queria preguntar acerca de ella 2 cosillas:
    – acepta solo enteros?
    – dices que si una posicion se estropea se pueden usar otras? eso signfica que aprox. existen 100.000 x 1024 reescrituras? a lo que me refiero es que puede palmar una posicion y seguir intactas el resto no?

    un saludete y muchas gracias!

    • Hola Alberto

      En la EEPROM puedes grabar cualquier tipo de datos de Arduino y no solo enteros. Y eso incluye longs, Booleans, arrays y cualquier otro tipo o estructura que hayas definido.

      A lo largo del uso de la eeprom se van degenerando y dejan de funcionar, pero efectivamente el fabricante stima que son como 100.000 veces las que las puedes grabar y cuando una posicion se estropea no tiene porque afectar a las demas y puedes cambiar el programa y grabar en otra posicion.

      Son ideales para usarlas como registro o disco duro interno, y deberiasmos acabar con esa especie de temor que parece haber en el mundo ARduino de que si se usa se estropean. Usalas con toda confianza que en el muy improbable caso de que acabes llegando a su limite de uso, simplemente cambias el chip en UNO por 2€ y vuelta a empezar

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!