Enregistrement sur carte sd à partir d'un Pro mini 3.3

Bonjour à tous !

Je suis nouveau sur ce forum et je débute sur arduino, veuillez me pardonner si certains de mes questions vous paraissent évidentes. :blush:

J’ai un projet qui est de relever la température d’un pneumatique de karting et d’enregistrer les valeurs sur une carte SD.

Pour cela j’ai acheté une platine qui intègre le capteur de température infrarouge MLX90614 et a les mêmes caractéristiques que l’arduino pro mini 3.3v. à l’aide de la librairie I2C j’ai réussi à récupérer la température et alimenter 4 Led en fonction de la température.

Me reste à enregistrer cette température sur une carte SD via le bus SPI et là je bloque.

J’utilise un shield SD LC studio comme celui-ci : http://duino4projects.com/wp-content/uploads/2013/03/Arduino-SD-Card-Logging-Shield.jpg

Le schéma de ma platine : http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/MLX90614-IR_Eval-v16.pdf

Pour le branchement je branche

  • le 3.3v de mon module « AVR_SPI_PRG » sur le 3.3v de la platine SD
  • Le gnd de mon module « AVR_SPI_PRG » sur un des deux GND de la platine SD
  • Le MISO de mon module « AVR_SPI_PRG » sur le MISO de la platine SD
  • Le MOSI de mon module « AVR_SPI_PRG » sur le MOSI de la platine SD
    -Le SCK de mon module « AVR_SPI_PRG » sur le SCK de la platine SD

Jusqu’ici ça paraît évident (sait-on jamais …)

-Je branche le RESET de mon module « AVR_SPI_PRG » sur le CS de la platine SD

Dans un premier temps est-ce que le branchement paraît cohérant (surtout au niveau RESET/CS) ?

J’ai ensuite pris le code dans la librairie SD ReadWrite

/*
  SD card read/write

 This example shows how to read and write data to and from an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4

 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;

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

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

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

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

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

J’ai comme tous débutants aurait fait testé ce code sur ma carte afin de voir s’il détectait au moins la carte SD, ce qui n’a bien sûr pas fonctionné, sur le moniteur série j’ai initialization failed!… Si le problème ne vient pas du branchement je suppose que le problème vient de la correspondance des Pins, Le Hic c’est que je ne trouve pas la correspondance des Pins de ma platine ( pour alimenter les leds j’ai fait au hasard pour trouver que PC0, PC1, PC2et PC3 correspondaient aux pins 14,15,16,17)

const int ledb = 14;
const int ledv = 15;
const int ledj = 16;
const int ledr = 17;

Je pense que le problème vient du fait que je débute et que j’ai sûrement pas cherché ou il faut mais que ce soit sur le schéma de la platine ou sur le schéma de la datasheet du ATmega328 je retrouve pas ces correspondances.

Si quelqu’un pouvait m’expliquer au moins la correspondance des Pins de ma platine et donc les Pins à remplacer sur le code SD ReadWrite.
j’utilise une carte SD 8GO il n’y a pas de capacité maximal à respecter ?

Merci d’avance,

Bonsoir,

Pour CS je me doutais bien que j'étais à côté de la plaque, le problème étant que je n'ai plus de sorties accessibles

Les 6 Pins du haut correspondent au bus SPI (3.3, GND, MISO, MOSI, CLK) et au RST, je me sers des 4 sorties PC0, PC1, PC2, PC3 et donc je n'ai plus de sorties disponibles pour le CS

donc je n'ai plus de sorties disponibles pour le CS

Je ne sais plus si tu as plusieurs modules ISP à gérer mais si tu n'en a qu'un seul tu peu connecter le CS du module en permanence au bon potentiel, coté module le CS n'est utile QUE pour différencier les modules.

Mais attention il y a un piège : La pin CS coté arduino sert aussi a placer le module SPI de l'Atmega en mode esclave.
Si la pin CS coté arduino est configurée en entrée elle ne doit JAMAIS recevoir le niveau corespondant au mode esclave (je ne sais plus si c'est 1 ou 0 --> c'est écrit dans la datasheet).
Donc si tu as besoin de cette pin pour un autre usage il faut qu'elle soit configurée en sortie.

Etant donné que je ne gère qu'un seul module ISP je n'ai même pas besoin de brancher le CS du module mais je doit mettre celui de la carte pro mini en sortie ?

Oui il y a un risque que le module SPI du mini-pro se retrouve en mode esclave si tu utilise mal la pin CS.

Je ne peux que te conseiller de lire la partie concernant le SPI dans la datasheet du micro que tu utilises.
C'est mieux expliqué que je ne pourais le faire.

Bonsoir,

Merci beaucoup pour votre aide le problème venait bien de la sortie CS de la pro mini ( en plus d'un petit défaut de branchement ::slight_smile: )

J'ai réussit à l'intégrer à mon programme, j'arrive à enregistrer ma variable de température sur la carte SD le seul petit soucis que j'ai c'est que j'aimerais pouvoir créer un nouveau fichier texte à chaque reset de la pro mini de sorte :

liste de température 1
liste de température 2
liste de température 3
ect...

Je sais pas si c'est possible et si vous sauriez, mais dans tous les cas encore merci ! :slight_smile: