Site icon AranaCorp

Utilisation du module SD du shield TFT avec Arduino Mega

5
(2)

Le shield TFT se compose d’un écran tactile et d’un module de carte micro SD qui n’est pas compatible avec la carte Arduino Mega. Nous avons vu dans les précédents tutoriels comment utiliser l’écran du shield et son module de carte SD. Nous allons voir comment modifier la librairie SD pour rendre compatible le module de carte SD et la carte Arduino Mega

Matériel

Explication

Le shield TFT utilise le port SPI pour communiquer avec le module SD. Or, comme la plupart des shields, il est développé pour l’Arduino UNO et n’est pas compatible avec l’Arduino Mega. En effet, les broches du module SD sont connectées aux broches 11,12 et 13 de l’Arduino qui correspond au port SPI d’une UNO mais pas d’une Mega (51,52,53).

Arduino BoardMOSIMISOSCKSS
UNO11121310
Mega51505253

Solution 1: souder les broches

Pour ne pas modifier le code, il est possible de souder les broches selon la liste suivante:

L’avantage est que vous n’avez pas à plongez dans le code des librairies Arduino et vous conservez les performances du port SPI. L’inconvénient est que vous perdez des entrées-sorties.

Solution 2: Modifier la librairie SD.h

Si vous ne souhaitez pas souder des fils sur l’Arduino, vous pouvez modifier le code de la libraire SD.h.

Pour rendre compatible le module SD du shield TFT, il faut modifier 3 fichiers Sd2Card.h, Sd2Card.cpp et SD.cpp

Fichier Sd2Card.h

Ce fichier se trouve dans le répertoire, C:\Program Files (x86)\Arduino\libraries\SD\src\utility

Ligne 47, mettez la variable MEGA_SOFT_SPI à 1, commentez la ligne 38 et placez #define USE_SPI_LIB après la ligne #ifndef SOFTWARE_SPI, ligne 56

/**
   USE_SPI_LIB: if set, use the SPI library bundled with Arduino IDE, otherwise
   run with a standalone driver for AVR.
*/
#define USE_SPI_LIB
/**
   Define MEGA_SOFT_SPI non-zero to use software SPI on Mega Arduinos.
   Pins used are SS 10, MOSI 11, MISO 12, and SCK 13.

   MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used
   on Mega Arduinos.  Software SPI works well with GPS Shield V1.1
   but many SD cards will fail with GPS Shield V1.0.
*/
#define MEGA_SOFT_SPI 0 //XW
//------------------------------------------------------------------------------
#if MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)||defined(__AVR_ATmega2560__))
  #define SOFTWARE_SPI
#endif  // MEGA_SOFT_SPI
//------------------------------------------------------------------------------
// SPI pin definitions
//
#ifndef SOFTWARE_SPI
  // hardware pin defs

/**
   USE_SPI_LIB: if set, use the SPI library bundled with Arduino IDE, otherwise
   run with a standalone driver for AVR.
*/
//#define USE_SPI_LIB
/**
   Define MEGA_SOFT_SPI non-zero to use software SPI on Mega Arduinos.
   Pins used are SS 10, MOSI 11, MISO 12, and SCK 13.

   MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used
   on Mega Arduinos.  Software SPI works well with GPS Shield V1.1
   but many SD cards will fail with GPS Shield V1.0.
*/
#define MEGA_SOFT_SPI 1
//------------------------------------------------------------------------------
#if MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)||defined(__AVR_ATmega2560__))
  #define SOFTWARE_SPI
#endif  // MEGA_SOFT_SPI
//------------------------------------------------------------------------------
// SPI pin definitions
//
#ifndef SOFTWARE_SPI
  #define USE_SPI_LIB

Fichier Sd2Card.cpp

Ce fichier se trouve dans le répertoire, C:\Program Files (x86)\Arduino\libraries\SD\src\utility

Ligne 20, commentez la commande #define USE_SPI_LIB. Puis placez cette ligne dans #if #endif après l’appel du fichier Sd2Card.h

#define USE_SPI_LIB
#include <Arduino.h>
#include "Sd2Card.h"

//#define USE_SPI_LIB
#include <Arduino.h>
#include "Sd2Card.h"
//modif mega
#ifndef SOFTWARE_SPI  //Added to enable use of MEGA
 #define USE_SPI_LIB   
#endif  //SOFTWARE_SPI
//modif mega

Fichier SD.cpp

Ligne 356, modifiez la définition de la fonction SDClass::begin() pour retirer la ligne sdSpiClock.

  boolean SDClass::begin(uint32_t clock, uint8_t csPin) {
    if (root.isOpen()) {
      root.close();
    }

    return card.init(SPI_HALF_SPEED, csPin) &&
           card.setSpiClock(clock) &&
           volume.init(card) &&
           root.openRoot(volume);
  }

#ifndef SOFTWARE_SPI   
  boolean SDClass::begin(uint32_t clock, uint8_t csPin) {
    return card.init(SPI_HALF_SPEED, csPin) &&
           card.setSpiClock(clock) &&
           volume.init(card) &&
           root.openRoot(volume);
  }
#else
  boolean SDClass::begin(uint32_t clock, uint8_t csPin) {
    return card.init(SPI_HALF_SPEED, csPin) &&
           volume.init(card) &&
           root.openRoot(volume);
  }
#endif  //SOFTWARE_SPI

Vous pouvez désormais faire fonctionner le module SD du shield TFT avec la carte Arduino Mega et utiliser les codes des tutoriels précédents.

N.B: N’oubliez pas de mettre MEGA_SOFT_SPI à 0 lorsque vous utilisez une autre carte Arduino.

Sources

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 2

No votes so far! Be the first to rate this post.

Quitter la version mobile