Problemes ecriture et lecture eeprom Arduino Mega 2560

Bonsoir a tous, j'essaie de faire fonctionner un Arduino Mega 2560 en ecriture et lecture eeprom sans succes.
Le meme code fonctionne trés bien avec un Arduino 2009.

Avez vous une idée ?

Cordialement,
Fred

Bonsoir,

Se serais possible d'avoir le code pour voir ce qui va pas :wink:

Edit: Est quelle est ta version de l'ide arduino ?

Peut être que le probléme vient de là :
Google Code Archive - Long-term storage for Google Code Project Hosting. -> solution : Bootloader for Arduino Mega2560

Oui Skywodd, voici le code, il s'agit d'un altimetre + variometre et horloge, j'ai enfin reussi a faire fonctionner mon EFIS, j'assaie juste de le faire tourner sur un Mega 2560 car il dispose plus d'entrées.

Amicalement Fred

adi_main.zip (15.5 KB)

Excuse moi j'ai essaié avec plusieurs IDE 0018 Fr, 0022, 1.00 et chipKit, c'est pareil

Je viens de regarder ton code (enfin juste la partie EEPROM) et j'ai rien vu de bizarre...
ça doit venir d'un bug hardware ou au niveau de la librairie EEPROM, essaye d'utiliser la version mise à jours du lien que j'ai posté plus haut pour voir.
C'est quand même trés bizarre comme bug ...

Je viens de changer le fichier eeprom.h avec le lien que tu m'a donné, c'est pareil

A propos, voici le code source original

http://dangerpants.com/labs/adi/

Essaye de voir si ce code de test pour l'eeprom marche :

// Inclusion de la librairie EEPROM
#include <EEPROM.h>

/*
Une écriture sur EEPROM prend 3.3 ms.
 La durée de vie d'une EEprom est de 100000 cycles d'écriture/lecture.
 Soyez donc prudent sur l'utilisation que vous en faite, l'EEprom interne ne peut pas être changer/réparé.
 */

// Texte qui va être stocker en EEPROM
char texte[7] = {
  'A', 'r', 'd', 'u', 'i', 'n', 'o'};

void setup()
{
  Serial.begin(9600); // Configuration du port série
}

void loop()
{
  while(Serial.available() < 0); // Attente d'un octet sur le port série
  char c = Serial.read(); // Lecture de cet octet
  byte i;

  if(c == 'w') // Si on a recu 'w'
    for (i = 0; i < 7; i++)
      EEPROM.write(i, texte[i]); // On écrit "Arduino" dans l'eeprom
  else if (c == 'r') // Si on a recu 'r'
    for (i = 0; i < 7; i++)
      Serial.print(EEPROM.read(i)); // On renvoi le contenu de l'eeprom sur le port série
}

(^c^v depuis [Tutoriel Arduino] EEPROM, Random et Servo | Skyduino - Le DIY à la française)

Une fois que tu aura uploadé le programme ouvre le serial monitor à 9600bauds et envoi w puis appui sur le buton de reset et ~5sec plus tard envoi r, si tu vois "arduino" s'afficher c'est que l'eeprom marche sinon c'est qu'il y a un probléme hardware ou alors un probléme spécifique à ton ordi/plateforme.
Tu est sous linux, mac ou windows ?

Je suis sous windows xp pro sp3, ton prog marche visiblement "Arduino" affiché

haha! Donc se serais un probléme avec le code de base ...

Oui je pense que c'est une incopatibilite du code par rapport aux differents arduino.
Par exemple j'ai un code qui fonctionne avec le 2009 et mega 2560 mais pas avec le uno32.
J'ai mis deux lignes de codes en commentaire et hop le voila qui fonctionne avec le uno32, va comprendre...

Salut Skywodd, j'ai trouvé en mettant en commentaire ces ligne (en gras) , cela fonctionne avec l'EEPROM. Par contre je ne peux plus avoir la sortie serie qui elle est importante, as tu une idée ?

Amicalement Fred

#ifdef SERIAL_ON
//Serial.begin(9600);#endif

ainsi que (en gras):
void output_line(int lineno, char * string)
{
// let's keep from spamming the serial line, shall we?
/* Uncomment for any serious serial usage /
/

if (millis() - last_print < 100)
** {**
** last_print = millis();**
** return;**
** }**

// printf("%d: %s\n", lineno, string);
// Serial.println(string);*/
lcd.setCursor(0, lineno);
lcd.print(string);
}

C'est vraiment bizarre les lignes que tu as commenté n'ont aucun rapport avec l'EEprom ... je vois vraiment quel peut être le probléme désolé :.

J'ai également essayé de bouger ces lignes a des endroits differents, c'est pareil..la chose qui me fait rager est que ce code tourne super bien avec l'arduino 2009.

Salut Skywodd, aprés quelques recherches, je me suis aperçu d'avoir un'autre variante de ce code.
Je me suis donc impressé de l'essayer et la ... miracle tout marche nickel avec le 2560.

Par contre il me reste plus qu'a rassembler tout ce beau monde avec l'ajout d'un dernier bout de code qui est le fichier ha.pde, ma question peux tu me donner le dernier coup de main pour inserer ce code dans le fichier final qui est adi_main.pde car j'ai essayé mais le resultat final est delirant car je n'arrive pas a placer ce code au bon endroit sur le code existant.

Merci d'avance Skywodd

Cordialement Alfred

adi_main.zip (14.1 KB)

J'ai essayé de te faire un mix des deux code, par contre je pense qu'il faudra peut être commenter #define SERIAL_ON de adi_main.h pour éviter d'avoir des problémes avec le port série (mais pas sur).
J'ai pas pu compiler ton code (j'avais pas la RTClib) donc il faudra que tu test par toi même :wink:

adi_main.zip (14.3 KB)

Merci Skywodd j'essai et je te tiens au courant, sinon voici la librerie RTCLib si tu veux essayer
Fred

RTClib.zip (2.59 KB)

Salut Skywodd, merci ton mix, par contre il me perturbe le calibrage du 6DOF (Horizon Artificiel)... Au demarrage il me fait delirer l'altimetre qui monte puis il descend.

Normalement a la mise sous tension l'afficheur me donne Pression: 1018 [ 315Ft] par contre moi maintenant j'ai Pression: [ 0Ft] puis l'altimetre delire...

Cependant j'ai remarqué que si je met Calibrate(); en commentaire il refonctionne correctement a mon avis Calibrate(); est sur un mauvais endroit dans le code..qu'n penses tu ?

/* MODIF HA.PDE */
delay(300); // Attente avant la "Mise en route"
Calibrate(); // Calibrage des Capteurs IMU 6DOF
pre_time = millis(); // Mise en mémoire de l'heure pour calcul du temps "précédent"

Je me tate si je vais pas mettre deux Arduino UNO un pour l'altimetre, vario etcc l'autre pour le gps et l'horizon artificiel peut etre le fait de les separer marchera avec precision et sans perturbations...c'est bete parce que le 2560 a toutes les entrées necessaires pour l'ensemble.

La calibration se fait peut être autre par, je sais pas ... si une fois en commentaire ça marche autant y laisser comme ça.

Merci Skywodd, je vais tester sinon je vais opter pour 2 arduino..La bonne soirée a toi et encore merci
Amicalement Fred