Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Message non lude S3B » Lun 17 Oct 2011 10:18

Bonjour
J'ai du zapper quelque chose.
J'ai reçu et connecté ces 2 shield ( le 2 lignes et le shield mémoire snootlab ).
Je reçois des infos sur la ligne RX que je traite puis de demande à les afficher sur le 2 lignes et en même temps, je log ces valeurs sur la carte mémoire.

Tout se passe à peu près bien sauf que le tout reboot ou gel entre 5min et 1h30 aléatoirement.
J'ai uniquement repris les bouts de code pour écrire sur la SD (cela écrit bien) et pour afficher sur le 2 lignes (fonctionne aussi correctement )

J'ai reformaté la carte de 4G en fat 32 au cas ou mais rien n'y fais.

J'ai fais un test en enlevant la SD et pas de plantage ! ( la routine d'écriture est zappée suite à la détection de l'absence de carte au démarrage )

Dois je désactiver quelque chose pendant le traitement de LCD sur le module mémoire et inversement ? un conflit ?

Merci par avance pour vos lumières ...
Dernière édition par S3B le Jeu 20 Oct 2011 10:04, édité 1 fois.
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude Lionel » Lun 17 Oct 2011 10:25

Bonjour,

vous serait il possible de poster votre code ?
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude S3B » Lun 17 Oct 2011 11:12

Pas de soucis
J'ai juste viré une routine du traitement du signal récupéré sur la ligne RX à 1200 bauds
Code: Tout sélectionner
#include <Wire.h>
#include "RTClib.h"
#include <SD.h>
#include <Deuligne.h>

RTC_DS1307 RTC;

#include <string.h>
#include <SoftwareSerial.h>
#include <avr/io.h>
#include <string.h>
 

//Carte SD
const int chipSelect = 10;
 
//LCD
Deuligne lcd;
 
 
uint8_t errno;
 
#define rxPin 2
#define txPin 3
#define LEDPIN 12
 
unsigned long Chrono = 0;
unsigned long LastChrono = 0;
 
int i = 0;
int j = 0;
 
bool bWriteCard = false;

void setup ()
{
 
  Serial.begin(1200);

   RTC.begin();

   if (! RTC.isrunning())
   {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
   }
 
  Chrono = millis(); 
  LastChrono = Chrono;

  // set up the LCD's number of columns and rows:
  lcd.init();
  // Print a message to the LCD.
  lcd.print("----- EDF ----- ");
  lcd.setCursor(0, 1);
  lcd.print("Version 1.0");
 
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(LEDPIN, OUTPUT);

  Serial.println("TELEINFO");
   
  // 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))
  {
    Serial.println("Card failed, or not present");
    //return;
  }
  else
  {
    bWriteCard = true;
    Serial.println("card initialized.");
  }
  delay(1000);
}

void loop()
{
  Chrono = millis();
 
 
   if (Chrono - LastChrono > 2000)
   {
      DateTime now = RTC.now();
   
     
      // Print a message to the LCD.
      String dataStringCompteur = "HPHC :  ";
      dataStringCompteur+= String(65500,DEC);  //65500 pour l'example, récupéré d'une autre routine
     
      String dataStringConso = "Conso :  ";
      dataStringConso+= String(575,DEC);  //575W en dur récupéré d'une autre routine
      dataStringConso+= " W";
     
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(dataStringCompteur);
      lcd.setCursor(0, 1);
      lcd.print(dataStringConso);
      delay (100);
   
   
      String dataString = "";
      dataString += String(now.year(),DEC);
      dataString += "-";
      dataString += String(now.month(),DEC);
      dataString += "-";
      dataString += String(now.day(),DEC);
      dataString += " ";
      dataString += String(now.hour(),DEC);
      dataString += ":";
      dataString += String(now.minute(),DEC);
      dataString += ":";
      dataString += String(now.second(),DEC);
     
      //Données
      dataString += ";";
      dataString += String(65500);
      dataString += ";";
      dataString += String(32000);
      dataString += ";";
      dataString += String(575);
      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.
      if(bWriteCard)
      {
        File dataFile = SD.open("LogEdf.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);
          //delay (500);
        } 
        // if the file isn't open, pop up an error:
        else
        {
          Serial.println("error opening datalog.txt");
        }
      }
      else
      {
        Serial.println(dataString);
      }
 
 
     delay (500);
     LastChrono = millis();
 
   }
}
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude Lionel » Lun 17 Oct 2011 14:35

Re-
quelques questions et remarques ci-dessous

Quel est votre version d'environnement Arduino ?
Quelle est la version de la librairie RTClib ? l'utilisation de RTC.isrunning() me remonte un erreur
l'#include <string.h> est placé deux fois.
Avez vous essayé sans utilisation du port série ?
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude S3B » Lun 17 Oct 2011 15:07

Merci de vous pencher sur mon pb

