simple tester for i2c on kl46z talking to ds1307 rtc module

Dependencies:   mbed

Committer:
cstevens
Date:
Fri May 26 09:58:44 2017 +0000
Revision:
0:2cc234c395e2
working test program 26-5-17

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cstevens 0:2cc234c395e2 1 #include "mbed.h"
cstevens 0:2cc234c395e2 2
cstevens 0:2cc234c395e2 3 DigitalOut myled(LED1);
cstevens 0:2cc234c395e2 4 I2C myi2c(PTE0,PTE1);
cstevens 0:2cc234c395e2 5 Serial pc(USBTX,USBRX);
cstevens 0:2cc234c395e2 6
cstevens 0:2cc234c395e2 7 const int ds1307=0xD0;
cstevens 0:2cc234c395e2 8 char data;
cstevens 0:2cc234c395e2 9
cstevens 0:2cc234c395e2 10
cstevens 0:2cc234c395e2 11 int bcd2int(unsigned int bcd)
cstevens 0:2cc234c395e2 12 {
cstevens 0:2cc234c395e2 13 int pos = sizeof(bcd) * 8;
cstevens 0:2cc234c395e2 14 int digit;
cstevens 0:2cc234c395e2 15 int val = 0;
cstevens 0:2cc234c395e2 16
cstevens 0:2cc234c395e2 17 do {
cstevens 0:2cc234c395e2 18 pos -= 4;
cstevens 0:2cc234c395e2 19 digit = (bcd >> pos) & 0xf;
cstevens 0:2cc234c395e2 20 val = val * 10 + digit;
cstevens 0:2cc234c395e2 21 } while (pos > 0);
cstevens 0:2cc234c395e2 22
cstevens 0:2cc234c395e2 23 return val;
cstevens 0:2cc234c395e2 24 }
cstevens 0:2cc234c395e2 25
cstevens 0:2cc234c395e2 26
cstevens 0:2cc234c395e2 27
cstevens 0:2cc234c395e2 28
cstevens 0:2cc234c395e2 29
cstevens 0:2cc234c395e2 30 int main()
cstevens 0:2cc234c395e2 31 {
cstevens 0:2cc234c395e2 32 int p;
cstevens 0:2cc234c395e2 33 myi2c.frequency(100000);
cstevens 0:2cc234c395e2 34
cstevens 0:2cc234c395e2 35 myi2c.write(ds1307,0x00,1); // tell the ds1307 we want to talk to address
cstevens 0:2cc234c395e2 36 for(p=0; p<8; p++) {
cstevens 0:2cc234c395e2 37 myi2c.read(ds1307,&data,1); // read one byte into data
cstevens 0:2cc234c395e2 38
cstevens 0:2cc234c395e2 39 pc.printf("item: %d\t\tread:%d\t \n\r",p,(int)data);
cstevens 0:2cc234c395e2 40 wait(0.01);
cstevens 0:2cc234c395e2 41 }
cstevens 0:2cc234c395e2 42
cstevens 0:2cc234c395e2 43 pc.printf("\n==========\n\r\nStarting the clock now\n\r");
cstevens 0:2cc234c395e2 44 char cmd[2];
cstevens 0:2cc234c395e2 45 cmd[0]=0;
cstevens 0:2cc234c395e2 46 cmd[1]=0;
cstevens 0:2cc234c395e2 47 myi2c.write(ds1307,cmd,2); // tell the ds1307 we want to talk to address 00
cstevens 0:2cc234c395e2 48
cstevens 0:2cc234c395e2 49
cstevens 0:2cc234c395e2 50 while(1) {
cstevens 0:2cc234c395e2 51 myled = 1;
cstevens 0:2cc234c395e2 52 wait(0.8);
cstevens 0:2cc234c395e2 53 myled = 0;
cstevens 0:2cc234c395e2 54
cstevens 0:2cc234c395e2 55 myi2c.write(ds1307,0x00,1); // tell the ds1307 we want to talk to address 0
cstevens 0:2cc234c395e2 56 for(p=0; p<8; p++) {
cstevens 0:2cc234c395e2 57 myi2c.read(ds1307,&data,1); // read one byte into data
cstevens 0:2cc234c395e2 58
cstevens 0:2cc234c395e2 59 pc.printf("item: %d\t\tread:%d\t VAL:%d \n\r",p,(int)data,bcd2int(data));
cstevens 0:2cc234c395e2 60 wait(0.01);
cstevens 0:2cc234c395e2 61 }
cstevens 0:2cc234c395e2 62 wait(5);
cstevens 0:2cc234c395e2 63 pc.printf("\n==========================\n\r");
cstevens 0:2cc234c395e2 64 }
cstevens 0:2cc234c395e2 65 }
cstevens 0:2cc234c395e2 66