Usando la EEPROM 24CL32 de Tiny RTC

Ya había usado la EEPROM de los ATMega de Arduino, la verdad es que es muy sencillo con la librería EEPROM que acompaña al producto. El problema se presentó cuando decidí usar EEPROM via SDA/SCL (I2C) como la que viene con el Tiny RTC, ahí empezó otro calvario de buscar como loco por internet y de probar-deshechar códigos y librerías de mucha gente que, con toda su buena intención, resolvieron el problema y lo compartieron con el resto.

Después de muchas, muchas vueltas y desesperaciones, encontré este artículo dentro de la web de Ardunio, donde sus autores se han basado en el desarrollo de otra persona para construir una librería de uso sencillo que hace más cómoda la programación de EEPROM I2C.

La librería I2C_eeprom se puede encontrar en esta dirección de github. Solo hay que descargar los archivos y meterlos en una carpeta llamada “I2C_eeprom” dentro de la carpeta “librarys” del IDE de Arduino.

Una vez que tenemos conectado y funcionando el Tiny RTC (ha de ser el que incluye la EEPROM), realizaremos el programa de prueba de la memoria (he puesto el código de un programa que uso para mostrar la hora, la temperatura, la humedad y el uso de la EEPROM; he marcado el código correspondiente a la prueba de la memoria):

//Muestra Hora, Temperatura y Humedad, y uso de la EEPROM del Tiny RTC.

#include <Wire.h>
#include <RTClib.h>
#include <DHT.h>

//Librería para controlar la EEPROM por I2C.
#include <I2C_eeprom.hZ>

// Tamaño máximo de la EEPROM (32K)
#define EE24LC32MAXBYTES 32000

// La dirección de la EEPROM (La del Tiny RTC esta en 0x50)
#define DEVICEADDRESS (0x50)

#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define DHTPIN 2     // Indicamos el pin donde conectaremos la patilla data de nuestro sensor

DHT dht(DHTPIN, DHTTYPE);

RTC_DS1307 RTC;

//Crear el acceso a la Clase.
I2C_eeprom eeprom(DEVICEADDRESS, EE24LC32MAXBYTES);

void setup () {
   //Inicializamos el puerto serie, wire y el modulo RTC
   Serial.begin(9600);
   // Inicia el I2C.
   Wire.begin();

   // Inicia el RTC.
   RTC.begin();

   if ( RTC.isrunning()){
      Serial.println("Reloj funcinando correctamente.");
      Serial.println("Hora actual: "+ dimeFecha());
   }else{
      Serial.println("El reloj NO funciona.");
  }
  //RTC.adjust(DateTime(__DATE__, __TIME__)); //Pone el reloj en hora

  dht.begin();

  // Ponemos en marcha la clase para manejar la EEPROM
  eeprom.begin();

  //Cadena de pruebas para grabar en la EEPROM.
  String cad = "Cadena de pruebas";

  //Enviamos los datos a la EEPROM. Para ejecuciones sucesivas, comentar este trozo de código y

  // comprobamos que no se borra de la EEPROM aunque desconectemos la alimentación.
  for(int n=0;n<lt;cad.length();n++){

        //eeprom.write(posicion_memoria, byte_a_enviar);
        eeprom.writeByte(n,(byte)cad.charAt(n));
  }

}

void loop () {

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  Serial.print(dimeFecha());

  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("%");
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("ºC";);
  Serial.print("\t\t");

 //Leemos la EEPROM
    for(int n=0;n<=16;n++){

        //eeprom.readByte(posicion_memoria);
        Serial.print((char)eeprom.readByte(n));
    }
    Serial.println();

  delay(3000);
}

/*
FUNCION PARA OBTENER LA FECHA EN MODO TEXTO
Devuelve: DD-MM-AAAA HH:MM:SS
*/
String dimeFecha(){

  char fecha[19];
  DateTime now = RTC.now(); //Obtener fecha y hora actual.

  int dia = now.day();
  int mes = now.month();
  int anio = now.year();
  int hora = now.hour();
  int minuto = now.minute();
  int segundo = now.second();

  sprintf( fecha, "%.2d/%.2d/%.4d %.2d:%.2d:%.2d", dia, mes, anio, hora, minuto, segundo);
  return String( fecha );
}

 

Anuncios

6 comentarios

  1. Es justo lo que necesitaba. Muchas gràcias

  2. aparecen muchos (<) (") y otros UNICODE que hace inentendible tu sketch…Arreglalo !!!

  3. Aparecen UNICODES por todos lados, arreglalo…no se entiende nada…Saludos !!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: