Go Down

Topic: Gestión e indexación de registros de una tabla en SD. (Read 16039 times) previous topic - next topic

surbyte

Como te dije antes, dame algo para probarlo asi te respondo seriamente.

noter

Pues me conformaría con hacer funcionar este código de ejemplo:

Code: [Select]
/*
  SD card read/write

 This example shows how to read and write data to and from an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4

 created   Nov 2010
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.

 */

#include <SPI.h>
#include <SD.h>

File myFile;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  // nothing happens after setup
}



Porque de momento no he conseguido que la MMC me devuelva nada salvo errores. De momento sólo puedo probar con "fuego real" (encima a medio gas, que es otra) y los avances son un poco penosos, pues cada modificación requiere volver a compilar y subir código a Arduino, pero pasito a pasito voy avanzando.
Espero en breve actualizar el post #1 con una versión que ya se pueda probar (de momento no hace nada útil).

surbyte

Bien, somos dos, tampoco puedo pasar de initialization failed!

Bueno no hay caso. No funciona en el simulador.
Intentando poner en práctica sugerencias de este link


Posible Solución1: El archivo que tiene la tarjeta sd debe tener extención .mmc
Asi que editar .txt por .mmc.

No me funcionó.

Posible 2:

Quote
Con respecto lo que dice nuestro amigo yo hace tiempo use un truco, el proteus para la mmc necesita el fichero disk.bin lo puden encontrar en
Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM for USB\PICDEM FS USB\MSD

si lo cargas en tu mmc creo que re rulara, a mi me funciono.
No me funcionó tampoco.

Hark0

Buenas!

Mi primer post en este foro... aunque lleve años visitándolo...

Estoy con la idea de hacerme una "maquinita"... tengo algunos componentes comprados, pero me interesa mucho trabajar emulando antes de coger la protoboard o el soldador.

He probado todo lo probable en Proteus y no salgo del consabido "Command unsupported".

Leo en todas partes que no hay forma.

Estoy por probar otras librerías tipo SDFat.h a ver si ésta soluciona el problema.



¿alguna idea y/o pista de como solventar el uso de SD's con Proteus?

Y si no es posible con proteus... ¿Qué otro software me recomendais para emular un ATMEGA+display Nokia+SD


Gracias anticipadas ;-)

noter

Tambièn he probado a crear un archivo de imagen con winimage (como he visto por ahí googleando que recomendaban) y nada. No he sido capaz de encontrar demasiada información del error. De todas formas el fallo (command unsupported) no parece que tenga que ver con el archivo de imagen, sino que sencillamente la tarjeta no entiende los comandos SD.
Con lo mío voy avanzando poquito a poco compilando/grabando, prueba/error. Espero no agotar los ciclos de borrado de mi mega  ;D

surbyte

Lo curioso es que hay un demo con un pic en Proteus y funciona perfecto. Tomé la imagen como sugirió alguien por Internet pero tampoco funcionó, asi que ya sospecho que algo malo tiene nuestra librería.
Es así?

Hark0

Lo curioso es que hay un demo con un pic en Proteus y funciona perfecto. Tomé la imagen como sugirió alguien por Internet pero tampoco funcionó, asi que ya sospecho que algo malo tiene nuestra librería.
Es así?
Exacto!  Con un PIC18F452.... lo encontré Youtube.... viene el HEX pero no el SRC.... :(

surbyte

SI. correcto. Seguimos trabajando. Mucha, mucha gente habla de problemas para hacer funcionar la SD en Proteus.
Debe tener un truco simple porque Proteus anda muy bien en todos los frentes electrónicos.

noter

¿Y no será que hay alguna diferencia entre los comandos que maneja una MMC y una SD? Porque el dispositivo en principio es MMC

surbyte

jajaja tengo problemas básicos con las librerías.

Esto es corriendo el demo Datalogger que esta en la librería que esta debidamente ubicado en ...\libraries\SPI\Examples\Datalogger
Curioso que diga que SPI no esta declarado.

Code: [Select]
[Stino - Start building "Datalogger"...]
[  3%] Creating C:\Users\Ricardo\AppData\Local\Temp\Stino_build\Datalogger\Datalogger.ino.cpp.o...
[  6%] Creating C:\Users\Ricardo\AppData\Local\Temp\Stino_build\Datalogger\lib_SD\src\File.cpp.o...
[  9%] Creating C:\Users\Ricardo\AppData\Local\Temp\Stino_build\Datalogger\lib_SD\src\SD.cpp.o...
[ 12%] Creating C:\Users\Ricardo\AppData\Local\Temp\Stino_build\Datalogger\lib_SD\src\utility\Sd2Card.cpp.o...
c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp: In function 'void spiSend(uint8_t)':

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp:35: error: 'SPI' was not declared in this scope

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp: In function 'uint8_t spiRec()':

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp:44: error: 'SPI' was not declared in this scope

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp: In member function 'uint8_t Sd2Card::init(uint8_t, uint8_t)':

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp:251: error: 'SPI' was not declared in this scope

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp: In member function 'uint8_t Sd2Card::setSckRate(uint8_t)':

c:/program files (x86)/arduino/libraries/SD/src/utility/Sd2Card.cpp:507: error: 'SPI' was not declared in this scope


noter

Pues ¡te lo juro por Bill Gates que a mí sí me compila"  :smiley-mr-green:  :smiley-mr-green:  :smiley-mr-green:

surbyte

Claro que te creo. Pero a ver.. como si fuera un novato.
SPI y SD vienen con el IDE o yo estoy equivocado?
Si tienes librerías diferentes agrega el link please.

noter

En el 1.5.8 sí. En anteriores no estoy tan seguro respecto SPI. Yo actualicé la versión del IDE precisamente porque me daba el mismo mensaje, pero también es cierto que tenía mi librería SD bastante toqueteada.
Si corres la versión 1.5.8, prueba a sobreescribir (si tienes el zip) las dos librerías.

noter

Bueno.
La cosa requiere bastante paciencia, pero al menos ya se pueden dar de alta registros. Las bajas serán el próximo paso a depurar.

noter

¡¡¡ EUREKA !!!
Creo que tengo la primera version operativa. Necesitaría ayuda para testear.
Si alguien tiene ganas, puede testear el sketch de ejemplo, o intentar adaptarlo a otro tipo de estructura personalizada. Cualquier duda, comentario o fallo detectado será bienvenido.
De momento creo que va un poco lenta la cosa. Tendré que mirar por dónde puedo ahorrarme escrituras en SD, porque actualmente hace muchas.

Go Up