Arduino Mega 2560 and sd card module

Arduino Mega 2560 and sd card module

Arduino Mega 2560 and sd card module

I bought a sd card module some time ago, from a Chinese seller on Ebay. These modules are really cheap, I paid 2,03€ for it and that includes shipping to Belgium. You really wonder how they can do it. To try it out I connected the sd card module to my Arduino Uno and uploaded the data logger example sketch. This sketch reads the value of 3 analogue inputs and logs it to a file on the sd card. This worked out of the box. Then I tried doing the same with my Arduino Mega 2560 and it caused me some head scratching. I plugged my sensor shield on the mega, this shield has a break out connector for a sd card module. Unfortunately the pinout of this connector is not written on the board itself. After some googling I finally found a small drawing with the pinout of the connector.

Arduino Mega shield

Arduino Mega shield

The sd card talks to the Arduino over the SPI bus. The Mega 2560 uses different pins for the SPI then the Uno. This caused me some trouble in getting the sketch to work. In the example data logger sketch the chipselect pin is set to 4, and the pinmode for pin 10 is to output. This is necessary for the sd library to work. After some fiddling I found that for the Mega 2560 you have to set both to pin 53 for the sd library to work :)
Here is the sketch:

/*

http://www.bajdi.com

  SD card datalogger for Arduino Mega (this sketch will ONLY work with Arduino Mega) 

 This example shows how to log data from three analog sensors
 to an SD card using the SD library.

 The circuit:
 * analog sensors on analog ins 0, 1, and 2
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 51
 ** MISO - pin 50
 ** CLK - pin 52
 ** CS - pin 53

 created  24 Nov 2010
 updated 2 Dec 2010
 by Tom Igoe
 updated 22 Jan 2012 for Arduino Mega
 by Bajdi.com 

 This example code is in the public domain.

 */

#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 53;

void setup()
{
  Serial.begin(9600);
  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(53, OUTPUT);

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
}

void loop()
{
  // make a string for assembling the data to log:
  String dataString = "";

  // read three sensors and append to the string:
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}

Leave a Reply