working code of cdms with i2c

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
viswa_chaitanya
Date:
Thu Sep 18 10:32:43 2014 +0000
Revision:
7:6b1a6941ac87
working code of cdms with i2c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
viswa_chaitanya 7:6b1a6941ac87 1 #include "master.h"
viswa_chaitanya 7:6b1a6941ac87 2
viswa_chaitanya 7:6b1a6941ac87 3 I2C master (p28,p27); //configure pins p27,p28 as I2C master
viswa_chaitanya 7:6b1a6941ac87 4 Serial pc (USBTX,USBRX);
viswa_chaitanya 7:6b1a6941ac87 5
viswa_chaitanya 7:6b1a6941ac87 6 struct SensorData //HK_data_structure
viswa_chaitanya 7:6b1a6941ac87 7 {
viswa_chaitanya 7:6b1a6941ac87 8 char voltage[10];
viswa_chaitanya 7:6b1a6941ac87 9 char current[10];
viswa_chaitanya 7:6b1a6941ac87 10 char temp[10];
viswa_chaitanya 7:6b1a6941ac87 11 } Sensor;
viswa_chaitanya 7:6b1a6941ac87 12
viswa_chaitanya 7:6b1a6941ac87 13 void FUNC_I2C_MASTER_MAIN(char command, int slave_address, int iterations)
viswa_chaitanya 7:6b1a6941ac87 14 {
viswa_chaitanya 7:6b1a6941ac87 15 wait(0.5);
viswa_chaitanya 7:6b1a6941ac87 16 printf("1\n");
viswa_chaitanya 7:6b1a6941ac87 17 bool acknowledge1;
viswa_chaitanya 7:6b1a6941ac87 18 bool acknowledge2;
viswa_chaitanya 7:6b1a6941ac87 19 uint8_t loopvariable2=0;
viswa_chaitanya 7:6b1a6941ac87 20 bool loopvariable1 = true;
viswa_chaitanya 7:6b1a6941ac87 21 bool loopvariable3 = true;
viswa_chaitanya 7:6b1a6941ac87 22 while(loopvariable1)
viswa_chaitanya 7:6b1a6941ac87 23 {
viswa_chaitanya 7:6b1a6941ac87 24 //-------------writing the command to slave--------------------------------------------------------------
viswa_chaitanya 7:6b1a6941ac87 25 printf("2\n");
viswa_chaitanya 7:6b1a6941ac87 26 master.frequency(100000); //set clock frequency
viswa_chaitanya 7:6b1a6941ac87 27 master.start(); //initiating the data transfer
viswa_chaitanya 7:6b1a6941ac87 28 acknowledge2 = (bool) master.write(slave_address|0x00); //addressing the slave to write
viswa_chaitanya 7:6b1a6941ac87 29 if(acknowledge2) //proceeding further only if slave is addressed
viswa_chaitanya 7:6b1a6941ac87 30 {
viswa_chaitanya 7:6b1a6941ac87 31 printf("3\n");
viswa_chaitanya 7:6b1a6941ac87 32 acknowledge1 = (bool) master.write(command); //sending the command to slave
viswa_chaitanya 7:6b1a6941ac87 33 if(acknowledge1) //proceeding further only if sent data is acknowledged
viswa_chaitanya 7:6b1a6941ac87 34 {
viswa_chaitanya 7:6b1a6941ac87 35 printf("acknowledge1=%d\n",acknowledge1);
viswa_chaitanya 7:6b1a6941ac87 36 loopvariable1=false; //if acknowledged, breaking loop in next iteration
viswa_chaitanya 7:6b1a6941ac87 37
viswa_chaitanya 7:6b1a6941ac87 38 //--------------reading data from slave---------------------------------------------------------------
viswa_chaitanya 7:6b1a6941ac87 39 while(loopvariable3)
viswa_chaitanya 7:6b1a6941ac87 40 {
viswa_chaitanya 7:6b1a6941ac87 41 master.frequency(100000); //set clock frequency
viswa_chaitanya 7:6b1a6941ac87 42 master.start(); //initiate data transfer
viswa_chaitanya 7:6b1a6941ac87 43 acknowledge1 = (bool) master.write(slave_address | 0x01); //addressing the slave to read
viswa_chaitanya 7:6b1a6941ac87 44
viswa_chaitanya 7:6b1a6941ac87 45 if(acknowledge1) //proceedong only if slae is addressed
viswa_chaitanya 7:6b1a6941ac87 46 {
viswa_chaitanya 7:6b1a6941ac87 47 loopvariable3 = false;
viswa_chaitanya 7:6b1a6941ac87 48 while(loopvariable2<8)
viswa_chaitanya 7:6b1a6941ac87 49 {
viswa_chaitanya 7:6b1a6941ac87 50 Sensor.voltage[loopvariable2] = receive_byte(); //receiving data if acknowledged
viswa_chaitanya 7:6b1a6941ac87 51 printf(" voltage%d = %x\n",loopvariable2,Sensor.voltage[loopvariable2]);
viswa_chaitanya 7:6b1a6941ac87 52
viswa_chaitanya 7:6b1a6941ac87 53 Sensor.current[loopvariable2] = receive_byte(); //receiving data if acknowledged
viswa_chaitanya 7:6b1a6941ac87 54 printf(" current%d = %x\n",loopvariable2, Sensor.current[loopvariable2]);
viswa_chaitanya 7:6b1a6941ac87 55
viswa_chaitanya 7:6b1a6941ac87 56 Sensor.temp[loopvariable2] = receive_byte(); //receiving data if acknowledged
viswa_chaitanya 7:6b1a6941ac87 57 printf(" temperature%d = %x\n",loopvariable2,Sensor.temp[loopvariable2]);
viswa_chaitanya 7:6b1a6941ac87 58
viswa_chaitanya 7:6b1a6941ac87 59 loopvariable2++;
viswa_chaitanya 7:6b1a6941ac87 60
viswa_chaitanya 7:6b1a6941ac87 61 } //while(loopvariable2<30)
viswa_chaitanya 7:6b1a6941ac87 62 }//if(acknowledge1==1)
viswa_chaitanya 7:6b1a6941ac87 63
viswa_chaitanya 7:6b1a6941ac87 64 master.stop();
viswa_chaitanya 7:6b1a6941ac87 65 }//while(loopvariable3)
viswa_chaitanya 7:6b1a6941ac87 66 }//if(acknowledge1==1)
viswa_chaitanya 7:6b1a6941ac87 67 }//if(acknowledge2==1)
viswa_chaitanya 7:6b1a6941ac87 68 }//while(loopvariable1)
viswa_chaitanya 7:6b1a6941ac87 69 printf("done");
viswa_chaitanya 7:6b1a6941ac87 70 }//main
viswa_chaitanya 7:6b1a6941ac87 71
viswa_chaitanya 7:6b1a6941ac87 72
viswa_chaitanya 7:6b1a6941ac87 73 //----------------function to read and return the data received-----------------------------------
viswa_chaitanya 7:6b1a6941ac87 74 char receive_byte()
viswa_chaitanya 7:6b1a6941ac87 75 {
viswa_chaitanya 7:6b1a6941ac87 76
viswa_chaitanya 7:6b1a6941ac87 77 char value;
viswa_chaitanya 7:6b1a6941ac87 78 value = master.read(1);
viswa_chaitanya 7:6b1a6941ac87 79 return(value); //returning the 4 byte floating point number
viswa_chaitanya 7:6b1a6941ac87 80 }
viswa_chaitanya 7:6b1a6941ac87 81