Bonjour je suis nouveau dans le monde d'Arduino.
Mon problème : J'ai un module Tiny RTC DS1307 sur UNO
J'ai essayé bon nombre de librairies RTC mais rien y fait.
j'ai toujours :
RTC ne fonctionne pas
165,165,165 165,165,85 qui s'affiche dans le moniteur série.
seule la mise à l'heure et date fonctionne quand j'utilise l'exemple softrtc dont voici le code
// Date and time functions using just software, based on millis() & timer
#include <Arduino.h>
#include <Wire.h> // this #include still required because the RTClib depends on it
#include "RTClib.h"
#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif
RTC_Millis rtc;
void setup () {
Serial.begin(57600);
// following line sets the RTC to the date & time this sketch was compiled
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" seconds since 1970: ");
Serial.println(now.unixtime());
// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
j'ai mis des résistances pull-up mais même résultat.
quand j'utilise des programme test avec RTCsetup cela ne fonctionne pas sauf avec RTC_Millis
Utilise, si ce n'est pas déjà fait, un scanner I2C (on en trouve plusieurs sur le net).
Normalement tu devrais détecter :
Si le module horloge ne comporte qu'un seul circuit intégré DS1307 (c'est rare) un module à l'adresse 0x68 et si module comporte aussi comme très souvent un circuit intégré EEPROM une autre adresse que j'ai oubliée mais l'important c'est :
1 seul CI --> une adresse
2 CI ---> deux adresses.
Et surtout fait la manip avec rien d'autre de raccordé sur le microcontrôleur..
Si jamais le module refuse de répondre et que tu en achète un autre prend un D3231 : même prix mais bien, bien plus précis.
RTC_Millis n'exploite pas le DS1307 mais la fonction millis() de l'arduino..
Pour utiliser le DS1307 il faut instancier un objet RTC_DS1307.
Regarde un peu les exemples qui sont inclus dans la librairie. Tu peux aussi lire les commentaires de RTClib.h
merci pour l'info sur Millis.
j'ai testé tous les exemples RTC Adafruit et seul softrct qui utilise Millis, fonctionne.
je crois que je suis bon pour en acheté un autre non?
Voila j'ai l'accu rechargeable, je l'ai laissé se rechargée 2h sur le module qui est raccordé à l’Arduino uno.
Raccordé le SDA sur A4, le SCL sur A5, GND sur GND, VCC sur le +5V
J’ai retiré et mesuré l’accu à 4,3V .
Je l'ai remise sur le module Tiny RTC I2C, puis, j'ai utilisé le programme scanner_I2C qui me donne :
Scanning ...
I2C device found at adress 0x50
I2C device found at adress 0x68
Donc c'est qu'il détecte bien le module … en principe
Mais en utilisant RTCLib pas de mise à l'heure possible
Il affiche, via le moniteur série, 10 :10 :58 2 septembre 2021(voir photo)
Et voici le programme utilisé :
#include <RTClib.h>
#include <Wire.h>
RTC_DS1307 RTC;
void setup () {
Serial.begin(9600);
Wire.begin();
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__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}
je ne sais plus quoi faire.
Avez-vous des suggestions
dans ton programme, la RTC n'est mise à l'heure que si elle ne tourne pas. Donc si elle tourne mais que l'heure est incorrecte elle n'est pas reprogrammée. Ce qu pourrait expliquer le 2021.
dans la copie d'écran, il se passe exactement 8s entre la sortie de chaque ligne. Donc:
a) sont le processeur va trop lentement (problème d'horloge du processeur). Dû, soit à un quartz défectueux, soit à une mauvaise programmation des fusibles du processeur.
b) la RTC va trop vite, quartz défectueux sur la carte portant la RTC
Pour lever le doute tu peux déjà vérifier si le programme blink tourne à la bonne vitesse sur ta carte Arduino.
Edit: à la réflexion, si l'arduino était mal configuré la vitesse de la console ne serait pas bonne et tu l'aurais déjà vu.