We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Please help me at C code for reading time from DS1407 on I2C bus.I am able to R/W data to an EEPROM on the same bus.But when i read the time i get 0xffff for hrs,mins and secs even after initializing the RTC chip.
" If you have both devices on the same bus, you will have to use 100KHz for everything."
So kind of your regular and a quick response.
Yes, As per the specification i bring the clock rate from 400 kHz to 100 kHz by setting the appropriate value in SSPADDR register, the slave doesn't acknowledge to the slave address. I'm am putting I2C_READ module with the initialization. Please verify where the mistake may be.
/*
I2C CLOCK RATE W/BRG --------------------- FCY FCY*2 BRG VALUE FSCL (2 rollovers of BRG) -------------------------------------------------------------- 10 MHz 20 MHz 19h 400 kHz(1) 10 MHz 20 MHz 20h 312.5 kHz 10 MHz 20 MHz 3Fh 100 kHz 4 MHz 8 MHz 0Ah 400 kHz(1) 4 MHz 8 MHz 0Dh 308 kHz 4 MHz 8 MHz 28h 100 kHz 1 MHz 2 MHz 03h 333 kHz(1) 1 MHz 2 MHz 0Ah 100 kHz 1 MHz 2 MHz 00h 1 MHz(1)
Note 1: The I2C interface does not conform to the 400 kHz I2C specification (which applies to rates greater than 100 kHz) in all details, but may be used with care where higher rates are required by the application. */
void i2c_init(void) { TRISC3=1; TRISC4=1;
SSPCON=0x28; SSPCON2=00; SSPADD=0x28; }
unsigned char DS1307_READ(unsigned char addr) // addr=0x03 { unsigned char read_data; start(); write(0xd0); //while(!ACKSTAT){} // test here whether acknowledged: it hangs up here. write(addr); restart(); write(0xd1); check_idle(); RCEN=1; check_idle(); read_data= SSPBUF; check_idle(); ACKDT=1; ACKEN=1; stop(); return read_data; }
Please read the instructions on how to post source code: www.danlhenry.com/.../keil_code.png
Note that TABs don't work (well) - use spaces instead,
and don't forget to check it in the 'Preview' before you post...