f Eeprom Arduino tutorial ~ Ingenieria a nivel industrial

Visita mi canal de youtube

sábado, 24 de septiembre de 2016

Eeprom Arduino tutorial

EEPROM Clear

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

Este ejemplo ilustra cómo configurar de todos esos bytes a 0, la inicialización de ellos mantener la nueva información, utilizando la función EEPROM.write ().

hardware necesario

Arduino o Genuino

Code

/*
 * EEPROM Clear
 *
 * Sets all of the bytes of the EEPROM to 0.
 * Please see eeprom_iteration for a more in depth
 * look at how to traverse the EEPROM.
 *
 * This example code is in the public domain.
 */


#include <EEPROM.h>

void setup() {
  // initialize the LED pin as an output.
  pinMode(13, OUTPUT);

  /***
    Iterate through each byte of the EEPROM storage.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/


  for (int i = 0 ; i < EEPROM.length() ; i++) {
    EEPROM.write(i, 0);
  }

  // turn the LED on when we're done
  digitalWrite(13, HIGH);
}

void loop() {
  /** Empty loop. **/
}


EEPROM Read

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

Este ejemplo ilustra cómo leer el valor de cada byte de la EEPROM usando la función EEPROM.read (), y cómo imprimir los valores de la ventana de serie del software de Arduino (IDE).

Code

/*
 * EEPROM Read
 *
 * Reads the value of each byte of the EEPROM and prints it
 * to the computer.
 * This example code is in the public domain.
 */


#include <EEPROM.h>

// start reading from the first byte (address 0) of the EEPROM
int address = 0;
byte value;

void setup() {
  // initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
}

void loop() {
  // read a byte from the current address of the EEPROM
  value = EEPROM.read(address);

  Serial.print(address);
  Serial.print("\t");
  Serial.print(value, DEC);
  Serial.println();

  /***
    Advance to the next address, when at the end restart at the beginning.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/

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

  /***
    As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
    EEPROM address is also doable by a bitwise and of the length - 1.

    ++address &= EEPROM.length() - 1;
  ***/


  delay(500);
}

EEPROM write

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

Este ejemplo ilustra cómo almacenar los valores leídos desde la entrada analógica 0 en la EEPROM usando la función EEPROM.write (). Estos valores permanecerán en la EEPROM cuando el tablero está apagado y puede ser recuperada más tarde por otro boceto.


Code

/*
 * EEPROM Write
 *
 * Stores values read from analog input 0 into the EEPROM.
 * These values will stay in the EEPROM when the board is
 * turned off and may be retrieved later by another sketch.
 */


#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int addr = 0;

void setup() {
  /** Empty setup. **/
}

void loop() {
  /***
    Need to divide by 4 because analog inputs range from
    0 to 1023 and each byte of the EEPROM can only hold a
    value from 0 to 255.
  ***/


  int val = analogRead(0) / 4;

  /***
    Write the value to the appropriate byte of the EEPROM.
    these values will remain there when the board is
    turned off.
  ***/


  EEPROM.write(addr, val);

  /***
    Advance to the next address, when at the end restart at the beginning.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/

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

  /***
    As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
    EEPROM address is also doable by a bitwise and of the length - 1.

    ++addr &= EEPROM.length() - 1;
  ***/



  delay(100);
}


EEPROM CRC

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

Un CRC es una forma sencilla de comprobar si los datos han cambiado o dañado. En este ejemplo se calcula un valor de CRC directamente en los valores de la EEPROM. Este CRC es como una firma y cualquier cambio en el CRC calculado: una modificación de los datos almacenados. El propósito de este ejemplo es poner de relieve cómo el objeto EEPROM se puede utilizar como una matriz.

Code

/***
    Written by Christopher Andrews.
    CRC algorithm generated by pycrc, MIT licence ( https://github.com/tpircher/pycrc ).

    A CRC is a simple way of checking whether data has changed or become corrupted.
    This example calculates a CRC value directly on the EEPROM values.
    The purpose of this example is to highlight how the EEPROM object can be used just like an array.
***/


#include <Arduino.h>
#include <EEPROM.h>

void setup() {

  //Start serial
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  //Print length of data to run CRC on.
  Serial.print("EEPROM length: ");
  Serial.println(EEPROM.length());

  //Print the result of calling eeprom_crc()
  Serial.print("CRC32 of EEPROM data: 0x");
  Serial.println(eeprom_crc(), HEX);
  Serial.print("\n\nDone!");
}

void loop() {
  /* Empty loop */
}

unsigned long eeprom_crc(void) {

  const unsigned long crc_table[16] = {
    0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
    0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
    0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
    0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
  };

  unsigned long crc = ~0L;

  for (int index = 0 ; index < EEPROM.length()  ; ++index) {
    crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4);
    crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4);
    crc = ~crc;
  }
  return crc;
}


Get EEPROM

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

El propósito de este ejemplo es mostrar cómo el PUT y GET métodos proporcionan un comportamiento diferente a escribir y leer, que el trabajo en bytes individuales. Obtención de las diferentes variables de la EEPROM recuperar un número de bytes que se relaciona con el tipo de dato variable.

Code

/***
    eeprom_get example.

    This shows how to use the EEPROM.get() method.

    To pre-set the EEPROM data, run the example sketch eeprom_put.
    This sketch will run without it, however, the values shown
    will be shown from what ever is already on the EEPROM.

    This may cause the serial object to print out a large string
    of garbage if there is no null character inside one of the strings
    loaded.

    Written by Christopher Andrews 2015
    Released under MIT licence.
***/


#include <EEPROM.h>

