RTC I2C - Horloge et sortie 1 Hz

Bonjour à tous.

Je cherche à avoir une sortie en 1 Hz grâce à un module RTC I2c.
J’ai regardé de nombreux tuto mais ça ne marche tjrs pas.

Je me suis basé sur ce tuto forum.snootlab.com • Afficher le sujet - Horloge DS1307 : fonctionnalités méconnues entre autre .

// SQW/OUT signal functions using a DS1307 RTC connected via I2C and Wire lib.
// 2012-11-14 idreammicro.com http://opensource.org/licenses/mit-license.php

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
    
    // Set SQW/Out signal frequency to 1 Hz.
    RTC.setSqwOutSignal(RTC_DS1307::Frequency_1Hz);
}

void loop () {
    // Nothing to do.
}

Mais soit cela ne se compile pas(Avec ce code) soit avec d’autre programme j’ai un défaut de carte.

J’ai ce module et le même branchement avec une carte arduino Micro: Tutoriels pour Arduino • Afficher le sujet - Module Real Time clock RTC DS1307 Tutoriel Arduino

Merci d’avance

#include <RTClib.h>elle vient d’où votre librairie?

il faut utiliser celle ci si vous voulez avoir accès à la fonction setSqwOutSignal

vous avez peut-être celle d 'adafruit qui s’appelle aussi RTClib qui est installée. Si vous utilisez celle d’Adafruit alors ils ont un enum avec différente valeurs

// RTC based on the DS1307 chip connected via I2C and the Wire library
enum Ds1307SqwPinMode { OFF = 0x00, ON = 0x80, SquareWave1HZ = 0x10, SquareWave4kHz = 0x11, SquareWave8kHz = 0x12, SquareWave32kHz = 0x13 };

et la méthode à appeler sur votre instance RTC est static void writeSqwPinMode(Ds1307SqwPinMode mode);

Vous avez un exemple ici qui passe chaque mode en revue

j’ai changer ma librairie pour la remplacer par celle indiquée,

Si je compile le code donné sur le message au dessus ''exemple ici qui passe chaque mode en revue" (le même que les exemples arduino) ça fonctionne partiellement en suivant également la même méthode en changeant cette ligne comme dis dans le message:

// RTC based on the DS1307 chip connected via I2C and the Wire library
enum Ds1307SqwPinMode { OFF = 0x00, ON = 0x80, SquareWave1HZ = 0x10, SquareWave4kHz = 0x11, SquareWave8kHz = 0x12, SquareWave32kHz = 0x13 };

Mais ça bloque sur la ligne suivante:

“”

void print_mode() {
Ds1307SqwPinMode mode = rtc.readSqwPinMode();

“”

Voici mon code avec juste le changement de la ligne …Ds1307SqwPinMode… :

// SQW/OUT pin mode using a DS1307 RTC connected via I2C.
//
// According to the data sheet (http://datasheets.maxim-ic.com/en/ds/DS1307.pdf), the
// DS1307's SQW/OUT pin can be set to low, high, 1Hz, 4.096kHz, 8.192kHz, or 32.768kHz.
//
// This sketch reads the state of the pin, then iterates through the possible values at
// 5 second intervals.
//

// NOTE:
// You must connect a pull up resistor (~10kohm) from the SQW pin up to VCC.  Without
// this pull up the wave output will not work!

#include <Wire.h>
#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_DS1307 rtc;

int mode_index = 0;

// RTC based on the DS1307 chip connected via I2C and the Wire library
enum Ds1307SqwPinMode { OFF = 0x00, ON = 0x80, SquareWave1HZ = 0x10, SquareWave4kHz = 0x11, SquareWave8kHz = 0x12, SquareWave32kHz = 0x13 };

void print_mode() {
  Ds1307SqwPinMode mode = rtc.readSqwPinMode();
  
  Serial.print("Sqw Pin Mode: ");
  switch(mode) {
  case OFF:             Serial.println("OFF");       break;
  case ON:              Serial.println("ON");        break;
  case SquareWave1HZ:   Serial.println("1Hz");       break;
  case SquareWave4kHz:  Serial.println("4.096kHz");  break;
  case SquareWave8kHz:  Serial.println("8.192kHz");  break;
  case SquareWave32kHz: Serial.println("32.768kHz"); break;
  default:              Serial.println("UNKNOWN");   break;
  }
}

void setup () {

#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(57600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  print_mode();
}

void loop () {
  rtc.writeSqwPinMode(modes[mode_index++]);
  print_mode();

  if (mode_index > 5) {
    mode_index = 0;
  }

  delay(5000);
}

Donc voila le problème qu’il y a pour avoir le signal de 1Hz :slight_smile: :slight_smile: :slight_smile:
Merci d’avance

Vous avez vu dans le code la note qui dit

// NOTE:
// You must connect a pull up resistor (~10kohm) from the SQW pin up to VCC.  Without
// this pull up the wave output will not work!

vous avez ça?

Je ne l'avais pas mis pour ce montage effectivement mais ça ne ce compile pas. Donc le programme n'est pas chargé par chargé dans la carte arduino.