Page 1 sur 1

Problème d'écriture sur carte SD

Message non luPosté: Ven 25 Mai 2012 22:27
de Ricky09
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.

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

Message non luPosté: Ven 25 Mai 2012 23:19
de Ricky09
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

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

Message non luPosté: Sam 26 Mai 2012 15:16
de Ricky09
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...

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

Message non luPosté: Mar 29 Mai 2012 09:03
de Lionel
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

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

Message non luPosté: Dim 3 Juin 2012 12:15
de Ricky09
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).

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

Message non luPosté: Lun 11 Juin 2012 18:14
de Ricky09
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.

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

Message non luPosté: Lun 11 Juin 2012 19:36
de Lionel
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

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

Message non luPosté: Mer 13 Juin 2012 10:54
de Lionel
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

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

Message non luPosté: Lun 18 Juin 2012 20:37
de Ricky09
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...

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

Message non luPosté: Mar 19 Juin 2012 09:35
de phil
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;

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

Message non luPosté: Mar 19 Juin 2012 09:51
de Lionel
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.

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

Message non luPosté: Ven 17 Aoû 2012 12:34
de Ricky09
Me voila de retour.....je fais les test et je vous donne le résultat...a bientot