Go Down

Topic: ¿Se puede poner un array o tabla look-up en la rom? (Read 1 time) previous topic - next topic

pepefe

A ver si me explico: Estoy usando el timer 2 para generar interrupciones periódicas pero quiero liberar la cpu todo lo que se pueda y al mismo tiempo ser lo mas preciso posible.
El tiempo de recarga del timer y el preescaler dependen del inverso de una lectura analógica; ya que con unl potenciómetro selecciono frecuencias pero al final en el timer lo que se programa es el periodo f=1/T.
Lo mas rápido es leer una tabla o un array y recargar el timer para el próximo, si me pierdo haciendo cálculos pierdo precisión pero como es relativamente grande para que sea precisa no la quiero cargar en la ram para no llenarla entera o en la eeprom, además al arrancar se perdería mucho tiempo declarando y llenando el array.

Resumiendo la pregunta es si puedo declarar un array de algún modo para que esté en la rom y no en la ram, evidentemente no se modificaría en tiempo de ejecución; de hecho me interesa que no se pueda modificar.

Serían dos tablas tipo char, un byte por posición, como mínimo de 65 entradas cada una, claro que según lo complicado que sea lo ideal sería llegar a dos tablas de 1k ya que la resolución de la entrada analógica es 1k

curro92

#1
Dec 07, 2012, 05:16 am Last Edit: Dec 07, 2012, 05:42 am by curro92 Reason: 1
Hola,
cuando hablas de rom supongo que te refieres a la memoria flash donde se carga el código ejecutable. En esa memoria sí puedes cargar variables voluminosas que no se vayan a modificar. Para eso tienes que usar la palabra clave PROGMEM

Mira en la Referencia
http://www.arduino.cc/en/Reference/PROGMEM

Para declarar variables hay que usar unos tipos especiales, que están definidos en  pgmspace.h, y para leer las variables también tendrás que usar una función especial.

pepefe

Si, me refería a la flash, a la memoria de programa, vamos.

Gracias le echo un vistazo pero creo que si que es eso lo que estaba buscando.

Heke

Hombre !! compañero "Palm-ero"

Una alegria verte por aqui.

Si lo que vas a escribir en la flash va a estar cambiando continuamente no lo hagas en la del arduino (ademas solo tiene 512 bytes), emplea mejor una eeprom serie I2C de microchip, por ejemplo, mira estos enlaces sin ir mas lejos...
http://www.diarioelectronicohoy.com/blog/eeprom-con-i%C2%B2c-bus#more-385
http://kans01.wordpress.com/2008/03/13/usando-una-memoria-eeprom-desde-arduino/



Un saludo.

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

pepefe

#4
Dec 08, 2012, 07:38 pm Last Edit: Dec 08, 2012, 07:44 pm by pepefe Reason: 1
Veo que me has reconocido por el avatar, porque el nikname estaba ocupado.  :D
Estoy usando un arduino nano V3 con un 328 osea que tengo 2k de ram y 1k de eeprom.
Estoy empezando con este proyecto así que quizás sea racanería prematura de ram, cpu y de todo pero es que estoy acostumbrado a funcionar así; ahorra desde el principio que luego no te queda de X.

El animalito se supone que será una ECU para etanol para un prototipo la shell ecomaratón. Ya veremos que sale del engendro.
Es una operación repetitiva, que siempre será la misma, se supone que no hay que tocarla nunca, aunque quizás venga bien después como un "mapa de motor", una posibilidad sería tener varios al gusto.

Heke

Conservas los buenos principios de los programadores de antaño, ahorra ram como sea y de ahi recursos...

Efectivamente, ese avatar y un buen recuerdo de la epoca Pdaexpertos.

Cuenta con mi ayuda en lo que pueda compañero.

Muy interesante la challenge, pero teneis que hilar muy fino en ella ¿Participais desde Alicante?

Un saludo.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Igor R

#6
Dec 09, 2012, 02:03 am Last Edit: Dec 09, 2012, 02:07 am by Igor R Reason: 1
Hay un poco de mezcla en este post... Existe la memoria de programa (flash), la sram y la eeprom. Para un atmega328 son 32 Kb, 2Kb y 1Kb respectivamente.
Una posibilidad es guardar las tablas en la memoria de programa (como bien han dicho con progmem). Que es la mayor de todas, a no ser que tengas un programa muy extenso.
Si quieres un ejemplo de como guardar un vector y leerlo, en este link tienes una tabla de linealización de un sensor NTC guardada en flash y que se hacen los cálculos para convertir la entrada analógica a variable física:

http://real2electronics.blogspot.com/2011/07/maqueta-de-control-pid-con-arduino.html

EEPROM => http://www.arduino.cc/en/Reference/EEPROM
FLASH => http://playground.arduino.cc/Main/PROGMEM
Tipos de memoria => http://playground.arduino.cc/Learning/Memory

Saludos,

Igor R.


pepefe

Al final lo solucioné de otra forma pero no me convence mucho el funcionamiento.
Como no tiene nada que ver lo voy a preguntar en otro hilo.

Go Up