Pic18F67K40 unable to read 7940 RTCC over I2C
I think I finally got it working. Had to buy a logic analyzer and make a few changes, but it seems to be working now. First I changed my clock settings to this:

Second I changed the SDA line from RC5 to RC4 to match what the RTC6 click was expecting. I probably didn't need to, but I wrote my own I2C logic for a basic write &amp; read because the MCC generated code was way too complicated for me to follow.
Here is the I2C.h
#ifndef I2C
#define I2C

#include &lt;xc.h&gt;
#include &lt;stdint.h&gt;

void I2C_Initialize(void);
void I2C_Start();
void I2C_Write(uint8_t address, uint8_t reg, uint8_t data);
uint8_t I2C_Read(uint8_t address, uint8_t reg);
void I2C_Stop();

#endif  

and the I2C.c file. I'm including the mcc.h file just so I can use the __delay_ms function in my write code.
#include &quot;I2C.h&quot;
#include &quot;./mcc_generated_files/mcc.h&quot;

void I2C_Initialize(){
    SSP1STAT = 0x80;
    SSP1CON1 = 0x08;
    SSP1CON2 = 0x00;
    SSP1ADD  = 0x06;
    SSP1CON1bits.SSPEN = 0;
}

void I2C_Start(){
    SSP1CON1bits.SSPEN = 1;
    SSP1CON2bits.SEN = 1;
    while(SSP1CON2bits.SEN);
    PIR3bits.SSP1IF = 0;
}

void I2C_Write(uint8_t address, uint8_t reg, uint8_t data){
    I2C_Start();
    SSP1BUF = (address &lt;&lt; 1);//left shift 1 bit to clear 7th bit (7th bit == 0 for write)
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    if(SSP1CON2bits.ACKSTAT){
        SSP1CON2bits.PEN = 1;
        while(SSP1CON2bits.PEN);
        return;
    }
    
    SSP1BUF = reg;
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    if(SSP1CON2bits.ACKSTAT){
        SSP1CON2bits.PEN = 1;
        while(SSP1CON2bits.PEN);
        return;
    }
    
    SSP1BUF = data;
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    __delay_ms(5);
    I2C_Stop();
}

uint8_t I2C_Read(uint8_t address, uint8_t reg){
    I2C_Start();
    uint8_t data;
    
    SSP1BUF = (address &lt;&lt; 1);//left shift 1 bit to clear 7th bit (7th bit == 0 for write)
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    if(SSP1CON2bits.ACKSTAT){
        SSP1CON2bits.PEN = 1;
        while(SSP1CON2bits.PEN);
        return (0xFF);
    }
    
    SSP1BUF = reg;
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    if(SSP1CON2bits.ACKSTAT){
        SSP1CON2bits.PEN = 1;
        while(SSP1CON2bits.PEN);
        return (0xFF);
    }
    
    SSP1CON2bits.RSEN = 1;
    while(SSP1CON2bits.RSEN);
    PIR3bits.SSP1IF = 0;
    
    address = (address &lt;&lt; 1); //shift left 1 bit to clear 7th bit
    address |= 0x01; //bitwise OR to set 7th bit a 1 (read is 1))    
    SSP1BUF = address;
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    if(SSP1CON2bits.ACKSTAT){
        SSP1CON2bits.PEN = 1;
        while(SSP1CON2bits.PEN);
        return (0xFF);
    }
    SSP1CON2bits.RCEN = 1;    
    while(!SSP1STATbits.BF);
    data = SSP1BUF;
    
    SSP1CON2bits.ACKDT = 1;
    SSP1CON2bits.ACKEN = 1;
    while(SSP1CON2bits.ACKEN);
        
    I2C_Stop();
    
    return data;
}

void I2C_Stop(){
    SSP1CON2bits.PEN = 0;
    while(SSP1CON2bits.PEN);
    SSP1CON1bits.SSPEN = 0;
    SSP1CON2bits.RCEN = 0;
}

All combined I now see this in my logic analyzer.


Hope this helps someone else. Here is the link to my github for this project