Pages: [1]   Go Down
Author Topic: ¿Se puede poner un array o tabla look-up en la rom?  (Read 1153 times)
0 Members and 1 Guest are viewing this topic.
Alicante
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 721
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: December 06, 2012, 11:42:30 pm by curro92 » Logged

Alicante
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

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

Alicante
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Veo que me has reconocido por el avatar, porque el nikname estaba ocupado.  smiley-grin
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.
« Last Edit: December 08, 2012, 01:44:21 pm by pepefe » Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: December 08, 2012, 08:07:51 pm by Igor R » Logged


Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Genial información me lo apunto. Salu2
Logged

Alicante
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: