Problème d'écriture sur carte SD

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Problème d'écriture sur carte SD

Message non lude Ricky09 » Ven 25 Mai 2012 22:27

Bonjour. J'ai testé ce petit montage et cela fonctionne après avoir fait un formatage de la carte SD de 32 MO en FAT.
Par contre j'ai un problème d'affichage de la date et de l'heure : voici ce que j'ai :
Releve et horodatage des valeurs du capteur, selon horloge RTC
---------

165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46
165/165/2165 165:165:85 Valeur capteur = 46

j'ai oublié quoi ?
merci de votre aide.
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Ven 25 Mai 2012 23:19

Bonjour.
J'ai testé ce montage qui fonctionnait bien, (après un premier formatage de la carte SD en FAT) mais avec lequel j'avais un problème d'affichage de la date et l'heure sur la carte SD (tests fait sur une carte 32 MO et une carte 2Go).
J'ai formaté la carte SD et depuis impossible d’écrire sur la carte (message carte fausse ou absente) le problème est le même sur les 2 cartes ? Formatage en FAT.
la je ne sais plus quoi faire....
merci
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Sam 26 Mai 2012 15:16

Force a force de chercher j'ai trouvé l'origine du problème de la carte SD, en fait le connecteur du module mémoire snootlab a des faux contacts...
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude Lionel » Mar 29 Mai 2012 09:03

Bonjour,

Pour plus de clarté, je me suis permis de placer votre message dans un nouveau sujet, avec un titre explicite.

Afin de valider l'origine de votre souci, pourriez vous poster ci dessous :
  • photos nettes du montage (dessus/dessous)
  • code utilisé
  • version d'IDE arduino utilisé
  • système d'exploitation utilisé

Si il s'agit d'un souci hardware, pas d'inquiétude, nous vous échangeons le produit
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Dim 3 Juin 2012 12:15

Bonjour. merci pour votre aide.

ARDUINO 1.0
Windows seven 64 bits édition intégrale.

le code utilisé :

Code: Tout sélectionner
       /*
            SNOOTLAB
            Application N°1 Shield Mémoire : Stockage des valeurs de temperature dans un fichier texte
            avec fonction d'horodatage
        */

        #include <Wire.h>
        #include <SD.h>
        #include <RTClib.h>

        // Declaration des pin utilisées
        const char pin_chipSelect = 10;                            //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
        const char pin_capteur = 0;                                //Numéro de la pin où est relié le capteur en question

        // Declaration des variables générales
        const unsigned long F_refresh = 5000;                      //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
        DateTime moment;                                           //Création d'un objet contenant les données temporelles
        String datastring;                                         //Création d'un objet type string pour les données à écrire
        RTC_DS1307 RTC;
        File fichier;
       


        void setup()
        {
         
          Serial.begin(57600);                                     //Initialisation de la liaison série
          Serial.print("Initialisation de la SD card...");
         
          pinMode(pin_chipSelect, OUTPUT);                         // Mettre la pin en output
         
           RTC.begin();                           
           if (! RTC.isrunning())
       {
         // Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
         RTC.adjust(DateTime(__DATE__, __TIME__));
       }
         
          if (!SD.begin(pin_chipSelect))                           // Vérification de la présence de la SD card
            {                         
              Serial.println("Carte fausse ou absente");
              return;                                              // Si problème, sortir et bloquer l'exécution
            }
         
          Serial.println("Carte OK.");
         
          datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
         
          fichier = SD.open("log1.txt", FILE_WRITE);               // Ouverture du fichier en mode Ecriture.
         
          if (fichier)                                             // Si le fichier existe déja, on écrira à la suite des données présentes.
            {
              fichier.println(datastring);
              fichier.close();
              Serial.println(datastring);                          // dupliquer la donnée sur port série
            }
           
          else                                                     //Si problème à l'ouvertre, alors signaler l'erreur
            {                                                       
                Serial.println("erreur d'ouverture du fichier durant la configuration");
            }
         
        }

        void loop()
        {
           
          delay(F_refresh);
         
         
          moment = RTC.now();                                      //Init de l'objet temporel
         
          datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
          +' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);

          int sensor = analogRead(pin_capteur);                    // lire la valeur du capteur et la mettre dans la chaine de caractères
          datastring += String("\t Valeur capteur = ");            // préalablement remplie avec les données temporelles
          datastring += String(sensor);
           
          fichier = SD.open("log1.txt", FILE_WRITE);

          if (fichier)
            {
              fichier.println(datastring);
              fichier.close();
              Serial.println(datastring);                           // dupliquer la donnée sur port série
            }
          else {
                Serial.println("erreur d'ouverture du fichier");
                }
         
          datastring =0;
        }


En pièce jointe : les photos du montage et les copies d'écran.

PS : Le problème du faux contact sur la carte SD se confirmer, il faut que je rentre et sorte 2 ou 3 fois la carte avant que cela fonctionne. J'ai fait les tests sur 3 carte différentes (une 32 Mo, une 1Go et une 2 Go).
Fichiers joints
LOG1.TXT
fichier de log
(15.51 Kio) Téléchargé 134 fois
photo du montage et affichage du moniteur.PDF
photos du montage + copies d'écran
(432.65 Kio) Téléchargé 170 fois
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Lun 11 Juin 2012 18:14

Bonjour.
Après de multiples essais et tests je n'arrive pas plus à écrire sur la carte SD. Je pense que le SHIELD mémoire est défectueux. Comment dois-je procéder pour faire l'échange ?
merci.
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude Lionel » Lun 11 Juin 2012 19:36

Bonjour,

vous serait il possible d'essayer ce sketch ?
il est issu du datalogger adafruit et adapté pour Mémoire 1.0 et votre application

Code: Tout sélectionner
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

// A simple data logger for the Arduino analog pins

// how many milliseconds between grabbing data and logging it. 1000 ms is once a second
#define LOG_INTERVAL  1000 // mills between entries (reduce to take more/faster data)

// how many milliseconds before writing the logged data permanently to disk
// set it to the LOG_INTERVAL to write each time (safest)
// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to
// the last 10 reads if power is lost but it uses less power and is much faster!
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL   1 // echo data to serial port
#define WAIT_TO_START    0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define Pin_Led_Bleue 9

// The analog pins that connect to the sensors
#define PinCapteur 0           // analog 0


RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

// the logging file
File logfile;

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
 
  // red LED indicates error
  digitalWrite(Pin_Led_Bleue, HIGH);

  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();
 
  // use debugging LEDs
  pinMode(Pin_Led_Bleue, OUTPUT);

 
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
 
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
 
  // create a new file
  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE);
      break;  // leave the loop!
    }
  }
 
  if (! logfile) {
    error("couldnt create file");
  }
 
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin(); 
  if (!RTC.isrunning()) {
    logfile.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
#if ECHO_TO_SERIAL
    Serial.println("RTC is NOT running!");
#endif  //ECHO_TO_SERIAL
  }
 

  logfile.println("millis,stamp,datetime,sensor");   
#if ECHO_TO_SERIAL
  Serial.println("millis,stamp,datetime,light,sensor");
#endif //ECHO_TO_SERIAL
 

}

void loop(void)
{
  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
 
 
  // log milliseconds since starting
  uint32_t m = millis();
  logfile.print(m);           // milliseconds since start
  logfile.print(", ");   
#if ECHO_TO_SERIAL
  Serial.print(m);         // milliseconds since start
  Serial.print(", "); 
#endif

  // fetch the time
  now = RTC.now();
  // log time
  logfile.print(now.unixtime()); // seconds since 1/1/1970
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  logfile.print(now.second(), DEC);
  logfile.print('"');
#if ECHO_TO_SERIAL
  Serial.print(now.unixtime()); // seconds since 1/1/1970
  Serial.print(", ");
  Serial.print('"');
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print('"');
#endif //ECHO_TO_SERIAL

  analogRead(PinCapteur);
  delay(10);
  int lecture_capteur = analogRead(PinCapteur); 
 
 
  logfile.print(", ");   
  logfile.print(lecture_capteur);

#if ECHO_TO_SERIAL
  Serial.print(", ");   
  Serial.print(lecture_capteur);

#endif //ECHO_TO_SERIAL


  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println();
#endif // ECHO_TO_SERIAL


  // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  // which uses a bunch of power and takes time
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
 
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(Pin_Led_Bleue, HIGH);
  logfile.flush();
  digitalWrite(Pin_Led_Bleue, LOW);
 
}


le code que vous avez posté précédemment n'est pas du tout fonctionnel
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Problème d'écriture sur carte SD

