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