Go Down

Topic: Adafruit Data Logger Shield et mega 2560 (Read 2492 times) previous topic - next topic

lapenduledargent

Nov 15, 2014, 10:37 pm Last Edit: Nov 15, 2014, 11:03 pm by lapenduledargent
Bonsoir,

J'ai acheté une carte originale Adafruit Data Logger Shield et j'utilise une mega 2560 R3 originale.
https://learn.adafruit.com/adafruit-data-logger-shield/shield-overview

J'ai un problème de lecture de ma carte sd de 4gb. La carte est formatée en fat16 et est reconnue sous ubuntu.

A noté que le RTC DS1307 fonctionne lui sans problème.

Sur la doc d'adafruit https://learn.adafruit.com/adafruit-shield-compatibility/data-logging-shield-assembled

Quote
Arduino Mega 2560 R3 or Mega ADK
The RTC is compatible. For the SD card, the following may be tried, in decreasing order of recommendation:

    Use the Adafruit SD library, specifying pin 10 for chip select, 11 for MOSI, 12 for MISO and 13 for SCK.
    Edit the file utility/Sd2Card.h in the default Arduino SD library, changing line 42 to read "#define MEGA_SOFT_SPI 1" (default is 0).
J'ai donc téléchargé la bonne librairie et adapté le fichier Sd2Card

Rien n'y fait  :smiley-neutral:


J'ai un peu tout essayé sauf ceci

http://www.isn.cligniez.fr/ressources/RTC_SD.pdf

A la page 8 :

Quote
branchez deux fils des broches 4 et 5 du shield vers les broches 20 (SDA) à 21(SCL) de
l'Arduino.
Après il faut brancher les broches 13, 12, 11, 10 du shield vers les broches 52, 50, 51, 53
Mais pour essayer, je dois dessouder car je n'ai pas utilisé des Headers EMPILABLES mais de simples pins


Voilà mon code

Code: [Select]
/*
  SD card basic file example
 
 This example shows how to create and destroy an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** UNO:  MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 4 (CS pin can be changed)
  and pin #10 (SS) must be an output
 ** Mega:  MOSI - pin 51, MISO - pin 50, CLK - pin 52, CS - pin 4 (CS pin can be changed)
  and pin #52 (SS) must be an output
 ** Leonardo: Connect to hardware SPI via the ICSP header
 
 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;

// change this to match your SD shield or module;
//     Arduino Ethernet shield: pin 4
//     Adafruit SD shields and modules: pin 10
//     Sparkfun SD shield: pin 8
const int chipSelect = 10;

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(53, OUTPUT);

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

  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  }
  else {
    Serial.println("example.txt doesn't exist.");
  }

  // open a new file and immediately close it:
  Serial.println("Creating example.txt...");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();

  // Check to see if the file exists:
  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  }
  else {
    Serial.println("example.txt doesn't exist.");  
  }

  // delete the file:
  Serial.println("Removing example.txt...");
  SD.remove("example.txt");

  if (SD.exists("example.txt")){
    Serial.println("example.txt exists.");
  }
  else {
    Serial.println("example.txt doesn't exist.");  
  }
}

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





Une idée ?  Merci d'avance et bonne nuit  ;)

Christian_R

Tu as essayé une autre valeur pour chipselect?
Christian

dudux2

Salut,

C'est sur si tu rajoute pas les cavaliers comme expliqué a la page 8 du pdf, ça ne peut pas fonctionné.

Si après avoir fait la modif et tu n'arrive toujours pas à lire/écrire sur la carte sd, test le logiciel de formatage qu'il fournisse sur le lien ci-dessous (Désolé mais seulement pour Mac et Win).

Sur ce lien voila ce que je peux lire:
https://learn.adafruit.com/adafruit-data-logger-shield/using-the-real-time-clock-1

 We strongly recommend you use the official SD card formatter utility - written by the SD association it solves many problems that come with bad formatting!

lapenduledargent

Bonjour Christian,

Code: [Select]
Tu as essayé une autre valeur pour chipselect?

oui, sans succès  :smiley-fat:

Bonjour dudux2,

J'ai modifié comme indiqué sur le pdf.

Je n'ai pas la possibilté d'essayer le lien pour le formatage sous windows mais il est dit en bas de la page d'adafruit sur le formatage :

Quote
Mega and Leonardo Users!
Don't forget to change sd.begin() to specify the pin numbers as below

SD.begin(10,11,12,13);
Alors, avec le programme cardinfo, lorsque je modifie la ligne dans mon programme et lorsque je compile, j'ai une erreur :

Code: [Select]
no matching function for call to 'SDClass::begin(int, int, int, int)'



lapenduledargent

Alors ça fonctionne à présent en formatant en fat32 et avec le programme "Ecriture et lecture dans la Carte SD" du document pdf : http://www.isn.cligniez.fr/ressources/RTC_SD.pdf

Alors pourquoi Adafruit ne montre pas clairement le câblage de leur shield avec une carte mega ?



Code: [Select]
#include <SD.h> // On importe la librairies SD
#include <SPI.h> // On importe la librairies SPI
#include <Wire.h> // On importe la librairies Wire
#include <RTClib.h>// On importe la librairies RTClib
RTC_DS1307 RTC;
// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 10;
File log_test;
void setup()
{
Serial.begin(9600);
Wire.begin(); // Debut de la communication I2C
RTC.begin(); // Debut de la communication a partir de la librairie RTC
RTC.adjust(DateTime(__DATE__, __TIME__));// Reglage de l'horloge grâce au PC
while (!Serial)
{
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
pinMode(51, OUTPUT); // pin pour communication avec la carte SD
if (!SD.begin())
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// on supprime le fichier si il existe déjà
if (SD.exists("log_test.txt"))
{
Serial.println("Removing log_test.txt...");
SD.remove("log_test.txt");
}
//Premier partie Ecriture:
log_test = SD.open("log_test.txt", FILE_WRITE); // ouverture de fichier.txt en mode écriture
if (log_test) // Si le fichier a bien était ouvert on ecrit la date et l'heure:
{
DateTime now = RTC.now();
log_test.print(now.year());
log_test.print('/');
log_test.print(now.month());
log_test.print('/');
log_test.print(now.day());
log_test.print(' ');
log_test.print(now.hour());
log_test.print(':');
log_test.print(now.minute());
log_test.print(':');
log_test.print(now.second());
log_test.println();
// fermeture du fichier (Sinon rien ne sera écrit!):
log_test.close();
Serial.println("Fini !");
}
else
{
// impossible d'ouvrir/créer le fichier:
Serial.println("Erreur d'ouverture de log_test.txt");
}
//Deuxieme partie Lecture:
log_test=SD.open("log_test.txt");
if(log_test)
{
Serial.println("log_test.txt:");
// lecture du fichier jusqu'à la fin:
while (log_test.available())
{
Serial.write(log_test.read());
}
// Fermeture du fichier:
log_test.close();
}
else
{
// Ouverture impossible:
Serial.println("Ouverture impossible de fichier.txt");
}
}
void loop(void)//le (void) car la fonction loop ne contient rien
{
}


Go Up