Message non lude Lionel » Mer 13 Juin 2012 10:54

Bonjour,

Avez ou le temps de vérifier si votre matériel fonctionne avec le sketch que je vous ai proposé ?

En effet, j'avais le même comportement que vous avec votre sketch sur un shield mémoire validé et fonctionnel...

Merci
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Lun 18 Juin 2012 20:37

Merci pour votre réponse : le résultat sur le moniteur :
Initializing SD card...card initialized.
Logging to: LOGGER01.CSV
millis,stamp,datetime,light,sensor
998, 1340054800, "2012/6/18 21:26:40", 673
1998, 1340054802, "2012/6/18 21:26:42", 575
2999, 1340054803, "2012/6/18 21:26:43", 575
3999, 1340054803, "2012/6/18 21:26:43", 586
4999, 1340054804, "2012/6/18 21:26:44", 587
5999, 1340054805, "2012/6/18 21:26:45", 588
7000, 1340054806, "2012/6/18 21:26:46", 593
7999, 1340054807, "2012/6/18 21:26:47", 596
8999, 1340054808, "2012/6/18 21:26:48", 597
9999, 1340054809, "2012/6/18 21:26:49", 596
10999, 1340054810, "2012/6/18 21:26:50", 580
11999, 1340054811, "2012/6/18 21:26:51", 591
12999, 1340054812, "2012/6/18 21:26:52", 581
14000, 1340054813, "2012/6/18 21:26:53", 585
14998, 1340054814, "2012/6/18 21:26:54", 578
16000, 1340054815, "2012/6/18 21:26:55", 574
16998, 1340054816, "2012/6/18 21:26:56", 572
17999, 1340054817, "2012/6/18 21:26:57", 572
18999, 1340054818, "2012/6/18 21:26:58", 571 etc....etc...

le fichier CSV sur la carte mémoire

millis,stamp,datetime,sensor
1000, 1340054782, "2012/6/18 21:26:22", 620
1999, 1340054783, "2012/6/18 21:26:23", 547
2999, 1340054784, "2012/6/18 21:26:24", 553
3999, 1340054785, "2012/6/18 21:26:25", 560
4999, 1340054786, "2012/6/18 21:26:26", 564
5999, 1340054787, "2012/6/18 21:26:27", 567
7000, 1340054788, "2012/6/18 21:26:28", 571
7999, 1340054789, "2012/6/18 21:26:29", 583
8999, 1340054790, "2012/6/18 21:26:30", 579
9999, 1340054791, "2012/6/18 21:26:31", 584
10999, 1340054792, "2012/6/18 21:26:32", 598
11999, 1340054793, "2012/6/18 21:26:33", 591
12999, 1340054794, "2012/6/18 21:26:34", 598
14000, 1340054795, "2012/6/18 21:26:35", 596
14999, 1340054796, "2012/6/18 21:26:36", 598
16000, 1340054797, "2012/6/18 21:26:37", 597
16999, 1340054798, "2012/6/18 21:26:38", 597
17999, 1340054799, "2012/6/18 21:26:39", 597
impeccable.....même apres avoir enlever et remis la carte SD...

donc manifestement mon code est pas bon...mais ou ???
Encore merci pour votre aide...
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44

Re: Problème d'écriture sur carte SD

Message non lude phil » Mar 19 Juin 2012 09:35

Bonjour,

j'ai lu ton code vite fait. Il y a peut être un problème dans la déclaration de la pin de ton sensor
Tu fais :
Code: Tout sélectionner
const char pin_capteur = 0;   //Numéro de la pin où est relié le capteur en question

Essaye plutôt ça pour voir
Code: Tout sélectionner
int pin_capteur= A0;
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Problème d'écriture sur carte SD

Message non lude Lionel » Mar 19 Juin 2012 09:51

Bonjour,
je crois aussi qu'il y a un souci dans la construction de la chaine... (string)
simplifie le code pour avoir un rendu correct a l'affichage et valider tes fonctions, tu pourras alors l'étoffer ensuite.
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Problème d'écriture sur carte SD

Message non lude Ricky09 » Ven 17 Aoû 2012 12:34

Me voila de retour.....je fais les test et je vous donne le résultat...a bientot
Ricky09
Avatar de l’utilisateur
Ricky09
 
Messages: 10
Inscription: Lun 23 Avr 2012 21:44


Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron