64 x 8, Serial, I2C Real-Time Clock
DS1307.h@2:190cad1b683d, 2018-07-31 (annotated)
- Committer:
- mcm
- Date:
- Tue Jul 31 15:17:07 2018 +0000
- Revision:
- 2:190cad1b683d
- Parent:
- 1:a85a4a5e44b2
The driver was completed and tested, it works as expected ( NUCLEO-L152RE )
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 1:a85a4a5e44b2 | 1 | /** |
mcm | 1:a85a4a5e44b2 | 2 | * @brief DS1307.h |
mcm | 1:a85a4a5e44b2 | 3 | * @details 64 x 8, Serial, I2C Real-Time Clock. |
mcm | 1:a85a4a5e44b2 | 4 | * Header file. |
mcm | 1:a85a4a5e44b2 | 5 | * |
mcm | 1:a85a4a5e44b2 | 6 | * |
mcm | 1:a85a4a5e44b2 | 7 | * @return N/A |
mcm | 1:a85a4a5e44b2 | 8 | * |
mcm | 1:a85a4a5e44b2 | 9 | * @author Manuel Caballero |
mcm | 1:a85a4a5e44b2 | 10 | * @date 31/July/2018 |
mcm | 1:a85a4a5e44b2 | 11 | * @version 31/July/2018 The ORIGIN |
mcm | 1:a85a4a5e44b2 | 12 | * @pre N/A |
mcm | 1:a85a4a5e44b2 | 13 | * @warning N/A |
mcm | 1:a85a4a5e44b2 | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 1:a85a4a5e44b2 | 15 | */ |
mcm | 1:a85a4a5e44b2 | 16 | #ifndef DS1307_H |
mcm | 1:a85a4a5e44b2 | 17 | #define DS1307_H |
mcm | 1:a85a4a5e44b2 | 18 | |
mcm | 1:a85a4a5e44b2 | 19 | #include "mbed.h" |
mcm | 1:a85a4a5e44b2 | 20 | |
mcm | 1:a85a4a5e44b2 | 21 | |
mcm | 1:a85a4a5e44b2 | 22 | /** |
mcm | 1:a85a4a5e44b2 | 23 | Example: |
mcm | 1:a85a4a5e44b2 | 24 | @code |
mcm | 2:190cad1b683d | 25 | #include "mbed.h" |
mcm | 2:190cad1b683d | 26 | #include "DS1307.h" |
mcm | 2:190cad1b683d | 27 | |
mcm | 2:190cad1b683d | 28 | DS1307 myDS1307 ( I2C_SDA, I2C_SCL, DS1307::DS1307_ADDRESS, 400000 ); |
mcm | 2:190cad1b683d | 29 | Serial pc ( USBTX, USBRX ); |
mcm | 2:190cad1b683d | 30 | |
mcm | 2:190cad1b683d | 31 | DigitalOut myled ( LED1 ); |
mcm | 2:190cad1b683d | 32 | Ticker newReading; |
mcm | 2:190cad1b683d | 33 | |
mcm | 2:190cad1b683d | 34 | |
mcm | 2:190cad1b683d | 35 | uint32_t myState = 0; |
mcm | 2:190cad1b683d | 36 | |
mcm | 2:190cad1b683d | 37 | |
mcm | 2:190cad1b683d | 38 | |
mcm | 2:190cad1b683d | 39 | //@brief FUNCTION PROTOTYPES |
mcm | 2:190cad1b683d | 40 | // |
mcm | 2:190cad1b683d | 41 | void changeDATA ( void ); |
mcm | 2:190cad1b683d | 42 | |
mcm | 2:190cad1b683d | 43 | |
mcm | 2:190cad1b683d | 44 | |
mcm | 2:190cad1b683d | 45 | |
mcm | 2:190cad1b683d | 46 | //@brief FUNCTION FOR APPLICATION MAIN ENTRY. |
mcm | 2:190cad1b683d | 47 | // |
mcm | 2:190cad1b683d | 48 | int main() |
mcm | 2:190cad1b683d | 49 | { |
mcm | 2:190cad1b683d | 50 | uint8_t myDataRAM; |
mcm | 2:190cad1b683d | 51 | uint32_t aux; |
mcm | 2:190cad1b683d | 52 | DS1307::DS1307_vector_data_t myDS1307_Data; |
mcm | 2:190cad1b683d | 53 | |
mcm | 2:190cad1b683d | 54 | |
mcm | 2:190cad1b683d | 55 | pc.baud ( 115200 ); |
mcm | 2:190cad1b683d | 56 | |
mcm | 2:190cad1b683d | 57 | myled = 1; |
mcm | 2:190cad1b683d | 58 | wait(3); |
mcm | 2:190cad1b683d | 59 | myled = 0; |
mcm | 2:190cad1b683d | 60 | |
mcm | 2:190cad1b683d | 61 | |
mcm | 2:190cad1b683d | 62 | // Enable the DS1307 oscillator |
mcm | 2:190cad1b683d | 63 | aux = myDS1307.DS1307_OscillatorMode ( DS1307::SECONDS_CH_OSCILLATOR_ENABLED ); |
mcm | 2:190cad1b683d | 64 | |
mcm | 2:190cad1b683d | 65 | // Write data into the RAM memory |
mcm | 2:190cad1b683d | 66 | myDataRAM = 0x23; |
mcm | 2:190cad1b683d | 67 | aux = myDS1307.DS1307_WriteByteRAM ( myDataRAM, 0x11 ); // Data: 0x23, Address: 0x11 |
mcm | 2:190cad1b683d | 68 | |
mcm | 2:190cad1b683d | 69 | // Read data into the RAM memory |
mcm | 2:190cad1b683d | 70 | myDataRAM = 0; |
mcm | 2:190cad1b683d | 71 | aux = myDS1307.DS1307_ReadByteRAM ( &myDataRAM, 0x11 ); // Address: 0x11 |
mcm | 2:190cad1b683d | 72 | |
mcm | 2:190cad1b683d | 73 | // Erase data into the RAM memory |
mcm | 2:190cad1b683d | 74 | aux = myDS1307.DS1307_EraseByteRAM ( 0x11 ); // Address: 0x11 |
mcm | 2:190cad1b683d | 75 | |
mcm | 2:190cad1b683d | 76 | // Read data into the RAM memory |
mcm | 2:190cad1b683d | 77 | myDataRAM = 0; |
mcm | 2:190cad1b683d | 78 | aux = myDS1307.DS1307_ReadByteRAM ( &myDataRAM, 0x11 ); // Address: 0x11 |
mcm | 2:190cad1b683d | 79 | |
mcm | 2:190cad1b683d | 80 | // Set the day of the week |
mcm | 2:190cad1b683d | 81 | myDS1307_Data.DayOfTheWeek = DS1307::DAY_TUESDAY; |
mcm | 2:190cad1b683d | 82 | aux = myDS1307.DS1307_SetDayOfTheWeek ( myDS1307_Data ); |
mcm | 2:190cad1b683d | 83 | |
mcm | 2:190cad1b683d | 84 | // Set the date |
mcm | 2:190cad1b683d | 85 | myDS1307_Data.BCDDate = 0x31; // Date: 31 |
mcm | 2:190cad1b683d | 86 | aux = myDS1307.DS1307_SetDate ( myDS1307_Data ); |
mcm | 2:190cad1b683d | 87 | |
mcm | 2:190cad1b683d | 88 | // Set the month |
mcm | 2:190cad1b683d | 89 | myDS1307_Data.BCDMonth = DS1307::MONTH_JULY; |
mcm | 2:190cad1b683d | 90 | aux = myDS1307.DS1307_SetMonth ( myDS1307_Data ); |
mcm | 2:190cad1b683d | 91 | |
mcm | 2:190cad1b683d | 92 | // Set the year |
mcm | 2:190cad1b683d | 93 | myDS1307_Data.BCDYear = 0x18; // Year: 2018 |
mcm | 2:190cad1b683d | 94 | aux = myDS1307.DS1307_SetYear ( myDS1307_Data ); |
mcm | 2:190cad1b683d | 95 | |
mcm | 2:190cad1b683d | 96 | // Set the time |
mcm | 2:190cad1b683d | 97 | myDS1307_Data.BCDTime = 0x150300; // Time: 13:52.00 |
mcm | 2:190cad1b683d | 98 | myDS1307_Data.Time12H_24HMode = DS1307::HOURS_MODE_24H; |
mcm | 2:190cad1b683d | 99 | myDS1307_Data.TimeAM_PM_Mode = DS1307::HOURS_MODE_PM; |
mcm | 2:190cad1b683d | 100 | aux = myDS1307.DS1307_SetTime ( myDS1307_Data ); |
mcm | 2:190cad1b683d | 101 | |
mcm | 2:190cad1b683d | 102 | // Set square-wave output pin: 32.768kHz |
mcm | 2:190cad1b683d | 103 | aux = myDS1307.DS1307_SquareWaveOutput( DS1307::CONTROL_SQWE_ENABLED, DS1307::CONTROL_RS_32_768_KHZ ); |
mcm | 2:190cad1b683d | 104 | |
mcm | 2:190cad1b683d | 105 | |
mcm | 2:190cad1b683d | 106 | newReading.attach( &changeDATA, 1 ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s ) |
mcm | 2:190cad1b683d | 107 | |
mcm | 2:190cad1b683d | 108 | // Let the callbacks take care of everything |
mcm | 2:190cad1b683d | 109 | while(1) { |
mcm | 2:190cad1b683d | 110 | sleep(); |
mcm | 2:190cad1b683d | 111 | |
mcm | 2:190cad1b683d | 112 | myled = 1; |
mcm | 2:190cad1b683d | 113 | |
mcm | 2:190cad1b683d | 114 | if ( myState == 1 ) { |
mcm | 2:190cad1b683d | 115 | // Get the day of the week |
mcm | 2:190cad1b683d | 116 | aux = myDS1307.DS1307_GetDayOfTheWeek ( &myDS1307_Data ); |
mcm | 2:190cad1b683d | 117 | |
mcm | 2:190cad1b683d | 118 | // Get the day of the date |
mcm | 2:190cad1b683d | 119 | aux = myDS1307.DS1307_GetDate ( &myDS1307_Data ); |
mcm | 2:190cad1b683d | 120 | |
mcm | 2:190cad1b683d | 121 | // Get the month |
mcm | 2:190cad1b683d | 122 | aux = myDS1307.DS1307_GetMonth ( &myDS1307_Data ); |
mcm | 2:190cad1b683d | 123 | |
mcm | 2:190cad1b683d | 124 | // Get the year |
mcm | 2:190cad1b683d | 125 | aux = myDS1307.DS1307_GetYear ( &myDS1307_Data ); |
mcm | 2:190cad1b683d | 126 | |
mcm | 2:190cad1b683d | 127 | // Get the time |
mcm | 2:190cad1b683d | 128 | aux = myDS1307.DS1307_GetTime ( &myDS1307_Data ); |
mcm | 2:190cad1b683d | 129 | |
mcm | 2:190cad1b683d | 130 | // Transmit result through the UART |
mcm | 2:190cad1b683d | 131 | pc.printf( "%02x/%02x/%02x %d %02x:%02x.%02x\r\n", myDS1307_Data.BCDDate, myDS1307_Data.BCDMonth, myDS1307_Data.BCDYear, myDS1307_Data.DayOfTheWeek, |
mcm | 2:190cad1b683d | 132 | (uint8_t)( ( myDS1307_Data.BCDTime & 0xFF0000 ) >> 16U ), (uint8_t)( ( myDS1307_Data.BCDTime & 0x00FF00 ) >> 8U ), |
mcm | 2:190cad1b683d | 133 | (uint8_t)( myDS1307_Data.BCDTime & 0x0000FF ) ); |
mcm | 2:190cad1b683d | 134 | |
mcm | 2:190cad1b683d | 135 | // Reset the variables |
mcm | 2:190cad1b683d | 136 | myState = 0; // Reset the variable |
mcm | 2:190cad1b683d | 137 | } |
mcm | 2:190cad1b683d | 138 | |
mcm | 2:190cad1b683d | 139 | myled = 0; |
mcm | 2:190cad1b683d | 140 | } |
mcm | 2:190cad1b683d | 141 | } |
mcm | 2:190cad1b683d | 142 | |
mcm | 2:190cad1b683d | 143 | // @brief changeDATA ( void ) |
mcm | 2:190cad1b683d | 144 | // |
mcm | 2:190cad1b683d | 145 | // @details It changes myState variable |
mcm | 2:190cad1b683d | 146 | // |
mcm | 2:190cad1b683d | 147 | // @param[in] N/A |
mcm | 2:190cad1b683d | 148 | // |
mcm | 2:190cad1b683d | 149 | // @param[out] N/A. |
mcm | 2:190cad1b683d | 150 | // |
mcm | 2:190cad1b683d | 151 | // |
mcm | 2:190cad1b683d | 152 | // @return N/A.. |
mcm | 2:190cad1b683d | 153 | // |
mcm | 2:190cad1b683d | 154 | // |
mcm | 2:190cad1b683d | 155 | // @author Manuel Caballero |
mcm | 2:190cad1b683d | 156 | // @date 31/July/2018 |
mcm | 2:190cad1b683d | 157 | // @version 31/July/2018 The ORIGIN |
mcm | 2:190cad1b683d | 158 | // @pre N/A |
mcm | 2:190cad1b683d | 159 | // @warning N/A. |
mcm | 2:190cad1b683d | 160 | void changeDATA ( void ) |
mcm | 2:190cad1b683d | 161 | { |
mcm | 2:190cad1b683d | 162 | myState = 1; |
mcm | 2:190cad1b683d | 163 | } |
mcm | 1:a85a4a5e44b2 | 164 | @endcode |
mcm | 1:a85a4a5e44b2 | 165 | */ |
mcm | 1:a85a4a5e44b2 | 166 | |
mcm | 1:a85a4a5e44b2 | 167 | |
mcm | 1:a85a4a5e44b2 | 168 | /*! |
mcm | 1:a85a4a5e44b2 | 169 | Library for the DS1307 64 x 8, Serial, I2C Real-Time Clock. |
mcm | 1:a85a4a5e44b2 | 170 | */ |
mcm | 1:a85a4a5e44b2 | 171 | class DS1307 |
mcm | 1:a85a4a5e44b2 | 172 | { |
mcm | 1:a85a4a5e44b2 | 173 | public: |
mcm | 1:a85a4a5e44b2 | 174 | /** |
mcm | 1:a85a4a5e44b2 | 175 | * @brief DEFAULT ADDRESSES |
mcm | 1:a85a4a5e44b2 | 176 | */ |
mcm | 1:a85a4a5e44b2 | 177 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 178 | DS1307_ADDRESS = ( 0b1101000 << 1 ) /*!< DS1307 I2C Address */ |
mcm | 1:a85a4a5e44b2 | 179 | } DS1307_addresses_t; |
mcm | 1:a85a4a5e44b2 | 180 | |
mcm | 1:a85a4a5e44b2 | 181 | |
mcm | 1:a85a4a5e44b2 | 182 | // REGISTER MAP |
mcm | 1:a85a4a5e44b2 | 183 | /** |
mcm | 1:a85a4a5e44b2 | 184 | * @brief TIMEKEEPER REGISTERS |
mcm | 1:a85a4a5e44b2 | 185 | */ |
mcm | 1:a85a4a5e44b2 | 186 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 187 | DS1307_SECONDS = 0x00, /*!< Seconds ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 188 | DS1307_MINUTES = 0x01, /*!< Minutes ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 189 | DS1307_HOURS = 0x02, /*!< Hours ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 190 | DS1307_DAY = 0x03, /*!< Day ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 191 | DS1307_DATE = 0x04, /*!< Date ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 192 | DS1307_MONTH = 0x05, /*!< Month ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 193 | DS1307_YEAR = 0x06, /*!< Year ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 194 | DS1307_CONTROL = 0x07 /*!< Control ( Read/Write ) */ |
mcm | 1:a85a4a5e44b2 | 195 | } DS1307_timekeeper_registers_t; |
mcm | 1:a85a4a5e44b2 | 196 | |
mcm | 1:a85a4a5e44b2 | 197 | |
mcm | 1:a85a4a5e44b2 | 198 | |
mcm | 1:a85a4a5e44b2 | 199 | // SECONDS |
mcm | 1:a85a4a5e44b2 | 200 | /** |
mcm | 1:a85a4a5e44b2 | 201 | * @brief CLOCK HALT |
mcm | 1:a85a4a5e44b2 | 202 | */ |
mcm | 1:a85a4a5e44b2 | 203 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 204 | SECONDS_CH_MASK = ( 1 << 7 ), /*!< CH mask */ |
mcm | 1:a85a4a5e44b2 | 205 | SECONDS_CH_OSCILLATOR_ENABLED = ( 0 << 7 ), /*!< CH Oscillator is enabled */ |
mcm | 1:a85a4a5e44b2 | 206 | SECONDS_CH_OSCILLATOR_DISABLED = ( 1 << 7 ) /*!< CH Oscillator is disabled */ |
mcm | 1:a85a4a5e44b2 | 207 | } DS1307_seconds_ch_t; |
mcm | 1:a85a4a5e44b2 | 208 | |
mcm | 1:a85a4a5e44b2 | 209 | |
mcm | 1:a85a4a5e44b2 | 210 | /** |
mcm | 1:a85a4a5e44b2 | 211 | * @brief 10 SECONDS |
mcm | 1:a85a4a5e44b2 | 212 | */ |
mcm | 1:a85a4a5e44b2 | 213 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 214 | SECONDS_10SECONDS_MASK = ( 0b111 << 4 ) /*!< 10 Seconds mask */ |
mcm | 1:a85a4a5e44b2 | 215 | } DS1307_seconds_10seconds_t; |
mcm | 1:a85a4a5e44b2 | 216 | |
mcm | 1:a85a4a5e44b2 | 217 | |
mcm | 1:a85a4a5e44b2 | 218 | /** |
mcm | 1:a85a4a5e44b2 | 219 | * @brief SECONDS |
mcm | 1:a85a4a5e44b2 | 220 | */ |
mcm | 1:a85a4a5e44b2 | 221 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 222 | SECONDS_SECONDS_MASK = ( 0b1111 << 0 ) /*!< Seconds mask */ |
mcm | 1:a85a4a5e44b2 | 223 | } DS1307_seconds_seconds_t; |
mcm | 1:a85a4a5e44b2 | 224 | |
mcm | 1:a85a4a5e44b2 | 225 | |
mcm | 1:a85a4a5e44b2 | 226 | |
mcm | 1:a85a4a5e44b2 | 227 | // MINUTES |
mcm | 1:a85a4a5e44b2 | 228 | /** |
mcm | 1:a85a4a5e44b2 | 229 | * @brief 10 MINUTES |
mcm | 1:a85a4a5e44b2 | 230 | */ |
mcm | 1:a85a4a5e44b2 | 231 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 232 | MINUTES_10MINUTES_MASK = ( 0b111 << 4 ) /*!< 10 Minutes mask */ |
mcm | 1:a85a4a5e44b2 | 233 | } DS1307_minutes_10minutes_t; |
mcm | 1:a85a4a5e44b2 | 234 | |
mcm | 1:a85a4a5e44b2 | 235 | |
mcm | 1:a85a4a5e44b2 | 236 | /** |
mcm | 1:a85a4a5e44b2 | 237 | * @brief MINUTES |
mcm | 1:a85a4a5e44b2 | 238 | */ |
mcm | 1:a85a4a5e44b2 | 239 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 240 | MINUTES_MINUTES_MASK = ( 0b1111 << 0 ) /*!< Minutes mask */ |
mcm | 1:a85a4a5e44b2 | 241 | } DS1307_minutes_minutes_t; |
mcm | 1:a85a4a5e44b2 | 242 | |
mcm | 1:a85a4a5e44b2 | 243 | |
mcm | 1:a85a4a5e44b2 | 244 | |
mcm | 1:a85a4a5e44b2 | 245 | // HOURS |
mcm | 1:a85a4a5e44b2 | 246 | /** |
mcm | 1:a85a4a5e44b2 | 247 | * @brief 12-HOUR OR 24-HOUR MODE |
mcm | 1:a85a4a5e44b2 | 248 | */ |
mcm | 1:a85a4a5e44b2 | 249 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 250 | HOURS_MODE_MASK = ( 1 << 6 ), /*!< Hours 12/24 mode mask */ |
mcm | 1:a85a4a5e44b2 | 251 | HOURS_MODE_12H = ( 1 << 6 ), /*!< Hours 12-hour mode enabled */ |
mcm | 1:a85a4a5e44b2 | 252 | HOURS_MODE_24H = ( 0 << 6 ) /*!< Hours 24-hour mode enabled */ |
mcm | 1:a85a4a5e44b2 | 253 | } DS1307_hours_mode_t; |
mcm | 1:a85a4a5e44b2 | 254 | |
mcm | 1:a85a4a5e44b2 | 255 | |
mcm | 1:a85a4a5e44b2 | 256 | /** |
mcm | 1:a85a4a5e44b2 | 257 | * @brief AM OR PM MODE |
mcm | 1:a85a4a5e44b2 | 258 | */ |
mcm | 1:a85a4a5e44b2 | 259 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 260 | HOURS_MODE_AM_PM_MASK = ( 1 << 5 ), /*!< Hours am/pm mode mask */ |
mcm | 1:a85a4a5e44b2 | 261 | HOURS_MODE_AM = ( 0 << 5 ), /*!< Hours AM mode enabled */ |
mcm | 1:a85a4a5e44b2 | 262 | HOURS_MODE_PM = ( 1 << 5 ) /*!< Hours PM mode enabled */ |
mcm | 1:a85a4a5e44b2 | 263 | } DS1307_hours_am_pm_mode_t; |
mcm | 1:a85a4a5e44b2 | 264 | |
mcm | 1:a85a4a5e44b2 | 265 | |
mcm | 1:a85a4a5e44b2 | 266 | /** |
mcm | 1:a85a4a5e44b2 | 267 | * @brief 10 HOUR |
mcm | 1:a85a4a5e44b2 | 268 | */ |
mcm | 1:a85a4a5e44b2 | 269 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 270 | HOUR_10HOUR_MASK = ( 0b11 << 4 ) /*!< 10 Hour mask */ |
mcm | 1:a85a4a5e44b2 | 271 | } DS1307_hours_10hour_t; |
mcm | 1:a85a4a5e44b2 | 272 | |
mcm | 1:a85a4a5e44b2 | 273 | |
mcm | 1:a85a4a5e44b2 | 274 | /** |
mcm | 1:a85a4a5e44b2 | 275 | * @brief HOURS |
mcm | 1:a85a4a5e44b2 | 276 | */ |
mcm | 1:a85a4a5e44b2 | 277 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 278 | HOUR_HOURS_MASK = ( 0b1111 << 0 ) /*!< Hours mask */ |
mcm | 1:a85a4a5e44b2 | 279 | } DS1307_hours_hours_t; |
mcm | 1:a85a4a5e44b2 | 280 | |
mcm | 1:a85a4a5e44b2 | 281 | |
mcm | 1:a85a4a5e44b2 | 282 | |
mcm | 1:a85a4a5e44b2 | 283 | // DAY |
mcm | 1:a85a4a5e44b2 | 284 | /** |
mcm | 1:a85a4a5e44b2 | 285 | * @brief DAY |
mcm | 1:a85a4a5e44b2 | 286 | */ |
mcm | 1:a85a4a5e44b2 | 287 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 288 | DAY_MASK = ( 0b111 << 0 ), /*!< Day mask */ |
mcm | 1:a85a4a5e44b2 | 289 | DAY_SUNDAY = ( 1 << 0 ), /*!< Day Sunday */ |
mcm | 1:a85a4a5e44b2 | 290 | DAY_MONDAY = ( 2 << 0 ), /*!< Day Monday */ |
mcm | 1:a85a4a5e44b2 | 291 | DAY_TUESDAY = ( 3 << 0 ), /*!< Day Tuesday */ |
mcm | 1:a85a4a5e44b2 | 292 | DAY_WEDNESDAY = ( 4 << 0 ), /*!< Day Wednesday */ |
mcm | 1:a85a4a5e44b2 | 293 | DAY_THURSDAY = ( 5 << 0 ), /*!< Day Thursday */ |
mcm | 1:a85a4a5e44b2 | 294 | DAY_FRIDAY = ( 6 << 0 ), /*!< Day Friday */ |
mcm | 1:a85a4a5e44b2 | 295 | DAY_SATURDAY = ( 7 << 0 ) /*!< Day Saturday */ |
mcm | 1:a85a4a5e44b2 | 296 | } DS1307_day_t; |
mcm | 1:a85a4a5e44b2 | 297 | |
mcm | 1:a85a4a5e44b2 | 298 | |
mcm | 1:a85a4a5e44b2 | 299 | |
mcm | 1:a85a4a5e44b2 | 300 | // DATE |
mcm | 1:a85a4a5e44b2 | 301 | /** |
mcm | 1:a85a4a5e44b2 | 302 | * @brief 10 DATE |
mcm | 1:a85a4a5e44b2 | 303 | */ |
mcm | 1:a85a4a5e44b2 | 304 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 305 | DATE_10DATE_MASK = ( 0b11 << 4 ) /*!< 10 Date mask */ |
mcm | 1:a85a4a5e44b2 | 306 | } DS1307_date_10date_t; |
mcm | 1:a85a4a5e44b2 | 307 | |
mcm | 1:a85a4a5e44b2 | 308 | |
mcm | 1:a85a4a5e44b2 | 309 | /** |
mcm | 1:a85a4a5e44b2 | 310 | * @brief DATE |
mcm | 1:a85a4a5e44b2 | 311 | */ |
mcm | 1:a85a4a5e44b2 | 312 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 313 | DATE_DATE_MASK = ( 0b1111 << 0 ) /*!< Date mask */ |
mcm | 1:a85a4a5e44b2 | 314 | } DS1307_date_date_t; |
mcm | 1:a85a4a5e44b2 | 315 | |
mcm | 1:a85a4a5e44b2 | 316 | |
mcm | 1:a85a4a5e44b2 | 317 | |
mcm | 1:a85a4a5e44b2 | 318 | // MONTH |
mcm | 1:a85a4a5e44b2 | 319 | /** |
mcm | 1:a85a4a5e44b2 | 320 | * @brief 10 MONTH |
mcm | 1:a85a4a5e44b2 | 321 | */ |
mcm | 1:a85a4a5e44b2 | 322 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 323 | MONTH_10MONTH_MASK = ( 0b1 << 4 ) /*!< 10 Month mask */ |
mcm | 1:a85a4a5e44b2 | 324 | } DS1307_month_10month_t; |
mcm | 1:a85a4a5e44b2 | 325 | |
mcm | 1:a85a4a5e44b2 | 326 | |
mcm | 1:a85a4a5e44b2 | 327 | /** |
mcm | 1:a85a4a5e44b2 | 328 | * @brief MONTH |
mcm | 1:a85a4a5e44b2 | 329 | */ |
mcm | 1:a85a4a5e44b2 | 330 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 331 | MONTH_MONTH_MASK = ( 0b1111 << 0 ) /*!< Month mask */ |
mcm | 1:a85a4a5e44b2 | 332 | } DS1307_month_month_t; |
mcm | 1:a85a4a5e44b2 | 333 | |
mcm | 1:a85a4a5e44b2 | 334 | |
mcm | 1:a85a4a5e44b2 | 335 | |
mcm | 1:a85a4a5e44b2 | 336 | // YEAR |
mcm | 1:a85a4a5e44b2 | 337 | /** |
mcm | 1:a85a4a5e44b2 | 338 | * @brief 10 YEAR |
mcm | 1:a85a4a5e44b2 | 339 | */ |
mcm | 1:a85a4a5e44b2 | 340 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 341 | YEAR_10YEAR_MASK = ( 0b1111 << 4 ) /*!< 10 Year mask */ |
mcm | 1:a85a4a5e44b2 | 342 | } DS1307_year_10month_t; |
mcm | 1:a85a4a5e44b2 | 343 | |
mcm | 1:a85a4a5e44b2 | 344 | |
mcm | 1:a85a4a5e44b2 | 345 | /** |
mcm | 1:a85a4a5e44b2 | 346 | * @brief YEAR |
mcm | 1:a85a4a5e44b2 | 347 | */ |
mcm | 1:a85a4a5e44b2 | 348 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 349 | YEAR_YEAR_MASK = ( 0b1111 << 0 ) /*!< Year mask */ |
mcm | 1:a85a4a5e44b2 | 350 | } DS1307_year_year_t; |
mcm | 1:a85a4a5e44b2 | 351 | |
mcm | 1:a85a4a5e44b2 | 352 | |
mcm | 1:a85a4a5e44b2 | 353 | |
mcm | 1:a85a4a5e44b2 | 354 | // CONTROL |
mcm | 1:a85a4a5e44b2 | 355 | /** |
mcm | 1:a85a4a5e44b2 | 356 | * @brief OUTPUT CONTROL (OUT) |
mcm | 1:a85a4a5e44b2 | 357 | */ |
mcm | 1:a85a4a5e44b2 | 358 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 359 | CONTROL_OUT_MASK = ( 1 << 7 ), /*!< OUT mask */ |
mcm | 1:a85a4a5e44b2 | 360 | CONTROL_OUT_HIGH = ( 1 << 7 ), /*!< SQW/OUT high */ |
mcm | 1:a85a4a5e44b2 | 361 | CONTROL_OUT_LOW = ( 0 << 7 ) /*!< SQW/OUT low */ |
mcm | 1:a85a4a5e44b2 | 362 | } DS1307_control_out_t; |
mcm | 1:a85a4a5e44b2 | 363 | |
mcm | 1:a85a4a5e44b2 | 364 | |
mcm | 1:a85a4a5e44b2 | 365 | /** |
mcm | 1:a85a4a5e44b2 | 366 | * @brief SQUARE-WAVE ENABLE (SQWE) |
mcm | 1:a85a4a5e44b2 | 367 | */ |
mcm | 1:a85a4a5e44b2 | 368 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 369 | CONTROL_SQWE_MASK = ( 1 << 4 ), /*!< SQWE mask */ |
mcm | 1:a85a4a5e44b2 | 370 | CONTROL_SQWE_ENABLED = ( 1 << 4 ), /*!< SQWE enabled */ |
mcm | 1:a85a4a5e44b2 | 371 | CONTROL_SQWE_DISABLED = ( 0 << 4 ) /*!< SQWE disabled */ |
mcm | 1:a85a4a5e44b2 | 372 | } DS1307_control_sqwe_t; |
mcm | 1:a85a4a5e44b2 | 373 | |
mcm | 1:a85a4a5e44b2 | 374 | |
mcm | 1:a85a4a5e44b2 | 375 | /** |
mcm | 1:a85a4a5e44b2 | 376 | * @brief RATE SELECT |
mcm | 1:a85a4a5e44b2 | 377 | */ |
mcm | 1:a85a4a5e44b2 | 378 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 379 | CONTROL_RS_MASK = ( 0b11 << 0 ), /*!< RS mask */ |
mcm | 1:a85a4a5e44b2 | 380 | CONTROL_RS_1_HZ = ( 0b00 << 0 ), /*!< RS 1Hz */ |
mcm | 1:a85a4a5e44b2 | 381 | CONTROL_RS_4_096_KHZ = ( 0b01 << 0 ), /*!< RS 4.096kHz */ |
mcm | 1:a85a4a5e44b2 | 382 | CONTROL_RS_8_192_KHZ = ( 0b10 << 0 ), /*!< RS 8.192kHz */ |
mcm | 1:a85a4a5e44b2 | 383 | CONTROL_RS_32_768_KHZ = ( 0b11 << 0 ) /*!< RS 32.768kHz */ |
mcm | 1:a85a4a5e44b2 | 384 | } DS1307_control_rate_select_t; |
mcm | 1:a85a4a5e44b2 | 385 | |
mcm | 1:a85a4a5e44b2 | 386 | |
mcm | 1:a85a4a5e44b2 | 387 | |
mcm | 1:a85a4a5e44b2 | 388 | // ALTERNATIVES |
mcm | 1:a85a4a5e44b2 | 389 | /** |
mcm | 1:a85a4a5e44b2 | 390 | * @brief MONTH |
mcm | 1:a85a4a5e44b2 | 391 | */ |
mcm | 1:a85a4a5e44b2 | 392 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 393 | MONTH_JANUARY = 0x01, /*!< January */ |
mcm | 1:a85a4a5e44b2 | 394 | MONTH_FEBRUARY = 0x02, /*!< February */ |
mcm | 1:a85a4a5e44b2 | 395 | MONTH_MARCH = 0x03, /*!< March */ |
mcm | 1:a85a4a5e44b2 | 396 | MONTH_APRIL = 0x04, /*!< April */ |
mcm | 1:a85a4a5e44b2 | 397 | MONTH_MAY = 0x05, /*!< May */ |
mcm | 1:a85a4a5e44b2 | 398 | MONTH_JUNE = 0x06, /*!< June */ |
mcm | 1:a85a4a5e44b2 | 399 | MONTH_JULY = 0x07, /*!< July */ |
mcm | 1:a85a4a5e44b2 | 400 | MONTH_AUGUST = 0x08, /*!< August */ |
mcm | 1:a85a4a5e44b2 | 401 | MONTH_SEPTEMBER = 0x09, /*!< September */ |
mcm | 1:a85a4a5e44b2 | 402 | MONTH_OCTOBER = 0x10, /*!< October */ |
mcm | 1:a85a4a5e44b2 | 403 | MONTH_NOVEMBER = 0x11, /*!< November */ |
mcm | 1:a85a4a5e44b2 | 404 | MONTH_DECEMBER = 0x12 /*!< December */ |
mcm | 1:a85a4a5e44b2 | 405 | } DS1307_month_t; |
mcm | 1:a85a4a5e44b2 | 406 | |
mcm | 1:a85a4a5e44b2 | 407 | |
mcm | 1:a85a4a5e44b2 | 408 | |
mcm | 1:a85a4a5e44b2 | 409 | |
mcm | 1:a85a4a5e44b2 | 410 | #ifndef DS1307_VECTOR_STRUCT_H |
mcm | 1:a85a4a5e44b2 | 411 | #define DS1307_VECTOR_STRUCT_H |
mcm | 1:a85a4a5e44b2 | 412 | typedef struct { |
mcm | 1:a85a4a5e44b2 | 413 | uint32_t BCDTime; |
mcm | 1:a85a4a5e44b2 | 414 | DS1307_hours_mode_t Time12H_24HMode; |
mcm | 1:a85a4a5e44b2 | 415 | DS1307_hours_am_pm_mode_t TimeAM_PM_Mode; |
mcm | 1:a85a4a5e44b2 | 416 | |
mcm | 1:a85a4a5e44b2 | 417 | DS1307_day_t DayOfTheWeek; |
mcm | 1:a85a4a5e44b2 | 418 | |
mcm | 1:a85a4a5e44b2 | 419 | uint8_t BCDDate; |
mcm | 1:a85a4a5e44b2 | 420 | |
mcm | 1:a85a4a5e44b2 | 421 | DS1307_month_t BCDMonth; |
mcm | 1:a85a4a5e44b2 | 422 | |
mcm | 1:a85a4a5e44b2 | 423 | uint8_t BCDYear; |
mcm | 1:a85a4a5e44b2 | 424 | } DS1307_vector_data_t; |
mcm | 1:a85a4a5e44b2 | 425 | #endif |
mcm | 1:a85a4a5e44b2 | 426 | |
mcm | 1:a85a4a5e44b2 | 427 | |
mcm | 1:a85a4a5e44b2 | 428 | /** |
mcm | 1:a85a4a5e44b2 | 429 | * @brief INTERNAL CONSTANTS |
mcm | 1:a85a4a5e44b2 | 430 | */ |
mcm | 1:a85a4a5e44b2 | 431 | typedef enum { |
mcm | 1:a85a4a5e44b2 | 432 | DS1307_SUCCESS = 0, |
mcm | 1:a85a4a5e44b2 | 433 | DS1307_FAILURE = 1, |
mcm | 1:a85a4a5e44b2 | 434 | I2C_SUCCESS = 0 /*!< I2C communication was fine */ |
mcm | 1:a85a4a5e44b2 | 435 | } DS1307_status_t; |
mcm | 1:a85a4a5e44b2 | 436 | |
mcm | 1:a85a4a5e44b2 | 437 | |
mcm | 1:a85a4a5e44b2 | 438 | |
mcm | 1:a85a4a5e44b2 | 439 | |
mcm | 1:a85a4a5e44b2 | 440 | /** Create an DS1307 object connected to the specified I2C pins. |
mcm | 1:a85a4a5e44b2 | 441 | * |
mcm | 1:a85a4a5e44b2 | 442 | * @param sda I2C data pin |
mcm | 1:a85a4a5e44b2 | 443 | * @param scl I2C clock pin |
mcm | 1:a85a4a5e44b2 | 444 | * @param addr I2C slave address |
mcm | 1:a85a4a5e44b2 | 445 | * @param freq I2C frequency |
mcm | 1:a85a4a5e44b2 | 446 | */ |
mcm | 1:a85a4a5e44b2 | 447 | DS1307 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); |
mcm | 1:a85a4a5e44b2 | 448 | |
mcm | 1:a85a4a5e44b2 | 449 | /** Delete DS1307 object. |
mcm | 1:a85a4a5e44b2 | 450 | */ |
mcm | 1:a85a4a5e44b2 | 451 | ~DS1307(); |
mcm | 1:a85a4a5e44b2 | 452 | |
mcm | 1:a85a4a5e44b2 | 453 | /** It enables/disabled the oscillator. |
mcm | 1:a85a4a5e44b2 | 454 | */ |
mcm | 1:a85a4a5e44b2 | 455 | DS1307_status_t DS1307_OscillatorMode ( DS1307_seconds_ch_t myOscillator ); |
mcm | 1:a85a4a5e44b2 | 456 | |
mcm | 1:a85a4a5e44b2 | 457 | /** It configures the square-wave output. |
mcm | 1:a85a4a5e44b2 | 458 | */ |
mcm | 1:a85a4a5e44b2 | 459 | DS1307_status_t DS1307_SquareWaveOutput ( DS1307_control_sqwe_t mySQWE, DS1307_control_rate_select_t myRateSelect ); |
mcm | 1:a85a4a5e44b2 | 460 | |
mcm | 1:a85a4a5e44b2 | 461 | /** It configures the output pin ( OUT ). |
mcm | 1:a85a4a5e44b2 | 462 | */ |
mcm | 1:a85a4a5e44b2 | 463 | DS1307_status_t DS1307_ConfOutput ( DS1307_control_out_t myOUT ); |
mcm | 1:a85a4a5e44b2 | 464 | |
mcm | 1:a85a4a5e44b2 | 465 | /** It sets the time ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 466 | */ |
mcm | 1:a85a4a5e44b2 | 467 | DS1307_status_t DS1307_SetTime ( DS1307_vector_data_t myTime ); |
mcm | 1:a85a4a5e44b2 | 468 | |
mcm | 1:a85a4a5e44b2 | 469 | /** It gets the time ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 470 | */ |
mcm | 1:a85a4a5e44b2 | 471 | DS1307_status_t DS1307_GetTime ( DS1307_vector_data_t* myTime ); |
mcm | 1:a85a4a5e44b2 | 472 | |
mcm | 1:a85a4a5e44b2 | 473 | /** It sets the day of the week. |
mcm | 1:a85a4a5e44b2 | 474 | */ |
mcm | 1:a85a4a5e44b2 | 475 | DS1307_status_t DS1307_SetDayOfTheWeek ( DS1307_vector_data_t myDayOfTheWeek ); |
mcm | 1:a85a4a5e44b2 | 476 | |
mcm | 1:a85a4a5e44b2 | 477 | /** It gets the day of the week. |
mcm | 1:a85a4a5e44b2 | 478 | */ |
mcm | 1:a85a4a5e44b2 | 479 | DS1307_status_t DS1307_GetDayOfTheWeek ( DS1307_vector_data_t* myDayOfTheWeek ); |
mcm | 1:a85a4a5e44b2 | 480 | |
mcm | 1:a85a4a5e44b2 | 481 | /** It sets the date ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 482 | */ |
mcm | 1:a85a4a5e44b2 | 483 | DS1307_status_t DS1307_SetDate ( DS1307_vector_data_t myDate ); |
mcm | 1:a85a4a5e44b2 | 484 | |
mcm | 1:a85a4a5e44b2 | 485 | /** It gets the date ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 486 | */ |
mcm | 1:a85a4a5e44b2 | 487 | DS1307_status_t DS1307_GetDate ( DS1307_vector_data_t* myDate ); |
mcm | 1:a85a4a5e44b2 | 488 | |
mcm | 1:a85a4a5e44b2 | 489 | /** It sets the month ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 490 | */ |
mcm | 1:a85a4a5e44b2 | 491 | DS1307_status_t DS1307_SetMonth ( DS1307_vector_data_t myMonth ); |
mcm | 1:a85a4a5e44b2 | 492 | |
mcm | 1:a85a4a5e44b2 | 493 | /** It gets the month ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 494 | */ |
mcm | 1:a85a4a5e44b2 | 495 | DS1307_status_t DS1307_GetMonth ( DS1307_vector_data_t* myMonth ); |
mcm | 1:a85a4a5e44b2 | 496 | |
mcm | 1:a85a4a5e44b2 | 497 | /** It sets the year ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 498 | */ |
mcm | 1:a85a4a5e44b2 | 499 | DS1307_status_t DS1307_SetYear ( DS1307_vector_data_t myYear ); |
mcm | 1:a85a4a5e44b2 | 500 | |
mcm | 1:a85a4a5e44b2 | 501 | /** It gets the year ( BCD mode ). |
mcm | 1:a85a4a5e44b2 | 502 | */ |
mcm | 1:a85a4a5e44b2 | 503 | DS1307_status_t DS1307_GetYear ( DS1307_vector_data_t* myYear ); |
mcm | 1:a85a4a5e44b2 | 504 | |
mcm | 1:a85a4a5e44b2 | 505 | /** It writes a byte into the RAM memory. |
mcm | 1:a85a4a5e44b2 | 506 | */ |
mcm | 1:a85a4a5e44b2 | 507 | DS1307_status_t DS1307_WriteByteRAM ( uint8_t myByte, uint8_t myAddress ); |
mcm | 1:a85a4a5e44b2 | 508 | |
mcm | 1:a85a4a5e44b2 | 509 | /** It reads a byte from the RAM memory. |
mcm | 1:a85a4a5e44b2 | 510 | */ |
mcm | 1:a85a4a5e44b2 | 511 | DS1307_status_t DS1307_ReadByteRAM ( uint8_t* myByte, uint8_t myAddress ); |
mcm | 1:a85a4a5e44b2 | 512 | |
mcm | 1:a85a4a5e44b2 | 513 | /** It ereases a byte into the RAM memory. |
mcm | 1:a85a4a5e44b2 | 514 | */ |
mcm | 1:a85a4a5e44b2 | 515 | DS1307_status_t DS1307_EraseByteRAM ( uint8_t myAddress ); |
mcm | 1:a85a4a5e44b2 | 516 | |
mcm | 1:a85a4a5e44b2 | 517 | |
mcm | 1:a85a4a5e44b2 | 518 | private: |
mcm | 1:a85a4a5e44b2 | 519 | I2C _i2c; |
mcm | 1:a85a4a5e44b2 | 520 | uint32_t _DS1307_Addr; |
mcm | 1:a85a4a5e44b2 | 521 | }; |
mcm | 1:a85a4a5e44b2 | 522 | |
mcm | 1:a85a4a5e44b2 | 523 | #endif |