Arduino Pro mini no escribe en eeprom

Buenos días,

Estoy bastante cansado de este asunto y espero que me podáis ayudar…

De antecedente os diré que trabajaba con un arduino uno y funcionaba todo perfectamente, estoy intentando pasarme a pro mini (para ahorrar espacio) y llego el desastre…nada funcionaba… (he tenido problemas también con la libreria servo, la cual he sustituido con funciones a mano con prueba y error con delayMicroseconds() ).

Voy a la pregunta que tengo…durante el programa yo me guardaba una variables por si se iba la luz en eeprom, pero ahora con el pro mini no funciona al quitar alimentación las direcciones se vuelven a 0.

#include <EEPROM.h>
void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
Serial.println(EEPROM[0]);
 if (EEPROM[0]!=22) {EEPROM[0]=22;}
 Serial.println(EEPROM[0]);
}

void loop() {
// put your main code here, to run repeatedly:[/color]

}

Y da como resultado:

18:30:05.258 -> 0
18:30:05.258 -> 22
18:30:14.468 -> 0
18:30:14.468 -> 22
18:30:18.678 -> 0
18:30:18.678 -> 22

Alguna idea?

Gracias

Primero que nada, por favor, edita el post y pon el código como corresponde (ver Normas del foro, punto 7). Lo mismo los resultados, ponlos igual que si fuese código. Gracias.

Respecto a tu consulta no creo tener una solución pero hay algo que me llama mucho la atención.
Se supone que una escritura en eeprom demora 3.3 ms (según la hoja de datos del ATmega328), pero en los resultados, entre la primer lectura y la posterior a la escritura hay 0 ms de diferencia.

Para confirmar que efectivamente está grabando el valor,
¿Por qué no pruebas agregar un delay de 3 ms y hacer otra lectura para ver si el resultado sigue siendo el esperado (22)?

Algo así

#include <EEPROM.h>
void setup() {[/color]
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println(EEPROM[0]);
  if (EEPROM[0]!=22) {EEPROM[0]=22;}
  Serial.println(EEPROM[0]);
  delay(3);
  Serial.println(EEPROM[0]);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Según la página oficial
https://store.arduino.cc/usa/arduino-pro-mini
El pro mini ha sido retirado del mercado

@TonyDiana avisale a los chinos! :slight_smile:

jajaja, pero es que buscaba si tiene Eprom y como la tiene, porque me suena que el mini pro era diferente, como el Due

Los datos en una EEPROM no se guardan asi.
Se guardan de este modo

#include <EEPROM.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(EEPROM.read(0));
if (EEPROM.read(0) !=22) {EEPROM.write(0, 22);}
Serial.println(EEPROM.read(0));
}

void loop() {
// put your main code here, to run repeatedly:[/color]

}

Por cierto, imposible que ese programa en un UNO funcione. Te lo discuto a muerte.
La forma en que se guardan o leen datos en la EEPROM no cambia para ningun ATmega328 y ambos UNO o PROMini son iguales.

Arduino Reference EEPROM[]

Puede ser que el error sea la forma de leerla, no estoy seguro si es valido usarla en una comparación...

Bueno para mi eso es nuevo, a menos que este muy equivocado.

Respeco a usarla o no en una comparación mas alla que ambos coincidamos que no es la manera adecuada, debería funcionar.
En lo personal yo suelo asignar a una variable y luego opero con la variable, comparo y hago lo que debo hacer.
Debería probar el ejemplo en un arduino a ver como se comporta.

He probado el código y funciona.
La primera vez por supuesto tenia otro dato pero los otros dos resets muestras los mismos datos

65
22
22
22
22
22

Buenos dias,

Muchas gracias por las contestaciones.

Por fin he descubierto el problema, ni mas ni menos que estoy estoy trabajando con lo copia china (como alguno ha dicho, que ya no se fabricaba).

Y para que funcione correctamente, se han de añadir unas librerías. (por si a alguien le interesa yo las he sacado de aqui: Solución al uso de Wavgat con IDE Arduino - Descarga driver CH341SER y librerías - YouTube); sino simplemente buscar wavgat drivers en google.

Lo que mas me sorprende es que sin estas librerías controlaba perfectamente LCD a través de I2C, DS1302 y funciones básicas; pero en cambio no funcionaba EEPROM y SERVO.

Saludos y espero que le sirva a mas gente.

Gracias por avisar