IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Un problème pas banal sur uno: ça fonctionnait et d'un coup, plus rien à faire


Sujet :

Arduino

  1. #1
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut Un problème pas banal sur uno: ça fonctionnait et d'un coup, plus rien à faire
    Bonjour à tous

    Je commence à prendre racine parmi vous, où finalement, je me sens bien.

    Pourtant, cela ne veut pas dire que tout roule comme sur des roulettes. Mon dernier souci est pour moi inexplicable et me complique bien la vie, au point que je patauge depuis quarante huit heures, et mes tentatives n'aboutissent qu'à des impasses.

    J'ai besoin, pour mon application, d'un tout petit peu de RAM sauvegardée, que le shield ds1307 me donne. Il y a 56 octets dispo.

    Ma rtc était la ds3231 et ma eeprom ne convient pas pour ce cas, du fait de la limitation dans le nombre d'écritures.

    J'ai donc approvisionné le shield et je m'occupe à créer les procédures à implanter dans mon application. Je les développe à part, sur un arduino qui ne fait que ça.

    J'ai trouvé des exemples où seule une des deux fonctions (rtc ou RAM) sont testées. Je les ai testées et fait mes choix, pour les faire cohabiter, d'abord dans un sketch "commun" pour les éprouver, et ensuite les recopier dans l'application finale.

    C'est là que ça coince et même pour de bon.

    Ayant isolé et modifié la RTC pour traiter les octets "à ma façon", j'ai ajouté les lignes de programme "volées" dans l'application RAM, et, pour ne pas me faire piéger par des erreurs de syntaxe, j'ai pris l'habitude de vérifier/compiler au fur et à mesure de mes ajouts.

    Là, surprise: un message pas vraiment nouveau, car j'avais déjà rencontré, sans vraiment savoir ce qu'il cache au juste, "ce sketch n'est pas fait pour arduino UNO".

    Je corrige en supprimant mon ajout, mais le compilateur est têtu: le message reste toujours le même.

    Je reteste une série de sketches qui fonctionnaient sur/avec 1307, mais rien à faire. Ils ne veulent plus jouer.

    J'ai supposé que c'était mon UNO qui était en cause. Je l'ai remplacé par MEGA mais c'est tout pareil.

    Après un jour et demi de galères, j'ai supposé que le PC avait été "touché", mais avant de tout supprimer et réinstaller, j'ai préféré tester sur mac sur lequel ce n'était pas installé. Après la galère de l'installation et la domestication sur mac, le comportement est strictement le même.

    Comme c'est pour moi plus facile de manœuvrer sur PC, je suis revenu et le seul sketch par lequel mes problèmes sont arrivés est recopié ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    // Test_01_1307.ino 2 mai 2021 Lecture date/heure sur SD1307
     
    #include<Wire.h>
    #include "RTClib.h"  // les guillemets pour placer la .lib dans le dossier .ino
     
     
    RTC_DS1307 RTC ;
    void printDateTime ( DateTime dateTime ) ;
     
    void setup ()
    {
      // put your setup code here, to run once:
      Serial.begin( 115200 ) ;
      Wire.begin () ;
      RTC.begin () ;
    }
     
    void loop ()
    {
      // put your main code here, to run repeatedly:
      if ( Serial.available () > 0 )
      {
        int instruct = Serial.read () ;
        switch (instruct)
        {
          case'D':
            {
              DateTime now = RTC.now () ;
              printDateTime(now);
              break;
            }
        //  case'S':
        //    {
        //      RTC.set ( RTC_MONTH , 6 ) ;
        //      RTC.set ( RTC_HOUR , 16 ) ;
        //      break;
        //    }
        }
      }
      // delay ( 5000 ) ;
    }
    void printDateTime ( DateTime dateTime )
    {
      Serial.print(dateTime.year(), DEC);
      Serial.print('/');
      Serial.print(dateTime.month(), DEC);
      Serial.print('/');
      Serial.print(dateTime.day(), DEC);
      Serial.print(' ');
      Serial.print(dateTime.hour(), DEC);
      Serial.print(':');
      Serial.print(dateTime.minute(), DEC);
      Serial.print(':');
      Serial.print(dateTime.second(), DEC);
      Serial.println();
    }
    Et voici le raccourci du message final:

    Arduino : 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Carte : "Arduino Uno"

    C:\Users\Guy\AppData\Local\Temp\ccilr3fg.ltrans0.ltrans.o: In function `loop':

    B:\__Arduino_tests\Tests_ds1307\Test_01_1307/Test_01_1307.ino:28: undefined reference to `RTC_DS1307::now()'

    collect2.exe: error: ld returned 1 exit status

    exit status 1

    Erreur de compilation pour la carte Arduino Uno

    A tout hasard, je donne le rtclib.h qui est inclus dans le dossier du .ino, qui est celui nécessaire pour faire fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    // A library for handling real-time clocks, dates, etc.
    // 2010-02-04 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
    // 2012-11-08 RAM methods - idreammicro.com
    // 2012-11-14 SQW/OUT methods - idreammicro.com
     
    // Simple general-purpose date/time class (no TZ / DST / leap second handling!)
    class DateTime {
    public:
        DateTime (long t =0);
        DateTime (uint16_t year, uint8_t month, uint8_t day,
                    uint8_t hour =0, uint8_t min =0, uint8_t sec =0);
        DateTime (const char* date, const char* time);
     
        uint16_t year() const       { return 2000 + yOff; }
        uint8_t month() const       { return m; }
        uint8_t day() const         { return d; }
        uint8_t hour() const        { return hh; }
        uint8_t minute() const      { return mm; }
        uint8_t second() const      { return ss; }
        uint8_t dayOfWeek() const;
     
        // 32-bit times as seconds since 1/1/2000
        long get() const;   
     
    protected:
        uint8_t yOff, m, d, hh, mm, ss;
    };
     
    // RTC based on the DS1307 chip connected via I2C and the Wire library
    class RTC_DS1307 {
    public:
     
        // SQW/OUT frequencies.
        enum Frequencies
        {
            Frequency_1Hz,
            Frequency_4096Hz,
            Frequency_8192Hz,
            Frequency_32768Hz
        };
     
        static void begin() {}
        static void adjust(const DateTime& dt);
        static DateTime now();
     
        // SQW/OUT functions.
        void setSqwOutLevel(uint8_t level);
        void setSqwOutSignal(Frequencies frequency);
     
        // RAM registers read/write functions. Address locations 08h to 3Fh.
        // Max length = 56 bytes.
        static uint8_t readByteInRam(uint8_t address);
        static void readBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data);
        static void writeByteInRam(uint8_t address, uint8_t data);
        static void writeBytesInRam(uint8_t address, uint8_t length, uint8_t* p_data);
     
        // utility functions
        static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
        static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
    };
     
    // RTC based on the PCF8563 chip connected via I2C and the Wire library
    // contributed by @mariusster, see http://forum.jeelabs.net/comment/1902
    class RTC_PCF8563 {
    public:
        static void begin() {}
        static void adjust(const DateTime& dt);
        static DateTime now();
     
        // utility functions
        static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }
        static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); }
    };
     
    // RTC using the internal millis() clock, has to be initialized before use
    // NOTE: this clock won't be correct once the millis() timer rolls over (>49d?)
    class RTC_Millis {
    public:
        static void begin(const DateTime& dt) { adjust(dt); }
        static void adjust(const DateTime& dt);
        static DateTime now();
     
    protected:
        static long offset;
    };
    J'insiste bien sur le fait que ce sketch a tourné sur la machine. Il fallait entrer un D dans la consosole pour afficher l'heure et la date.

    La fonction S n'a jamais fonctionné, je l'ai donc supprimée.

    Je suis à présent à votre écoute. Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Je me réponds à moi-même.

    Je suis bien trop conscient du fait que quelque chose a dû se produire, que je n'ai pas relevé ni corrigé ni ...

    Je viens encore de télécharger des versions qui toutes présentent le défaut.



    Les guillemets ont encore frappé!

    J'ai remplacé les guillemets par les <> et les défauts disparaissent. Cela ne doit pas concerner toutes les bibliothèques mais à coup sûr, la RTClib.h qu'il m'a fallu à un moment changer et qui, au fur et à mesure des évolutions, est devenue incompatible.

    Il me semble bien, dans l'heure qui précède, avoir installé un zip qui a dû placer la bonne version là où les <> vont le chercher.

    Disons que cela fera partie de l'expérience à acquérir pour nager tout seul.

    Merci gienas.

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Vous avez aussi le rtclib.cpp dans le dossier du .ino?

  4. #4
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous


    Citation Envoyé par Jay M Voir le message
    Vous avez aussi le rtclib.cpp dans le dossier du .ino?
    Les dossiers sont toujours dans l'état où ils étaient. Le .cpp n'y est pas.

    Je suppose qu'il n'est pas utilisé par Arduino et seulement en C++ que je n'utilise pas.

    Dans mes recensements de ce qui fonctionne et de ce qui ne fonctionne pas (des divers sketches glanés sur le net), je retrouve des versions qui utilisent les instructions

    RTC_DS1307 writeBytesInRam ( 0x08 , 13 , data ) ;

    et

    RTC.readBytesInRam ( 0x08 , 13 , data ) ;

    Qui ne sont jamais reconnues/acceptées.

    Comme cela se retrouve sur plusieurs sources, que faudrait-il déclarer/utiliser pour les accepter?

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Citation Envoyé par gienas Voir le message
    Les dossiers sont toujours dans l'état où ils étaient. Le .cpp n'y est pas.
    Je suppose qu'il n'est pas utilisé par Arduino et seulement en C++ que je n'utilise pas.
    mauvaise supposition

    D'une part vous utilisez C++ sans le savoir et on inclut le .h dans le .ino pour dire "je vais utiliser ce qui est déclaré dans ce header" (fichier d'en-tête - c'est pour cela que ça s'appelle .h)

    L'IDE arduino de son côté va compiler et effectuer l'édition de lien de tout ce qui est dans le répertoire et puis essayer d'ajouter un peu d'intelligence pour aller trouver les bibliothèques là où elles sont cachées.

    Si vous mettez le include entre "" (guillemets), vous dites au compilateur de regarder dans le dossier courant en priorité, et il faut bien sûr que le .cpp soit aussi là pour que la compilation soit bien complète (c'est à dire que le code associé à ce qui est déclaré dans le .h soit bien trouvé dans la phase d'édition de lien).

    Si vous mettez le include entre <> (angle brackets) alors vous lui dites d'aller regarder uniquement dans les endroits standards d'abord, donc prendre la RTCLib qui est installée dans le dossier libraries et la compilation s’effectue donc avec la bibliothèque générale, avec un potentiel souci de double déclaration s’il n’y a pas de #ifndef au début du .h (généralement ils y sont)

    ==> donc il faut le .cpp aussi dans votre dossier du sketch si vous voulez être indépendant de la bibliothèque (il y a cependant rarement besoin de modifier une bibliothèque en version locale, si on corrige un bug autant le faire dans la bibliothèque, et si c'est pour une extension spécifique, il faut vraiment se poser la question de si c'est pertinent de le faire dans la bibliothèque. On peut faire des sous classes etc...)

  6. #6
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous

    Je me croyais à l'abri des surprises, mais non, et toujours avec le même composant qui me résiste, le bougre.

    J'ai "à peu près" résolu mes problèmes d'heure, mais c'est la RAM qui me porte souci, car elle semble n'avoir, de la RAM, que le nom.

    J'ai trouvé, sur le net, des sketches de démo qui permettent de la mettre en œuvre, j'ai créé mes routines à inclure dans mon programme pour l'exploiter, et voilà que mes vérifications ne collent pas à la réalité.

    Ayant enregistré des valeurs dans la RAM, je les rappelle dans une autre application, et j'ai la (mauvaise) surprise de constater que rien n'est mémorisé, tout est à zéro.

    Pour simplifier, ma "démonstration", j'ai allégé le sketch initial pour n'y laisser que l'enregistrement de 56 octets, contenant les valeurs décimales de 0 à 55, et que je contrôle avant de sortir.

    Voilà le sketch, qui commence d'ailleurs par montrer le contenu initial de la RAM, qui logiquement, lors d'un second lancement, devrait avoir conservé ses valeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    // DS1307_RAM_record_only.ino  Enregistrement et contrôle unique
    // Copyright (C)2016 Rinky-Dink Electronics, Henning Karlsen. All right reserved
    // web: http://www.RinkyDinkElectronics.com/
    //
     
    int cpt ;  // compteur
    #include <DS1307.h>
     
    DS1307_RAM ramBuffer;
    DS1307 rtc(SDA, SCL);
     
    void setup()
    {
      // Setup Serial connection
      Serial.begin(115200);
      // Uncomment the next line if you are using an Arduino Leonardo
      //while (!Serial) {}
     
      // Initialize the rtc object
      rtc.begin();
    }
     
    void bufferDump(char st[])
    {
      Serial.write(st);
      Serial.println("");
      for ( cpt = 0 ; cpt < 56 ; cpt ++)
      {
        Serial.print("0x");
        Serial.print ( ramBuffer.cell [ cpt ] , HEX ) ;
        Serial.print(" ");
        if ( cpt % 20 == 0 ) Serial.print ( "\n" ) ;
      }
      Serial.println("");
      Serial.println("--------------------------------------------------------");
    }
     
    void comment(char st[])
    {
      Serial.println("");
      Serial.print("---> ");
      Serial.write(st);
      Serial.println("");
      Serial.println("");
    }
    void loop()
    {
      // Lecture initiale
      Serial.println("\nCette fonction ne va enregister que 56 octets");
      bufferDump("Initial buffer");
     
      Serial.println("Cette fonction ne va enregister que 56 octets");
      comment("Remplissage RAM par 56 nombres");
     
      for ( int i = 0 ; i < 56 ; i ++  )
     
        ramBuffer.cell [ i ] = i ;
     
      // relecture après l'enregistrement
     
      bufferDump("Relecture après enregistrement");
     
      Serial.println("Ceci laisse bien supposer que l'enregistrement en RAM est effectif.");
      Serial.println("***** Fin de la démo *****");
     
      while ( 1 ) {} ;
    }
    et voilà ce que je lis sur le moniteur:

    Cette fonction ne va enregister que 56 octets
    Initial buffer
    0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    --------------------------------------------------------
    Cette fonction ne va enregister que 56 octets

    ---> Remplissage RAM par 56 nombres

    Relecture après enregistrement
    0x0
    0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x10 0x11 0x12 0x13 0x14
    0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28
    0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37
    --------------------------------------------------------
    Ceci laisse bien supposer que l'enregistrement en RAM est effectif.
    ***** Fin de la démo *****
    Je m'attends donc à disposer de ces valeurs pour le futur.

    J'ai allégé le programme d'écriture, sur un autre sketch, qui ne pratique que la lecture, et me montre ce que contient la RAM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    // DS1307_RAM_read_only.ino ne fait que la lecture des 56 octets de RAM
     
    // Copyright (C)2016 Rinky-Dink Electronics, Henning Karlsen. All right reserved
    // web: http://www.RinkyDinkElectronics.com/
    //
     
    int cpt ;  // compteur
    #include <DS1307.h>
     
    DS1307_RAM ramBuffer;
    DS1307 rtc(SDA, SCL);
     
    void setup()
    {
      // Setup Serial connection
      Serial.begin ( 115200 ) ;
      // Uncomment the next line if you are using an Arduino Leonardo
     
      // Initialize the rtc object
      rtc.begin();
    }
     
    void bufferDump ( char st [] )
    {
      Serial.write ( st) ;
      Serial.println ( "" ) ;
      for ( cpt = 0 ; cpt < 56 ; cpt ++ )
      {
        Serial.print("0x");
        Serial.print ( ramBuffer.cell [ cpt ] , HEX ) ;
        Serial.print ( " " ) ;
        if ( cpt % 20 == 0 ) Serial.print ( "\n" ) ;
      }
      Serial.println("");
      Serial.println("--------------------------------------------------------");
    }
     
    void comment(char st[])
    {
      Serial.println("");
      Serial.print("---> ");
      Serial.write(st);
      Serial.println("");
      Serial.println("");
    }
    void loop ()
    {
      Serial.println ( "\nCette fonction lit 56 octets de la RAM" ) ;
      bufferDump ( "Contenu initial" ) ;
     
      Serial.println ( "***** Fin de la démo de Lecture  *****" ) ;
     
      while ( 1 ) {} ;
    }
    Et sa lecture:

    Cette fonction lit 56 octets de la RAM
    Contenu initial
    0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
    --------------------------------------------------------
    ***** Fin de la démo de Lecture *****
    J'ai le sentiment qu'il y a une manipulation/instruction/commande/... que je ne fais pas et qui ne me donne pas un accès réel à ma RAM.

    La relecture lors de l'enregistrement est conforme à l'attente, mais ne l'est plus en réalité.

    Je n'exclus pas qu'il y ait un mécanisme similaire à celui de la fonction horloge.

    Je pensais que l'on avait un accès "direct" aux registres de l'horloge (les huit premiers octets), mais la réalité n'est pas celle-ci. Il faut lancer une opération qui me paraît encore un peu mystérieuse, pour que le i2c puisse rapatrier les véritables valeurs de l'horloge et donc, probablement, de la RAM, si le "mécanisme" est similaire.

    Merci à ceux qui savent de me mettre le doigt dessus.


    Dans le sketch que je comptais inclure dans mon application, c'est le même sketch, avec un seul setup () qui comporte les deux sections, celle d'un enregistrement de quatre valeurs qui seront rendues décroissantes, et de la fonction de lecture pour vérifier que la mémorisation est effective, et qu'elle progresse bien. Tout cela pour dire que je n'ai pas de lancement de sketch entre un enregistrement et sa vérification.

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 685
    Points : 5 328
    Points
    5 328
    Par défaut
    Un point à vérifier: la NVRAM est non volatile si la pile/batterie fournie (souvent soudée) avec votre RTC est opérationnelle. Certains composants chinois sont livrés avec une batterie en fin de vie ou de mauvaise qualité qui n’alimentera pas la RTC en cas de coupure de courant… pouvez vous tester cette batterie?


    Sinon Je n’utilise ni la ds1307 (elle dérive beaucoup trop vite pour n’importe quelle application qui doit être à l’heure pendant longtemps, je préfère la ds3231) ni la bibliothèque de http://www.rinkydinkelectronics.com/ (je trouve que l’auteur se regarde trop le nombril et a des idées assez bizarre sur la notion de logiciel libre) mais la RTCLib d’adafruit

    RinkyDinky dit aussi dans un message encadré en jaune
    The library has not been tested in combination with the Wire library and I have no idea if they can share pins. Do not send me any questions about this.
    Donc si vous utilisez la bibliothèque wire….(I2C arduino…)

    Pour adafruit, Ils ont un sketch d’exemple d’usage de la RAM. Ce n’est pas la même API mais c’est assez simple d’emploi avec les methodes writenvram() et readnvram()

    Essayez éventuellement avec cette bibliothèque

  8. #8
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Merci pour ces premières réflexions

    Citation Envoyé par Jay M Voir le message
    Un point à vérifier: la NVRAM est non volatile si la pile/batterie fournie (souvent soudée) avec votre RTC est opérationnelle. Certains composants chinois sont livrés avec une batterie en fin de vie ou de mauvaise qualité qui n’alimentera pas la RTC en cas de coupure de courant… pouvez vous tester cette batterie? ...
    Je suis assez tranquille côté pile. J'avais changé, pensant que la tension était faible, mais, en réalité, la borne BAT n'est pas directement à la pile et sa tension n'y est pas significative.

    En outre, lors de mes essais, surtout avec mon sketch double, il n'y a pas de coupure d'alimentation entre les deux modes (lecture et écriture).

    Citation Envoyé par Jay M Voir le message
    ... Sinon Je n’utilise ni la ds1307 (elle dérive beaucoup trop vite pour n’importe quelle application qui doit être à l’heure pendant longtemps, je préfère la ds3231) ...
    Tant que mon application ne tourne pas en vrai, je ne sais pas si c'est vraiment un problème. Comme il sera prévu d'y mettre une remise à l'heure, ce ne sera pas vraiment un problème. Et puis, même si quelques minutes se décalent, ce n'est pas un problème vital.

    Citation Envoyé par Jay M Voir le message
    ... d’adafruit

    RinkyDinky dit aussi dans un message encadré en jaune

    Donc si vous utilisez la bibliothèque wire….(I2C arduino…)

    Pour adafruit, Ils ont un sketch d’exemple d’usage de la RAM. Ce n’est pas la même API mais c’est assez simple d’emploi avec les méthodes writenvram() et readnvram()

    Essayez éventuellement avec cette bibliothèque
    Je tenterai. Cet après midi, j'ai abandonné le soft, et me suis occupé à préparer le prototype hardware.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème mot de passe pas banal
    Par jpclabaux dans le forum Windows 7
    Réponses: 11
    Dernier message: 18/11/2011, 16h25
  2. Problème d'hyperlien sur MAC mais pas sur PC
    Par bobino75 dans le forum Langage
    Réponses: 1
    Dernier message: 10/07/2009, 17h31
  3. Réponses: 0
    Dernier message: 02/06/2009, 15h09
  4. Réponses: 1
    Dernier message: 31/05/2009, 23h54
  5. [JavaScript] [FAQ] Mon xhr ne se met pas à jour (problème du cache) sur IE
    Par FremyCompany dans le forum Contribuez
    Réponses: 3
    Dernier message: 07/01/2009, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo