Go Down

Topic: Ecriture sur carte SD (Read 1 time) previous topic - next topic

arduimat

Bonsoir à tous,

Je suis en train de devenir fou. :0

J'ai branché tout comme il faut(je crois) mon lecteur de carte SD.

J'arrive à faire :
- Lecture du contenu d'un fichier
- Création d'un fichier

Autrement dit, tout. Ou presque, car je n'arrive pas à écrire à l'intérieur d'un fichier et impossible de comprendre pourquoi même avec un code hyper simple!

Code: [Select]

#include <SD.h>

void setup() {     
 
Serial.begin(9600);
SD.begin(4);

File theFile;
theFile = SD.open("fichier.txt", FILE_WRITE); // ouverture de fichier.txt en écriture

if (theFile) {
    Serial.print("Ecriture de données sur la premiere ligne");
    theFile.println(", fin de la ligne et passage a la ligne suivante");
// Fermeture du fichier:
    theFile.close();
    Serial.println("C'est écrit !");
  } else {
    // impossible d'ouvrir/créer le fichier:
    Serial.println("Erreur d'ouverture de fichier.txt");
}
 
}

void loop() {
 
}


Donc ce code, va me créer le fichier sur la carte mais lorsque je retire la carte et que je la mets dans le PC, ben le fichier est vide.

Les codes pour lire à l'intérieur d'un fichier, eux, fonctionnent.

Une idée ? Merci :D

Super_Cinci

carte protégée en écriture? XD

arduimat


carte protégée en écriture? XD


Ouais non j'y ai pensé mais c'est pas ça...  :smiley-mr-green:

Par contre j'ai trouvé ce texte sur le site arduino :

Quote
When you use file.write(), it doesn't write to the card until you flush() or close(). Whenever you open a file, be sure to close it to save your data.


Mais pourtant je fais bien le close(). J'ai essayé avec flush() aussi et tout et tout.

Franchement je comprends pas (vu que toutes les autres opérations fonctionnent, création fichier et lecture). J'ai vu qu'il existait une autre librairie pour les cartes SD que celle officielle, j'essayerai.

B@tto

et en écrivant :

File theFile = SD.open("fichier.txt", FILE_WRITE);

??
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

skywodd

Bonjour,

A tu tenté l'exemple datalogger de la librairie SD ?
La librairie SD n'est rien d'autre qu'une surcouche à "sdfatlib", librairie qui ne bug quasiment jamais (excepté sur les ATMega168 ...) et qui marche avec toute les cartes du commerce de taille supérieur à 128 (ou 256 je sais plus) Mo.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

arduimat

Roh j'ai trouvé, c'était con, vraiment.

C'est à cause de la résistance que j'ai placé sur l'alimentation du module SD.

Je l'ai remplacé par une résistance beaucoup moins puissante et l'écriture fonctionne ! :)

La résistance précédente devait être trop forte et ne permettait pas l'écriture sur la carte, bien qu'elle permettait la lecture et la création de fichiers !

Comment connaitre la meilleure valeur de résistance que je dois placer pour alimenter mon module SD Card ?


Super_Cinci

De tête, comme ça : il y a du 3.3V dispo sur l'arduino, non? alors pourquoi ne pas l'utiliser? Le coup de la résistance, c'est vraiment très moyen, car en numérique, on aime bien des belles tensions bien stables...

arduimat


De tête, comme ça : il y a du 3.3V dispo sur l'arduino, non? alors pourquoi ne pas l'utiliser? Le coup de la résistance, c'est vraiment très moyen, car en numérique, on aime bien des belles tensions bien stables...


Effectivement il y a du 3.3V, mais je ne sais pas si ça serai suffisant (pas pensé à tester) :(

Et pour faire une belle tension bien stable, il faut utiliser quoi, un condensateur ?

arduimat

Un petit coup de pouce ? :)

Comment connaitre la valeur de la résistance que je dois placer entre mon module carte SD et l'Arduino ?

Que dois-je utiliser pour stabiliser la tension ? Un condensateur ? Si oui de quel type (electrolytic ?) et de quelle valeurs ?

Merci pour votre aide :)

al1fch

#9
Nov 27, 2011, 09:02 pm Last Edit: Nov 27, 2011, 09:10 pm by al1fch Reason: 1
Bonjour
Quote
C'est à cause de la résistance que j'ai placé sur l'alimentation du module SD.
Je l'ai remplacé par une résistance beaucoup moins puissante et l'écriture fonctionne ! smiley

Si tu utilises une résistance pour chuter la tenssion d'alimentation de la carte SD à partir du +5V c'est "mission impossible". Le courant absorbé par la carte SD varie énormément (repos, lecture, écriture) et par conséquent il est rigoureusement impossible de rester aux alentours de 3,3V dans toutes les situations
-la résistance qui convenait en lecture était, tu l'as vu,  trop forte pour l'écriture (tension trop faible)
-la résistance qui parait convenir en écriture donne imanquablement une tension d'alim trop forte au repos et en lecture -> rIsque de destruction de la carte
-les courants dans chaque mode fluctuent pas mal, la tension elle aussi avec une résistance chutrice de tension.

