¿Se puede poner un array o tabla look-up en la rom?

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

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

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.

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.

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...

Un saludo.

Veo que me has reconocido por el avatar, porque el nikname estaba ocupado. :smiley:
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.

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.

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:

EEPROM => http://www.arduino.cc/en/Reference/EEPROM
FLASH => Arduino Playground - PROGMEM
Tipos de memoria => Arduino Playground - Memory

Saludos,

Igor R.

Genial información me lo apunto. Salu2

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.