domingo, 29 de abril de 2012

Memoria en PIC y Arduino


Los microcontroladores PIC tienen una serie de registros que funcionan como una RAM de propósito general
que esta destinada a guardar las variables y los datos.
Otra parte de la memoria es de tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación.

Existen una gran cantidad de micro-controladores diferentes por lo tanto la aplicación y utilización de los mismos es diferente.




Ya que el microcontrolador está diseñado para que en su memoria de programa se almacenen todas las instrucciones del programa de control, Existen varios tipos de memoria:


  • ROM con máscara: se graba mediante el uso de máscaras. Sólo es recomendable para series muy grandes debido a su elevado coste. Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip.
  • 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.
  • EPROM:  Erasable Programmable Read-Only Memory
    se graba eléctricamente con un programador controlador por un PC. Disponen de una ventana en la parte superior para someterla a luz ultravioleta, lo que permite su borrado. Puede usarse en fase de diseño, aunque su coste unitario es elevado.
    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.
  • EEPROM:  Electrically Erasable Programmable Read-Only Memory
    Es un tipo de memoria ROM que puede ser programada, borrada y reprogramada eléctricamente, a diferencia de la EPROM que ha de borrarse mediante un aparato que emite rayos ultravioletas. Son memorias no volátiles.
    Aunque una EEPROM puede ser leída un número ilimitado de veces, sólo puede ser borrada y reprogramada entre 100.000 y un millón de veces.
  • Flash:  La memoria flash es una forma avanzada de EEPROM, que permite la lecto-escritura de múltiples posiciones de memoria en la misma operación. Gracias a ello, la tecnología flash, siempre mediante impulsos eléctricos, permite velocidades de funcionamiento muy superiores frente a la tecnología EEPROM primigenia, que sólo permitía actuar sobre una única celda de memoria en cada operación de programación.
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.La reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto.


Memoria en Arduino

Existen tres tipos de memoria en los microcontroladores utilizados por las placas Arduino (ATmega168, ATmega328, ATmega1280, etc.): 



  • Memoria Flash:  La memoria Flash (espacio del programa) es donde Arduino almacena el sketch. Un sketch es el nombre que usa Arduino para un programa. Es la unidad de código que se sube y ejecuta en la placa Arduino. Esta memoria es no volátil, si Arduino deja de ser alimentado eléctricamente los datos que haya en esta memoria permanecerán. 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. Se recomienda que se realicen programas de manera optimizada.
  • Memoria SRAM:   Static Random Access Memory ó memoria estática de acceso aleatorio es de tipo volátil, es el espacio donde los sketches (programas) almacenan y manipulan variables al ejecutarse. La información guardada en esta memoria será eliminada cuando Arduino pierda la alimentación. Esta memoria es de uso exclusivo para el programa en ejecución.  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).
  • Memoria EEPROM: es un espacio de memoria que puede ser utilizada por los programadores para almacenar información de largo plazo.  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.



El almacenamiento en Arduino es posible ampliarlo, una manera de hacerlo es usando una memoria EEPROM externa.
También es posible ampliar la memoria con una SD Card, para esto existen varios módulos SD Card para arduino un ejemplo es el siguiente:



Para utilizar estos módulos existen varias librerías que pueden ser muy útiles.


Referencias



1 comentario: