/************************************************************************/ // MCP795XX-Routine für PIC18F47Q43 // Programmierer: Fa. Schwabenplan, Ingo Schick // Compiler: XC8 // Datum: 10.06.2024 /************************************************************************/ #ifndef __MCP795XX_H #define __MCP795XX_H /************************************************************************/ // Include-Dateien /************************************************************************/ #include #include #include #include #include "..//system/system.h" #include "../system/pins.h" #include "../spi/spi1.h" /************************************************************************/ // SPI-Befehle /************************************************************************/ #define MCP795XX_EEREAD 0x03 // Read data from EEPROM array beginning at selected address #define MCP795XX_EEWRITE 0x02 // Write data to EEPROM array beginning at selected address #define MCP795XX_EEWRDI 0x04 // Reset the write enable latch (disable write operations) #define MCP795XX_EEWREN 0x06 // Set the write enable latch (enable write operations) #define MCP795XX_SRREAD 0x05 // Read STATUS register #define MCP795XX_SRWRITE 0x01 // Write STATUS register #define MCP795XX_READ 0x13 // Read data from RTCC/SRAM array beginning at selected address #define MCP795XX_WRITE 0x12 // Write data to RTCC/SRAM array beginning at selected address #define MCP795XX_UNLOCK 0x14 // Unlock the protected EEPROM block for a write operation #define MCP795XX_IDWRITE 0x32 // Write data to the protected EEPROM block beginning at selected address #define MCP795XX_IDREAD 0x33 // Read data from the protected EEPROM block beginning at the selected address #define MCP795XX_CLRRAM 0x54 // Clear all SRAM data to ?0? /************************************************************************/ /************************************************************************/ // MCP795XX Register Adressen /************************************************************************/ /************************************************************************/ // Uhrzeit /************************************************************************/ #define RTCHSEC 0x00 #define RTCSEC 0x01 #define RTCMIN 0x02 #define RTCHOUR 0x03 #define RTCWKDAY 0x04 #define RTCDATE 0x05 #define RTCMTH 0x06 #define RTCYEAR 0x07 #define CONTROL 0x08 #define OSCTRIM 0x09 /************************************************************************/ /************************************************************************/ // Alarm Nr. 0 /************************************************************************/ #define ALM0SEC 0x0C #define ALM0MIN 0x0D #define ALM0HOUR 0x0E #define ALM0WKDAY 0x0F #define ALM0DATE 0x10 #define ALM0MTH 0x11 /************************************************************************/ /************************************************************************/ // Alarm Nr. 1 /************************************************************************/ #define ALM1HSEC 0x12 #define ALM1SEC 0x13 #define ALM1MIN 0x14 #define ALM1HOUR 0x15 #define ALM1WKDAY 0x16 #define ALM1DATE 0x17 /************************************************************************/ /************************************************************************/ // Power-Down Timestamp /************************************************************************/ #define PWRDNMIN 0x18 #define PWRDNHOUR 0x19 #define PWRDNDATE 0x1A #define PWRDNMTH 0x1B /************************************************************************/ /************************************************************************/ // Power-Up Timestamp /************************************************************************/ #define PWRUPMIN 0x1C #define PWRUPHOUR 0x1D #define PWRUPDATE 0x1E #define PWRUPMTH 0x1F /************************************************************************/ /************************************************************************/ // Defines zum Lesen und Schreiben über den SPI-Bus /************************************************************************/ #define RTC_SPI_WRITE8(byte) SPI1_ByteExchange(byte) #define RTC_SPI_READ8() SPI1_ByteExchange(0) /************************************************************************/ // Struktur Datum und Uhrzeit /************************************************************************/ typedef struct _Date_Time_ { uint8_t HSekunden; // 0 - 99 uint8_t Sekunden; // 0 - 59 uint8_t Minuten; // 0 - 59 uint8_t Stunden; // 0 - 23 (24 Stunden-Modus) uint8_t Wochentag; // 0 = Sonntag, 1 = Montag, etc. uint8_t Tag; // 1 - 31 uint8_t Monat; // 1 - 12 uint8_t Jahr; // 00 - 99 }date_time_t; /************************************************************************/ /************************************************************************/ // Wochentag Namen /************************************************************************/ uint8_t const Wochentag_Namen[8][4] = { {" "}, {"So."}, {"Mo."}, {"Di."}, {"Mi."}, {"Do."}, {"Fr."}, {"Sa."} }; /************************************************************************/ /************************************************************************/ // Prototypen-Deklarationen /************************************************************************/ uint8_t BCD2BIN(uint8_t bcd_value); uint8_t BIN2BCD(uint8_t value); uint8_t MCP795XX_Write_Byte(uint8_t address, uint8_t data); uint8_t MCP795XX_Read_Byte(uint8_t address); void MCP795XX_Write_HSekunden(date_time_t *dt); void MCP795XX_Write_Sekunden(date_time_t *dt); void MCP795XX_Write_Minuten(date_time_t *dt); void MCP795XX_Write_Stunden(date_time_t *dt); void MCP795XX_Write_Wochentag(date_time_t *dt); void MCP795XX_Write_Tag(date_time_t *dt); void MCP795XX_Write_Monat(date_time_t *dt); void MCP795XX_Write_Jahr(date_time_t *dt); uint8_t MCP795XX_Read_HSekunden(date_time_t *dt); uint8_t MCP795XX_Read_Sekunden(date_time_t *dt); uint8_t MCP795XX_Read_Minuten(date_time_t *dt); uint8_t MCP795XX_Read_Stunden(date_time_t *dt); uint8_t MCP795XX_Read_Wochentag(date_time_t *dt); uint8_t MCP795XX_Read_Tag(date_time_t *dt); uint8_t MCP795XX_Read_Monat(date_time_t *dt); uint8_t MCP795XX_Read_Jahr(date_time_t *dt); void MCP795XX_Reset(void); uint8_t MCP795XX_Write_EE_Byte(uint8_t unc_Register, uint8_t unc_Daten); uint8_t MCP795XX_Read_EE_Byte(uint8_t unc_Register); uint8_t MCP795XX_Read_ID_Byte(uint8_t unc_Register); void MCP795XX_Clear_SRAM(void); bool Schaltjahr(void); /************************************************************************/ #endif