EEPROM Update

  El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de: memoria EEPROM cuyos valores se mantienen cuando la placa está apagada (como un pequeño disco duro).
El propósito de este ejemplo es mostrar el método EEPROM.update () que escribe datos sólo si estos son diferentes del contenido anterior de las ubicaciones a ser escritas. Esta solución puede ahorrar tiempo de ejecución debido a que cada operación de escritura tarda 3,3 ms; la EEPROM tiene un límite de 100.000 ciclos de escritura por ubicación, por lo tanto, evitar volver a escribir el mismo valor en cualquier ubicación para prolongar la vida de la EEPROM.

Hardware necesario

  • Arduino o Genuino

Circuito


No hay circuito para este ejemplo.

 

Esquema

Código


// Metodo EEPROM Update

// Almacena en la EEPROM valores leídos desde la entrada analógica 0. 
// Estos valores se mantendrán en la EEPROM cuando la placa está desconectada y 
// pueden ser recuperados más tarde por otro programa. 
// Si un valor no ha cambiado en la EEPROM, no se sobrescribe lo que reduciría 
// la vida útil de la EEPROM innecesariamente. 
// Publicado bajo licencia MIT.

#include <EEPROM.h>

/** la direccion actual de la EEPROM (Por ejemplo, en que byte vamos a escribir) **/
int address = 0;

void setup() {
  /** Setuo vacio **/
}

void loop() {
// Necesitamos dividir por 4 el valor de las entradas analógicas, porque van 
// de 0 a 1023 y cada byte de la EPROM sólo puede contener un valor de 0 a 255.
  int val = analogRead(0) / 4;

// Actualización de la célula EEPROM particular. estos valores permanecerán allí 
// cuando la placa este desconectada.
  EEPROM.update(address, val);

// La funcion EEPROM.update(address, val) es equivalente a lo siguiente:

//    if( EEPROM.read(address) != val ){
//      EEPROM.write(address, val);

// Avanza a la siguiente dirección, cuando llega al final empieza desde el 
//principio. 
// Los procesadore AVRs más grandes tienen tamaños más grandes  de EEPROM, por ejemplo:
//    - Arduno Duemilanove: tiene 512 bytes de EEPROM .
//    - Arduino Uno: tiene 1 KB de EEPROM. 
//   - Arduino Mega: tiene 4 KB de EEPROM. 
// En lugar de la codificación dura de la longitud, se debe utilizar la función 
// de longitud pre-proporcionada. 
// Esto hará que su código sea portable para todos los procesadores AVR.

  address = address + 1;
  if (address == EEPROM.length()) {
    address = 0;
  }

// Como los tamaños de EEPROM son potencias de dos, es posible e desbordamiento 
// de una dirección de la EEPROM como también es factible con un bit a bit de 
//longitud - 1.
// ++address &= EEPROM.length() - 1;

  delay(100);
}

No hay comentarios:

Publicar un comentario