Un régulateur de tension 3,3V est  indispensable pour un fonctionnement sûr.
Ton module SD n'en possède pas un ?


arduimat

#10
Nov 27, 2011, 09:10 pm Last Edit: Nov 27, 2011, 09:13 pm by arduimat Reason: 1

Bonjour
Quote
C'est à cause de la résistance que j'ai placé sur l'alimentation du module SD.
Je l'ai remplacé par une résistance beaucoup moins puissante et l'écriture fonctionne ! smiley

Si tu utilises une résistance pour chuter la tenssion d'alimentation de la carte SD à partir du +5V c'est "mission impossible". Le courant absorbé par la carte SD varie énormément (repos, lecture, écriture) et par conséquent il est rigoureusement impossible de rester aux alentours de 3,3V dans toutes les situations
-la résistance qui convenait en lecture était, tu l'as vu,  trop forte pour l'écriture (tension trop faible)
-la résistance qui parait convenir en écriture donne imanquablement une tension d'alim trop forte au repos et en lecture -> rIsque de destruction de la carte
-les courants dans chaque mode fluctuent pas mal, la tension elle aussi avec une résistance chutrice de tension, sur ce point un condensateur peut aider (100 nF par exemple)

Un régulateur de tension 3,3V est  indispensable pour un fonctionnement sûr


Merci pour ces explications étapes par étapes. Il me faut donc placer un LM7xxx ou un truc du genre ? Quelles valeurs pour le LM ? Merci :)

Quote
Ton module SD n'en possède pas un ?


Comment savoir ?? Je vais y jeter un coup d'oeil, en même temps je trouve pas la documentation technique sur internet...

arduimat

Cependant il y a une prise 3.3V directement sur le module SD (comme sur l'Arduino). Mais du coup si je l'utilise, j'ai besoin de plus rien entre les deux ?

al1fch

#12
Nov 27, 2011, 09:24 pm Last Edit: Nov 27, 2011, 09:28 pm by al1fch Reason: 1
Dans la série des LM7800 (7812, 7805...) on ne trouve pas de 3,3V en pratique
Par contre dans la série LM1117 il y un régulateur très répandu en 3,3V qui peut fournir jusqu'à 800mA
C'est le LM1117T-3.3

Régulateur 3,3V présent sur l'Arduino : il faut vérifier combien de mA restent disponibles , je ne m'en rapelle plus. Une carte SD en écriture ça peut demander plus de 100mA en écriture avec des breves pointes au delà

arduimat

#13
Nov 27, 2011, 09:34 pm Last Edit: Nov 27, 2011, 09:40 pm by arduimat Reason: 1

Dans la série des LM7800 (7812, 7805...) on ne trouve pas de 3,3V en pratique
Par contre dans la série LM1117 il y un régulateur très répandu en 3,3V qui peut fournir jusqu'à 800mA
C'est le LM1117T-3.3

Régulateur 3,3V présent sur l'Arduino : il faut vérifier combien de mA restent disponibles , je ne m'en rapelle plus. Une carte SD en écriture ça peut demander plus de 100mA en écriture avec des breves pointes au delà



J'en ai trouvé sur eBay.

LM1117T Low Dropout Voltage Regulator 3.3V

Quote
DESCRIPTION

•3.3V Output
•Current Limiting and Thermal Protection
•Output Current 800mA
•Line Regulation 0.2% (Max)
•Load Regulation 0.4% (Max)
•Temperature Range 0°C to 125°C

DESCRIPTION

The LM1117 is a series of low dropout voltage regulators with a dropout of 1.2V at 800mA of load current. It has the same pin-out as National Semiconductor's industry standard LM317.

The LM1117 offers current limiting and thermal shutdown. Its circuit includes a zener trimmed bandgap reference to assure output voltage accuracy to within ±1%.

The LM1117 series is available TO-220 packages. A minimum of 10?F tantalum capacitor is required at the output to improve the transient response and stability.


C'est bien ça ?

al1fch

#14
Nov 27, 2011, 09:41 pm Last Edit: Nov 27, 2011, 09:50 pm by al1fch Reason: 1
Oui c'est ça , la lettre T précise que ce régulateur est en boitiet TO220, comme les LM7800

Je viens de vérifier le schéma de la carte UNo rev 2 : le régulateur 3,3V est un LP2985-33 qui peut fournir 150mA. C'est limite mais ça peut passer pour des cartes SD peux gourmandes, sans doute pas pour des cartes SDHC. Tu ne risques rien à faire l'essai, ces régulateurs sont protégés en cas de courant excessif ou de surchauffe.

IL faut bien sûr ramener à 3,3V les signaux entrants dans la carte (MOSI....) Pour ça plusieurs solutions existent, il en a été question dans des fils assez récents. Il n'est pas prudent pour la carte de lui envoyer des signaux 5V. Certaines supportent (un certain temps) mais ce n'est pas la règle !!

Go Up