Pages: [1]   Go Down
Author Topic: Escribir en la FLASH  (Read 1745 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola amigos,

He tenido grandes dificultades al tratar de escribir en la flash, ya que debido a que la transmision Serial es muy lenta (dada la gran cantidad de muestras), no me ha quedado mas remedio que muestrear los canales analogos e ir guardandolos en la FLASH, para despues enviarlos al PC, por otra parte, ya que necesito ir enviando datos 1 a 1 hacia la flash, he pensado en punteros y dejar reservado el espacio en la memoria flash mdiante arreglos.

Estoy usando la Duemilanove y no me permite crear arreglos mayores a 890 (arreglo[890]), y como si esto fuera poco, si creo dos o mas arreglos de ese tamaño tambien me arroja problemas y debo disminuir la capacidad de los arreglos, en definitiva, no me permite guardar mas de 890 datos en la flash y yo pretendo ojalá llenarla.
(cuando digo que me arroja problemas, no es en la compilación, ya que si pruebo con menos datos la cosa funciona).

Si alguien ya ha tenido este problema o si al menos ha hecho algo parecido por favor que me ayude  smiley-wink

Saludos
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ten en cuenta que el ATmega328 tiene 16Kb de RAM por lo que si cada entero ocupa 16bits podrás meter 1000 en la RAM, si a eso le quitas las variables que estés usando y demás cosas, pues te quedarán los 890.

El Arduino puede mandar por serie hasta 2Mbit/s que es bastante información, si no tendrás que usar otro micro, como algún Cypress por ejemplo.

Sin saber que es ni que debe hacer, no te puedo aconsejar mucho más.

Un saludo smiley-wink
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

*
Offline Offline
Sr. Member
****
Karma: 0
Posts: 470
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estás confundiendo la flash (memoria de programa) con la ram, lo primero como te dice chiva es ver cuanta ram tienes, una vez compilado puedes ver cuanta ha usado el programa (con el AVR Studio, en el de arduino no sé como es) y además tienes que dejar espacio para los datos de la pila (stack) del microcontrolador, que también utiliza la ram en ejecución del programa para almacenarlos.

En este código hice más o menos lo que dices:
http://www.jmnlab.com/servominiz/servominiz.html
http://www.jmnlab.com/servominiz/codigo1280.html

Muestrear el adc, almacenar el valor en dos vectores y una vez hecho ésto mandarlos al pc.

Para ello  como dices con crear un par de vectores y recorrerlos en un bucle para almacenar el valor del adc alto y del adc bajo y luego sacarlos vale:

volatile unsigned char pc_adc_alto[250]; //datos para mandar al pc
volatile unsigned char pc_adc_bajo[250];

El límite del vector lo tienes en la ram del micro que estimes que puedes usar.

Ahí está hecho así y funciona, puede tener fallos ya que no está repasado el código y es con WinAVR, pero la idea es la misma.
« Last Edit: January 17, 2011, 04:50:56 pm by JMN » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola denuevo, muchas gracias

Ya he solucionado el problema del limite de memoria, por alguna razón, a pesar de estar usando la librería pgmspace.h y comandos definidos allí, no me funcionaba (y al parecer me escribía en la ram). Actualmente
ya he solucionado el problema y estoy escribiendo en ella smiley.

Logged

Pages: [1]   Go Up
Jump to: