Go Down

Topic: PREGUNTA SOBRE EEPROM  (Read 346 times) previous topic - next topic

luis_v

Feb 08, 2019, 02:49 am Last Edit: Feb 13, 2019, 12:11 am by surbyte
Hola foro, tengo una pregunta ya que estuve buscando y no he encontrado respuesta  
¿SE PUEDE ESCRIBIR UN FRAGMENTO DE CODIGO  EN LA EEPROM DEL ARDUINO, PARA LUEGO SER EJECUTADO ?

:o

Moderador
Por favor edita el pàrrafo escrito en mayùsculas.

Metaconta

#1
Feb 09, 2019, 01:51 pm Last Edit: Feb 09, 2019, 01:51 pm by Metaconta
Hola

¿Te refieres guardar un trozo de código de Arduino en una EEPROM?

Si te he entendido, la EEPROM interna de Arduino es muy pequeña, se llena rápido. Hay posibilidad de guardar ese trozo de código que si se puede hacer en una EEPROM externa o en una tarjeta Micro-SD de unos 128 GB por nombrar alguno.

También puedes perfectamente guardar esos código en la memoria programa de Arduino, en el cual hace tiempo hice pruebas de guardas imágenes y si se puede hacer como podrás comprobar aquí.

Almacenar imagen en un array en Arduino.

Más adelante seguiré con este proyecto, ahora estoy aprendiendo hacer menús en las LCD como tienen algunos coches y guardar configuración precisamente en la EEPROM.

Una vez el código gurdado dentro de la memoria de Programa o flash, en Arduino no se si lo permite, en los PIC nuevos si lo hacen, pero es un riesgo, tienes que tener todo claro porque se perderán los datos y no funcionará, pero es posible.

Hasta aquí te puedo decir.

Un cordial saludos y que tengas buenas tardes. ;)

Lucario448

Una vez el código gurdado dentro de la memoria de Programa o flash, en Arduino no se si lo permite
Sí, pero hay que cambiar el bootloader a uno que se llamaba optiboot o algo así. Este tiene las rutinas necesarias para permitir, en código, reprogramar parte de la memoria flash y auto-reiniciar el Arduino.

Es como el bootloader que se utiliza con la IDE de Arduino; solo que más flexible ya que no se limita sólo al puerto serial y el protocolo STK como tradicionalmente ha sido, sino que permite utilizar la memoria flash más o menos como una segunda EEPROM (aunque ese no es el propósito por razones obvias, sino de cargar código de cualquier fuente externa; lo que fácilmente da cabida a cosas como la programación OTA).



Dato curioso: es posible ejecutar código proveniente de un vector PROGMEM si se tiene la rutina (que creo que debe escribirse en ensamblador sí o sí) que haga el "salto" hacia el puntero de dicho vector. Lógicamente dicho contenido lo va a interpretar como código compilado (binario), si más bien tuviera código de alto nivel (a manera de cadena de caracteres, que de por sí no tendría sentido hacer cuando ya se está programando a alto nivel), quién sabe qué acabaría ejecutando o cuánto tardaría en colgarse, o "congelarse" por la instrucción "break" (no el break que rompe ciclos o bucles, me refiero a una instrucción máquina o de "bajo nivel" que, intencionalmente y con fines depurativos, paraliza la ejecución del programa).

Metaconta

Buenas:

Entendido.

Si tienes varios programas dentro de la flash, compilarlo después así mismo por decirlo de alguna manera no le veo sentdio excepto por experimentación y curiosidad.

Si quires tener unos 5 programas dentro de ella, mejor tenerlo todo compilado y selecciona programas mediante opciones con un simple selector de programas con un botón.

Por ejemplo.
Tengo 5 programas dentro de Arduino totalmente diferente y lo cambio por aquí.

Code: [Select]
switch (var)
{
  case programa1:
    // Control llenado de un depósito de agua.
    break;

  case programa2:
    // Comprobar nivel de agua de un depósito.
    break;

  case programa3:
    // Control motor eléctrico con arranque estrella triángulo.
    break;

  case programa4:
    // Sistema de alarma si hay ventanas o puertas abiertas.
    break;

  case programa5:
    // Comprobación de un o más fusibles fundidos.
    break;

  default:
    // ...
    break;
}


Mejor esto que otra cosa.

Saludos.

luis_v

Hola, gracias por responder , quiero experimentar , enviar un nuevo código por el puerto serial y grabarlo en la eeprom , para que este nuevo código sea como una "Actualización " como si quisiera hacer unas luces secuenciales,  entonces enviaría nuevas instrucciones desde el puerto serial , y estas realizarían nuevas secuencias,  mi nivel de programación es de  6 de 10 , me entro curiosidad y quiero intentarlo
Saludos

Metaconta

Hola:

Antes de intentarlo, estudia la posibilidad y lo que quieras hacer se hace con otras técnicas, véase como al compilar un programa, lo mete el Arduino IDE al AVR.



Saludos.

Lucario448

quiero experimentar , enviar un nuevo código por el puerto serial y grabarlo en la eeprom , para que este nuevo código sea como una "Actualización " como si quisiera hacer unas luces secuenciales,  entonces enviaría nuevas instrucciones desde el puerto serial , y estas realizarían nuevas secuencias
Ahora nos entendemos mejor. No se trata de reprogramar (resubir) todo un programa, sino más bien de crear uno con esa flexibilidad.

Ya que estamos hablando de una EEPROM de reducido tamaño (1024 bytes), no puedes darte el lujo de almacenar texto como tal (a menos que sea un mensaje a mostrar en una matriz de LEDs); por lo tanto la codificación binaria (a nivel de bytes) sería lo más eficiente.
Sin embargo, no es escribir bytes así porque sí; la secuencia de estos debe tener un significado. Para obtenerlo, primero hay que determinar qué datos se requieren para reproducir correctamente esa secuencia de LEDs de la que hablas.

luis_v

Estuve intentando y no encuentro una instrucción en la librería EEPROM , a lo mucho he logrado , controlar el parpadeo de un led por el puerto serial , es decir le envió un numero , este se guarda en la EEPROM y el programa lee ese valor , que se ejecuta en la velocidad del parpadeo de un led
Si esta un poco difícil :(

Go Up