Buenas, estoy intentando aprender a usar una SD para almacenar datos de lecturas de sensores y me encuentro con el problema de que no consigo acceder a la SD, he seguido muchos tutoriales y guias y aún así no me funciona. Estoy usando éste codigo:
#include <SD.h>
#include <SPI.h>
File myFile;
void setup()
{
Serial.begin(9600);
Serial.print("Iniciando SD ...");
if (!SD.begin(4)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
myFile = SD.open("archivo.txt");//abrimos el archivo
if (myFile) {
Serial.println("archivo.txt:");
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close(); //cerramos el archivo
} else {
Serial.println("Error al abrir el archivo");
}
}
void loop()
{
}
La única diferencia es que le tuve que añadir la librería SPI para que compilara.
Lo estoy usando para leer un archivo simple .txt en el que pone "Hola mundo" para ver si era capaz e ir complicando desde ahí, pero directamente en el monitor serial me dice que no me reconoce la SD gracias al mensaje de error que hay en el codigo si no la reconoce. Las conexiones que he realizado son las del tutorial:
Yo también tengo un módulo exactamente igual a ese; lo único que se me ocurre que pueda ser, es que hayan conexiones defectuosas o que hayas invertido MOSI con MISO.
Algunos reportan que en la placa tienen rota la línea CS que va del pin a la ranura, pero tendría que ver una foto de tu módulo (no sacada de internet) para ver si es el caso.
Yo cuando tuve problemas así, era por protoboard defectuoso.
noter:
Creo que lo que te falta es esto en el setup:
pinMode(10, OUTPUT);
Prueba a ver y cuenta.
Lo he probado (Pese a que no tengo nada conectado en el pin 10) y nada, tambien he probado a cambiar el codigo para que el CS conecte al pin 10 y nada. He probado todas las combinaciones posibles entre ponerle esa linea en el codigo, ponersela con la salida 4, conectarlo por los pines ICSP y no me ha ido ninguna. Alguna otra idea? Muchas gracias por ayudar
Lucario448:
Yo también tengo un módulo exactamente igual a ese; lo único que se me ocurre que pueda ser, es que hayan conexiones defectuosas o que hayas invertido MOSI con MISO.
Algunos reportan que en la placa tienen rota la línea CS que va del pin a la ranura, pero tendría que ver una foto de tu módulo (no sacada de internet) para ver si es el caso.
Yo cuando tuve problemas así, era por protoboard defectuoso.
He probado a cambiar los pines MISO y MOSI y tampoco. La protoboard no puede ser poque hago las conexiones directas ocn cables macho/hembra.
Prueba a compilar y ejecutar el ejemplo CardInfo del ide, y cuenta qué salida te da.
En cuanto a MISO y MOSI, la conexión correcta debería ser la que expones en el primer post. Lo de poner el pin10 en OUTPUT aunque no se use es necesario, porque de no estar como salida, el SPI estará en modo SLAVE, en lugar de MASTER.
¿No sabes CÓMO hacerlo, o SI hacerlo? (nótese que el "SI" es condicional y no afirmatorio)
Yo lo haría así:
Tomo la foto y obtengo el archivo.
Lo adjunto al post.
Escribo lo que tenga que escribir, dejando un espacio en el lugar donde quiero que se vea esa imagen.
Hago el posteo dejando solo texto y el archivo adjunto.
A ese post voy y copio la "dirección de enlace" del adjunto (haciendo clic derecho aparece la opción).
Le doy a "Quick edit" y busco el espacio que reservé para la imagen.
Escribo "[aimg][/aimg]" (sin comillas y sin la letra 'a'); en medio de esas dos etiquetas pego el enlace que antes dije que copiaras.
Le doy a "Save" y ya lo tienes.
La foto debe ser de buena resolución, buen acercamiento, y debe haber buena iluminación (que se vea claro pero que no refleje luz). La idea es hacer una inspección visual para buscar alguna traza defectuosa o cortada, defectos de soldadura y todo lo que el ojo humano pueda captar.
Con esto espero que puedas comprender la razón por la cual pido una foto del "sujeto" en cuestión...
¡Hola, que tal! Yo tengo el mismo problema (pensaba que era el único) y buscando por el foro encontré estos posts que, supongo están relacionados con el tema. ¿Alguien lo puede confirmar?
Yo ya he probado todo lo que pone en cada uno menos lo de usar un 74HC4050 porque no he podido comprarlo, así que me da por pensar que puede ser la causa.
Uno de los problemas con los que me he encontrado al usar módulos SD es el consumo de la tarjeta al inicio, la solución fue añadir un capacitor de 470uF (o similar) entre 3.3V y GND, suponiendo que tengas acceso a la salida del regulador del módulo.
Por otro lado, si ya sabes cómo conectar el módulo, puedes intentar utilizar este código, cambiando la variable chipSelect acorde a las conexiones que hayas hecho; http://www.prometec.net/sdcard/.
Nota; el 74HC4050 sirve para, a grosso modo, cambiar el voltaje de la señal de 5v a 3.3v (el voltaje con el cual trabaja la SD), pero, en el módulo hay una serie de resistencias que parecen ya hacer ese trabajo. No es el método más limpio en cuanto a señal se refiere, pero funcionar, funciona.
Hola ferminolaiz, he probado lo que comentas y nada. Le he subido el sketch de CardInfo y me sale esto
Initializing SD card...Wiring is correct and a card is present.
Card type: SDHC
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card
Ya la he formateado varias veces pero no hay manera. Lo del condensador lo he intentado un poco por encima porque ahora mismo no tengo soldador, y tampoco me ha funcionado. Lo curioso es que cuando compré el módulo, lo probé y funcionó perfectamente. Gracias por la ayuda.
@ardumike, parece que está detectando la tarjeta (y el tipo, SDHC), pero no la partición.
En ciertos casos, especialmente en sistemas de este tipo (microcontroladores, etc), es necesario que el tipo de partición se adhiera al estándar lo más fielmente posible.
Intenta formatear la tarjeta con esta aplicación y nos comentas que tal: SD Memory Card Formatter for Windows/Mac | SD Association
En ese caso, vuelvo a insistir sobre las conexiones defectuosas.
Cuando obtuve mi módulo, en un principio también pasé por el problema de que ninguna era detectada.
Probé con CardInfo, y primero decía que no pudo inicializar; eventualmente dijo que sí, pero lo mismo: no detecta la partición.
Al tiempo me di cuenta que la protoboard en la que lo tenía puesto tenía conexiones defectuosas; desde que solucioné ese problema, hasta la fecha me sigue funcionando como si nada.
Pues a la vista de la salida que te da CardInfo, tu problema no tiene pinta de ser de software. Revisa conexiones, e intenta minimizar longitud de cables.
Tal vez te puedan aconsejar un condensador entre los pines de alimentación. Puedes intentar, si no, reducir la velocidad de transferencia SPI.
Bueno, en mi caso, el problema de detección está resuelto. Instalé la librería SdFat, probé con el sketch de SDInfo y funcionó, tan sólo tuve que cambiar el pin CS al 8. Reconoce tarjeta y escribe y lee.
También actualicé desde el IDE de Arduino la libreria SD y la tarjeta, y se me ocurrió probar con la librería SD original y ahora también funciona con la original (eso sí, usando como CS el pin 8) con lo que el problema se supone que estaba en la no actualización.
Ahora tengo otro problemilla, pero me romperé los cuernos un rato a ver si lo soluciono rápidamente.