void setup() {

  float f = 0.00f;   //Variable to store data read from EEPROM.
  int eeAddress = 0; //EEPROM address to start reading from

  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print("Read float from EEPROM: ");

  //Get the float data from the EEPROM at position 'eeAddress'
  EEPROM.get(eeAddress, f);
  Serial.println(f, 3);    //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float.

  /***
    As get also returns a reference to 'f', you can use it inline.
    E.g: Serial.print( EEPROM.get( eeAddress, f ) );
  ***/


  /***
    Get can be used with custom structures too.
    I have separated this into an extra function.
  ***/


  secondTest(); //Run the next test.
}

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void secondTest() {
  int eeAddress = sizeof(float); //Move address to the next byte after float 'f'.

  MyObject customVar; //Variable to store custom object read from EEPROM.
  EEPROM.get(eeAddress, customVar);

  Serial.println("Read custom object from EEPROM: ");
  Serial.println(customVar.field1);
  Serial.println(customVar.field2);
  Serial.println(customVar.name);
}

void loop() {
  /* Empty loop */
}



DESCARGA ¡¡ GRATIS !! —–> LIBROS DE
ARDUINO
 –>ENTRA AQUI PARA VER


EEPROM iteraciones

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

El propósito de este ejemplo es mostrar cómo ir a través de todo el espacio de memoria EEPROM con diferentes enfoques. El código proporcionado no se ejecuta en su propio sino que debe utilizarse como un surce de fragmentos de código que se utiliza en otros lugares.

Code

/***
    eeprom_iteration example.

    A set of example snippets highlighting the
    simplest methods for traversing the EEPROM.

    Running this sketch is not necessary, this is
    simply highlighting certain programming methods.

    Written by Christopher Andrews 2015
    Released under MIT licence.
***/


#include <EEPROM.h>

void setup() {

  /***
    Iterate the EEPROM using a for loop.
  ***/


  for (int index = 0 ; index < EEPROM.length() ; index++) {

    //Add one to each cell in the EEPROM
    EEPROM[ index ] += 1;
  }

  /***
    Iterate the EEPROM using a while loop.
  ***/


  int index = 0;

  while (index < EEPROM.length()) {

    //Add one to each cell in the EEPROM
    EEPROM[ index ] += 1;
    index++;
  }

  /***
    Iterate the EEPROM using a do-while loop.
  ***/


  int idx = 0;  //Used 'idx' to avoid name conflict with 'index' above.

  do {

    //Add one to each cell in the EEPROM
    EEPROM[ idx ] += 1;
    idx++;
  } while (idx < EEPROM.length());


} //End of setup function.

void loop() {}

EEPROM Put

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (como un pequeño disco duro).

El propósito de este ejemplo es mostrar el método EEPROM.put () que escribe datos en la EEPROM usando también el EEPROM.update () que escribe datos sólo si es diferente del contenido previo de los lugares para ser escritas. El número de bytes escritos se relaciona con la estructura de tipo de datos o la costumbre de la variable a ser escrito.

Code

/***
    eeprom_put example.

    This shows how to use the EEPROM.put() method.
    Also, this sketch will pre-set the EEPROM data for the
    example sketch eeprom_get.

    Note, unlike the single byte version EEPROM.write(),
    the put method will use update semantics. As in a byte
    will only be written to the EEPROM if the data is actually
    different.

    Written by Christopher Andrews 2015
    Released under MIT licence.
***/


#include <EEPROM.h>

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  float f = 123.456f;  //Variable to store in EEPROM.
  int eeAddress = 0;   //Location we want the data to be put.


  //One simple call, with the address first and the object second.
  EEPROM.put(eeAddress, f);

  Serial.println("Written float data type!");

  /** Put is designed for use with custom structures also. **/

  //Data to store.
  MyObject customVar = {
    3.14f,
    65,
    "Working!"
  };

  eeAddress += sizeof(float); //Move address to the next byte after float 'f'.

  EEPROM.put(eeAddress, customVar);
  Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}

void loop() {
  /* Empty loop */
}

 EEPROM Update

El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de EEPROM: memoria cuyos valores se mantienen cuando el tablero está apagado (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 es diferente del contenido anterior de los lugares a ser escrito. Esta solución puede ahorrar tiempo de ejecución debido a que cada operación de escritura tarda 3,3 ms; la EEPROM ha salso un límite de 100.000 ciclos de escritura por solo lugar, por lo tanto, evitar volver a escribir el mismo valor en cualquier lugar de prolongar la vida en general EEPROM.

Code

/***
   EEPROM Update method

   Stores values read from analog input 0 into the EEPROM.
   These values will stay in the EEPROM when the board is
   turned off and may be retrieved later by another sketch.

   If a value has not changed in the EEPROM, it is not overwritten
   which would reduce the life span of the EEPROM unnecessarily.

   Released using MIT licence.
 ***/


#include <EEPROM.h>

/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
int address = 0;

void setup() {
  /** EMpty setup **/
}

void loop() {
  /***
    need to divide by 4 because analog inputs range from
    0 to 1023 and each byte of the EEPROM can only hold a
    value from 0 to 255.
  ***/

  int val = analogRead(0) / 4;

  /***
    Update the particular EEPROM cell.
    these values will remain there when the board is
    turned off.
  ***/

  EEPROM.update(address, val);

  /***
    The function EEPROM.update(address, val) is equivalent to the following:

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



  /***
    Advance to the next address, when at the end restart at the beginning.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
  ***/

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

  /***
    As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
    EEPROM address is also doable by a bitwise and of the length - 1.

    ++address &= EEPROM.length() - 1;
  ***/


  delay(100);
}


DESCARGA ¡¡ GRATIS !! —–> LIBROS DE
ELECTRONICA
 –>ENTRA AQUI PARA VER


DESCARGA SOFTWARE PARA SIMULAR CIRCUITOS ELECTRONICOS HACIENDO CLICK AQUI.

















0 comentarios:

Publicar un comentario