Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DS_3231.h
- Committer:
- snec_student
- Date:
- 2022-03-06
- Revision:
- 0:d801ad2b1422
File content as of revision 0:d801ad2b1422:
#include "mbed.h"
#ifndef DS_3231_H
#define DS_3211_H
#define DS3231_I2C_ADRS 0x68
#define I2C_WRITE 0
#define I2C_READ 1
#define AM_PM (1 << 5)
#define MODE (1 << 6)
#define DY_DT (1 << 6)
#define ALRM_MASK (1 << 7)
/** definition d'une structure de type temps
* DS_3231_time_t - Structure permettant de cntenir un temps
* Membres:
* - uint32_t seconds - Use decimal value. Member fx's convert to BCD
* - uint32_t minutes - Use decimal value. Member fx's convert to BCD
* - uint32_t hours - Use decimal value. Member fx's convert to BCD
* - bool am_pm - TRUE for PM, same logic as datashee
* - bool mode - TRUE for 12 hour, same logic as datasheet */
typedef struct { //
uint32_t seconds; //valeur des secondes
uint32_t minutes; //valeur des minutes
uint32_t hours; //valeur des heures
bool am_pm; // 0 pour AM, 1 pour PM
bool mode; // 0 pour format 24 heures, 1 pour format 12 heures
} DS_3231_time_t;
/**definition d'une structure de type alarme
* Members:
* - uint32_t seconds - Use decimal value. Member fx's convert to BCD
* - uint32_t minutes - Use decimal value. Member fx's convert to BCD
* - uint32_t hours - Use decimal value. Member fx's convert to BCD
* - uint32_t day - Use decimal value. Member fx's convert to BCD
* - uint32_t date - Use decimal value. Member fx's convert to BCD
* - bool am1 - Flag for setting alarm rate
* - bool am2 - Flag for setting alarm rate
* - bool am3 - Flag for setting alarm rate
* - bool am4 - Flag for setting alarm rate
* - bool am_pm - TRUE for PM, same logic as datasheet
* - bool mode - TRUE for 12 hour, same logic as datasheet
* - bool dy_dt - TRUE for Day, same logic as datasheet
*/
typedef struct
{
//Seconds and am1 not used for alarm2
uint32_t seconds;
uint32_t minutes;
uint32_t hours;
uint32_t day;
uint32_t date;
bool am1;
bool am2;
bool am3;
bool am4;
bool am_pm;
bool mode;
bool dy_dt;
}DS_3231_alrm_t;
/**Definition des registres de configuration et d'etat
* Members:
* - uint8_t control - Binary data for read/write of control register
* - uint8_t status - Binary data for read/write of status register
*/
typedef struct
{
uint8_t control;
uint8_t status;
}DS_3231_cntl_stat_t;
/******************************************************************//**
* Ds3231 Class
**********************************************************************/
class DS_3231
{
uint8_t w_adrs, r_adrs; // declaration des adresses I2C en ecriture et en lecture
public :
/**
* ds3231_regs_t - enumerated DS3231 registers
*/
typedef enum {
SECONDS,
MINUTES,
HOURS,
DAY,
DATE,
MONTH,
YEAR,
ALRM1_SECONDS,
ALRM1_MINUTES,
ALRM1_HOURS,
ALRM1_DAY_DATE,
ALRM2_MINUTES,
ALRM2_HOURS,
ALRM2_DAY_DATE,
CONTROL,
STATUS,
AGING_OFFSET, //don't touch this register
MSB_TEMP,
LSB_TEMP
} DS3231_regs_t;
// constructeur avec 2 broches I2C
DS_3231 (PinName SDA, PinName SCL);
// ecrire l'horaire sur l'horloge
// arguments : structure de type horaire
// cette fonction renvoie 0 si opération OK,1 si capteur absent
uint16_t set_time(DS_3231_time_t time);
// Lire l'horaire sur l'horloge
// arguments : pointeur vers une structure de type horaire
// cette fonction renvoie 0 si opération OK,1 si capteur absent
uint16_t get_time(DS_3231_time_t* time);
// programmer une alarme sur l'horloge
// arguments : structure de type alarme, numero de la voie alarme 0/1 pour alrm1/2
// cette fonction renvoie 0 si opération OK,1 si capteur absent
uint16_t set_alarm(DS_3231_alrm_t alarm, bool one_r_two);
// programmer les registres d'etat et de controle sur l'horloge
// arguments : structure de type registre de controle/etat
// cette fonction renvoie 0 si opération OK,1 si pb
// Example:
/* //do not use 0xAA, see datasheet for appropriate data
* ds3231_cntl_stat_t data = {0xAA, 0xAA};
*
* rtn_val = rtc.set_cntl_stat_reg(data);
*
* @endcode
**************************************************************/
uint16_t set_cntl_stat_reg(DS_3231_cntl_stat_t data);
// raz flag alarme
char raz_alm1();
private :
/**********************************************************//**
* Conversion d'un uint8_t en bcd
* argument: valeur de la valeur à convertir en BDC (0 à 255)
* valeur retournée : = valeur convertie en BCD
* par exemple unint16_t toto = uchar_2_bcd(323); => toto = 0x323
**************************************************************/
uint16_t uchar_2_bcd(uint8_t data);
// la classe possede en interne :
I2C i2c; // un composant I2C que l'on nommera i2c
// unsigned char adr_I2C=0x32; // une adresse I2C
/**********************************************************//**
* Conversion d'un bcd en uint8_t
* argument: valeur de la valeur à convertir en BCD
* valeur retournée : = valeur convertie en uint8
* par exemple :
**************************************************************/
uint8_t bcd_2_uchar(uint8_t bcd);
};
#endif