Exemple de code de manipulation de la broche SQW d'un module RTC DS1307

par skywodd | | Langue : C++ | Licence : GPLv3

Description :

Exemple de code de manipulation de la broche SQW d'un module RTC DS1307.

Compatible Arduino 0023 et Arduino 1.x (et supérieur).

Code source :

Voir le code source brut | Télécharger ds1307_sqw.ino | Télécharger ds1307_sqw.ino.zip

/**
 * Exemple de code de manipulation de la broche SQW d'un module RTC DS1307.
 * Compatible Arduino 0023 et Arduino 1.x (et supérieur).
 */

/* Dépendances */
#include <Wire.h>
#include "DS1307.h"


/* Rétro-compatibilité avec Arduino 1.x et antérieur */
#if ARDUINO >= 100
#define Wire_write(x) Wire.write(x)
#define Wire_read() Wire.read()
#else
#define Wire_write(x) Wire.send(x)
#define Wire_read() Wire.receive()
#endif


/**
 * Fonction de sélection du mode de fonctionnement et de la polarité (HIGH ou LOW) de la broche SQW.
 */
void set_sqw_pin_mode(DS1307_Mode_t mode, byte polarity) {
  
  /* Calcul la valeur du registre de contrôle */
  byte ctrl_register = !!polarity << 7; // OUT = polarity
  if (mode != SQW_DC) {
    ctrl_register |= 1 << 4; // SQWE = 1
    ctrl_register |= mode & 3; // RSx = mode
  } 
  
  /* Début de la transaction I2C */
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire_write(DS1307_CTRL_REGISTER); // Ecriture mémoire à l'adresse 0x07
  Wire_write(ctrl_register);
  Wire.endTransmission(); // Fin de transaction I2C
}


/** Fonction setup() */
void setup() {
  
  /* Initialise le port série */
  Serial.begin(115200);
  
  /* Initialise le port I2C */
  Wire.begin();
  
  /* Modification la configuration de la broche SQW */
  //set_sqw_pin_mode(SQW_DC, LOW);
  //set_sqw_pin_mode(SQW_DC, HIGH);
  set_sqw_pin_mode(SQW_1_HZ, 0);
  //set_sqw_pin_mode(SQW_4096_HZ, 0);
  //set_sqw_pin_mode(SQW_8192_HZ, 0);
  //set_sqw_pin_mode(SQW_32768_HZ, 0);
}


/** Fonction loop() */
void loop() {
  // Rien à faire
}