la librairie RTCLib est celle que j'ai trouvé en lien depuis la page du forum : adafruit-RTClib-72fc1a4
(après j'avoue après coup que je n'ai pas vérifié si c'était la derniere)

Pour l'arduino, c'est la derniere version, la 22 de mémoire, ca ne passait pas sous X64 sinon

Merci
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude Lionel » Lun 17 Oct 2011 15:34

Ok, merci, c'est moi qui n'avait pas la dernière sur mon PC

Un truc important que je vois à l'instant c'est

Code: Tout sélectionner
#define LEDPIN 12


la pin 12 est utilisée par le shield SD (cf. Mémoire - FAQ - Liste des pins utilisées par le shield Mémoire)

Image

il faut d'ores et déjà changer ceci et choisir une patte disponible.

Pour du debug et tester rapidement, vous pouvez remplacer 12 par 9, la led sur le shield mémoire est disponible pour ça.
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Shield mémoire + 2 lignes > Reboot et plantage

Message non lude S3B » Lun 17 Oct 2011 15:48

Aille !
Ca m'apprendra de faire des copier/coller de 3 exemples pour en faire un rapido.
Je corrige cela ce soir et reprends les tests.

Merci beaucoup, il y a de fortes changes que cela viennent de la.
Je vous tiens au courant.

ps : je viens de repasser une petite commande chez vous avec un shield ethernet, impressionné par votre réactivité et votre sérieux ;)
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

Re: Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Message non lude S3B » Mar 18 Oct 2011 10:48

Petit retour.

Mon problème n'est toujours pas résolu malgré la paramétrage de la led Debug sur la bonne patte.

L'exemple log sur carte SD fonctionne bien seul
L'exemple RTC du DS1307 fonctionne bien

mais dès que je joue avec les 2 dans le même projet, la carte reboot

Je vais repartir de votre exemple logger de temperature pour voir si il en est de même.
Pourtant mes libs sont à priori à jour

@ bientôt

[EDIT]
Après pas mal de recherches et de tests assez incompréhensibles, il s'avère que mes problèmes viennent de la saturation de la mémoire de l'Arduino.
String.. sprintf... bref, je dois changer ma facon de coder et réutiliser de la mémoire allouée dans un tableau déclaré dans le programme. Voir Utiliser l'EEPROM.
[EDIT]
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

Re: Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Message non lude jbb » Mer 5 Déc 2012 20:30

Bonjour,

Je me permet d'intervenir sur votre topic car il me semble avoir un problème assez similaire de coupure intempestive de l'enregistrement sur la SD shield.

Je suis sur un projet d'enregistrement de valeurs de tensions et intensités avec un SD Shield Snootlab et une AT MEGA de DF Robot.

J'ai fais un copié collé du script de l'exemple de Snootlab sur l'enregistrement des valeurs horodatés d'un capteur de température. L'alimentation de l'assemblage SD Shield + AT Mega se fait par un transformateur AC 220V en DC 12 V puis régulé à 9V par un 7809 (+ 1 condensateur de 10 microF en entrée et 3 condo de 10 microF en parallèle en sortie du régulateur), la tension d'alim est donc à priori stabilisée et le tout peut fonctionner sans connection USB à l'ordinateur.

Et tout fonctionne donc pendant quelques heures (ou quelques minutes) avec des valeurs cohérentes jusqu'au moment ou l'enregistrement s'arrête de manière intempestive. Point intéressant : je reconnecte alors l'AT Mega à l'ordinateur via l'USB (cette alimentation faisant alors "doublon" avec l'alim 9V du regulateur), et l'enregistrement reprend instantanément, donc je redéconnecte l'USB et tout se remet à fonctionner jusqu'à l'arrêt suivant. Malheureusement, un tel fonctionnement n'est pas très adapté à ce que je voulais faire puisque je voulais laisser le système fonctionner seul pendant plusieurs mois.

Donc je suis preneur de toute idée, soit pour feinter et permettre de "simuler" une sorte de reconnexion du type de celle que je fais en rebranchant le tout à l'ordinateur via l'USB (la diode de l'AT Mega m'indique que cette carte reste elle toujours alumée), soit pour résoudre plus proprement ce problème. Merci pour tout commentaire.

A Plus

jb
jbb
 
Messages: 5
Inscription: Mer 5 Déc 2012 20:05

Re: Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Message non lude jbb » Jeu 6 Déc 2012 21:54

Salut,

En retirant les lignes de code en relation avec la RTC lib (l'horodatage) du programme je n'ai plus de coupure de l'enregistrement sur le SD shield. Le peu de souci que je porte la mise à jour des librairies est probablement en cause dans cette histoire

Je me passerais de cette librairie pour ce projet. Là ça marche, c'est juste trop bon

j'adresse un gros merci à Snootlab pour avoir mis cette exemple de programme d'enregistrement sur SD shield en ligne

tschuss
jb
jbb
 
Messages: 5
Inscription: Mer 5 Déc 2012 20:05

Re: Shield mémoire + 2 lignes > Reboot et plantage [Résolu]

Message non lude Stéphane » Ven 7 Déc 2012 18:40

De rien, et merci à vous :)
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40


Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité