CDMS integrated with pyld b4 checking
Dependencies: SDFileSystem mbed-rtos mbed-src mbed
Fork of cdms_i2csdrtc by
main.cpp@2:fa5a3ff74b74, 2015-04-13 (annotated)
- Committer:
- greenroshks
- Date:
- Mon Apr 13 18:03:51 2015 +0000
- Revision:
- 2:fa5a3ff74b74
- Parent:
- 1:59da9694681e
CDMS integrated with PAYLOAD b4 checking
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sureshsusurla | 0:2e3d21e95c97 | 1 | #include "mbed.h" |
sureshsusurla | 0:2e3d21e95c97 | 2 | #include "SDFileSystem.h" |
greenroshks | 2:fa5a3ff74b74 | 3 | #define PYLD_ADD 0x48 |
greenroshks | 2:fa5a3ff74b74 | 4 | #define BAE_ADD 0x20 |
sureshsusurla | 0:2e3d21e95c97 | 5 | /************************Include the required Header files for the code *******************************/ |
greenroshks | 2:fa5a3ff74b74 | 6 | //#include "mbed.h" |
sureshsusurla | 0:2e3d21e95c97 | 7 | #include "string.h" |
sureshsusurla | 0:2e3d21e95c97 | 8 | |
raizel_varun | 1:59da9694681e | 9 | #include "rtos.h" |
raizel_varun | 1:59da9694681e | 10 | #include "pin_config.h" |
greenroshks | 2:fa5a3ff74b74 | 11 | //const int addr = 0x20; //slave address |
raizel_varun | 1:59da9694681e | 12 | I2C master (PIN72,PIN71); //configure pins p27,p28 as I2C master |
raizel_varun | 1:59da9694681e | 13 | Serial pc (USBTX,USBRX); |
raizel_varun | 1:59da9694681e | 14 | DigitalOut interrupt(PIN4); |
raizel_varun | 1:59da9694681e | 15 | InterruptIn data_ready(PIN39); |
greenroshks | 2:fa5a3ff74b74 | 16 | InterruptIn data_ready_pyld(PIN40); //to be changed for i2c comm. between pyld and bae |
greenroshks | 2:fa5a3ff74b74 | 17 | void store_data(char*); |
raizel_varun | 1:59da9694681e | 18 | |
raizel_varun | 1:59da9694681e | 19 | int reset; |
raizel_varun | 1:59da9694681e | 20 | Timer t; |
raizel_varun | 1:59da9694681e | 21 | Timer t1; |
raizel_varun | 1:59da9694681e | 22 | Timer t2; |
raizel_varun | 1:59da9694681e | 23 | Timer t3; |
raizel_varun | 1:59da9694681e | 24 | |
raizel_varun | 1:59da9694681e | 25 | typedef struct |
raizel_varun | 1:59da9694681e | 26 | { |
raizel_varun | 1:59da9694681e | 27 | char data; // To avoid dynamic memory allocation |
raizel_varun | 1:59da9694681e | 28 | int length; |
raizel_varun | 1:59da9694681e | 29 | }i2c_data; |
raizel_varun | 1:59da9694681e | 30 | |
raizel_varun | 1:59da9694681e | 31 | //Mail<i2c_data,16> i2c_data_receive; |
raizel_varun | 1:59da9694681e | 32 | Mail<i2c_data,16> i2c_data_send; |
raizel_varun | 1:59da9694681e | 33 | |
raizel_varun | 1:59da9694681e | 34 | Thread * ptr_t_i2c; |
greenroshks | 2:fa5a3ff74b74 | 35 | int switchflag = -1; // to switch between BAE and PYLD |
raizel_varun | 1:59da9694681e | 36 | void FUNC_I2C_MASTER_FSLAVE(char * data,int length) |
raizel_varun | 1:59da9694681e | 37 | { |
raizel_varun | 1:59da9694681e | 38 | |
raizel_varun | 1:59da9694681e | 39 | |
raizel_varun | 1:59da9694681e | 40 | bool ack0 =true; |
raizel_varun | 1:59da9694681e | 41 | |
raizel_varun | 1:59da9694681e | 42 | interrupt = 1; |
raizel_varun | 1:59da9694681e | 43 | t1.start(); |
raizel_varun | 1:59da9694681e | 44 | //wait_ms(20); |
greenroshks | 2:fa5a3ff74b74 | 45 | if(switchflag == 0) |
greenroshks | 2:fa5a3ff74b74 | 46 | ack0 = master.read(BAE_ADD|1,data,length); |
greenroshks | 2:fa5a3ff74b74 | 47 | else if (switchflag==1) |
greenroshks | 2:fa5a3ff74b74 | 48 | ack0 = master.read(PYLD_ADD|1,data,length); |
raizel_varun | 1:59da9694681e | 49 | t1.stop(); |
greenroshks | 2:fa5a3ff74b74 | 50 | store_data(data); |
raizel_varun | 1:59da9694681e | 51 | |
raizel_varun | 1:59da9694681e | 52 | if(!ack0) |
raizel_varun | 1:59da9694681e | 53 | { |
raizel_varun | 1:59da9694681e | 54 | printf("\n master has read %s from slave\n\r",data); |
raizel_varun | 1:59da9694681e | 55 | |
raizel_varun | 1:59da9694681e | 56 | } |
raizel_varun | 1:59da9694681e | 57 | //master.stop(); |
raizel_varun | 1:59da9694681e | 58 | printf("\n%d\n\r",t1.read_us()); |
raizel_varun | 1:59da9694681e | 59 | t1.reset(); |
raizel_varun | 1:59da9694681e | 60 | |
raizel_varun | 1:59da9694681e | 61 | interrupt=0; |
greenroshks | 2:fa5a3ff74b74 | 62 | switchflag = -1; |
raizel_varun | 1:59da9694681e | 63 | } |
raizel_varun | 1:59da9694681e | 64 | |
raizel_varun | 1:59da9694681e | 65 | typedef struct { |
raizel_varun | 1:59da9694681e | 66 | char Voltage[9]; |
raizel_varun | 1:59da9694681e | 67 | char Current[5]; |
raizel_varun | 1:59da9694681e | 68 | char Temperature[2]; |
raizel_varun | 1:59da9694681e | 69 | char PanelTemperature[3];//read by the 4 thermistors on solar panels |
raizel_varun | 1:59da9694681e | 70 | char BatteryTemperature; //to be populated |
raizel_varun | 1:59da9694681e | 71 | char faultpoll; //polled faults |
raizel_varun | 1:59da9694681e | 72 | char faultir; //interrupted faults |
raizel_varun | 1:59da9694681e | 73 | char power_mode; //power modes |
raizel_varun | 1:59da9694681e | 74 | char AngularSpeed[3]; |
raizel_varun | 1:59da9694681e | 75 | char Bnewvalue[3]; |
raizel_varun | 1:59da9694681e | 76 | |
raizel_varun | 1:59da9694681e | 77 | //float magnetometer,gyro=>to be addes |
raizel_varun | 1:59da9694681e | 78 | } hk_data; |
raizel_varun | 1:59da9694681e | 79 | hk_data decode_data; |
raizel_varun | 1:59da9694681e | 80 | |
raizel_varun | 1:59da9694681e | 81 | /*void TC_DECODE(char *data_hk) //getting the structure back from hk data sent by bae |
raizel_varun | 1:59da9694681e | 82 | { |
raizel_varun | 1:59da9694681e | 83 | for(int i=0;i<=7;i++) |
raizel_varun | 1:59da9694681e | 84 | { |
raizel_varun | 1:59da9694681e | 85 | decode_data.Voltage[i] = data_hk[i]; |
raizel_varun | 1:59da9694681e | 86 | decode_data.Voltage[8] = '\0'; |
raizel_varun | 1:59da9694681e | 87 | } |
raizel_varun | 1:59da9694681e | 88 | for(int i=0;i<=3;i++) |
raizel_varun | 1:59da9694681e | 89 | { |
raizel_varun | 1:59da9694681e | 90 | decode_data.Current[i] = data_hk[8+i]; |
raizel_varun | 1:59da9694681e | 91 | decode_data.Current[4] = '\0'; |
raizel_varun | 1:59da9694681e | 92 | } |
raizel_varun | 1:59da9694681e | 93 | decode_data.Temperature[0] = data_hk[12]; |
raizel_varun | 1:59da9694681e | 94 | decode_data.Temperature[1] = '\0'; |
raizel_varun | 1:59da9694681e | 95 | for(int i=0;i<=1;i++) |
raizel_varun | 1:59da9694681e | 96 | { |
raizel_varun | 1:59da9694681e | 97 | decode_data.PanelTemperature[i] = data_hk[13+i]; |
raizel_varun | 1:59da9694681e | 98 | decode_data.PanelTemperature[2] = '\0'; |
raizel_varun | 1:59da9694681e | 99 | } |
raizel_varun | 1:59da9694681e | 100 | decode_data.BatteryTemperature = data_hk[15]; |
raizel_varun | 1:59da9694681e | 101 | decode_data.faultpoll = data_hk[16]; |
raizel_varun | 1:59da9694681e | 102 | decode_data.faultir = data_hk[17]; |
raizel_varun | 1:59da9694681e | 103 | decode_data.power_mode = data_hk[18]; |
raizel_varun | 1:59da9694681e | 104 | for(int i=0;i<=1;i++) |
raizel_varun | 1:59da9694681e | 105 | { |
raizel_varun | 1:59da9694681e | 106 | decode_data.AngularSpeed[i] = data_hk[19+i]; |
raizel_varun | 1:59da9694681e | 107 | decode_data.AngularSpeed[2] = '\0'; |
raizel_varun | 1:59da9694681e | 108 | } |
raizel_varun | 1:59da9694681e | 109 | for(int i=0;i<=1;i++) |
raizel_varun | 1:59da9694681e | 110 | { |
raizel_varun | 1:59da9694681e | 111 | decode_data.Bnewvalue[i] = data_hk[21+i]; |
raizel_varun | 1:59da9694681e | 112 | decode_data.Bnewvalue[2] = '\0'; |
raizel_varun | 1:59da9694681e | 113 | } |
raizel_varun | 1:59da9694681e | 114 | printf("\n voltage %s\n\r",decode_data.Voltage); |
raizel_varun | 1:59da9694681e | 115 | printf("\n current %s\n\r",decode_data.Current); |
raizel_varun | 1:59da9694681e | 116 | printf("\n faultpoll %c\n\r",decode_data.faultpoll); |
raizel_varun | 1:59da9694681e | 117 | }*/ |
raizel_varun | 1:59da9694681e | 118 | |
raizel_varun | 1:59da9694681e | 119 | |
raizel_varun | 1:59da9694681e | 120 | void T_I2C_MASTER_FSLAVE(void const *args) |
raizel_varun | 1:59da9694681e | 121 | { |
raizel_varun | 1:59da9694681e | 122 | char data_receive[25]; |
raizel_varun | 1:59da9694681e | 123 | while(1) |
raizel_varun | 1:59da9694681e | 124 | { |
raizel_varun | 1:59da9694681e | 125 | Thread::signal_wait(0x1); |
raizel_varun | 1:59da9694681e | 126 | |
raizel_varun | 1:59da9694681e | 127 | |
raizel_varun | 1:59da9694681e | 128 | FUNC_I2C_MASTER_FSLAVE(data_receive,25); |
raizel_varun | 1:59da9694681e | 129 | /*i2c_data * i2c_data_r = i2c_data_receive.alloc(); |
raizel_varun | 1:59da9694681e | 130 | strcpy(i2c_data_r->data , data_receive); |
raizel_varun | 1:59da9694681e | 131 | i2c_data_r->length = 25; |
raizel_varun | 1:59da9694681e | 132 | i2c_data_receive.put(i2c_data_r);*/ |
raizel_varun | 1:59da9694681e | 133 | printf("\n Data received from slave is %s\n\r",data_receive); |
raizel_varun | 1:59da9694681e | 134 | //TC_DECODE(data_receive); |
raizel_varun | 1:59da9694681e | 135 | } |
raizel_varun | 1:59da9694681e | 136 | } |
raizel_varun | 1:59da9694681e | 137 | |
greenroshks | 2:fa5a3ff74b74 | 138 | void FUNC_INT_BAE() |
raizel_varun | 1:59da9694681e | 139 | { |
greenroshks | 2:fa5a3ff74b74 | 140 | |
greenroshks | 2:fa5a3ff74b74 | 141 | switchflag = 0; |
greenroshks | 2:fa5a3ff74b74 | 142 | ptr_t_i2c->signal_set(0x1); |
greenroshks | 2:fa5a3ff74b74 | 143 | |
greenroshks | 2:fa5a3ff74b74 | 144 | } |
greenroshks | 2:fa5a3ff74b74 | 145 | |
greenroshks | 2:fa5a3ff74b74 | 146 | void FUNC_INT_PYLD() |
greenroshks | 2:fa5a3ff74b74 | 147 | { |
greenroshks | 2:fa5a3ff74b74 | 148 | |
greenroshks | 2:fa5a3ff74b74 | 149 | switchflag = 1; |
raizel_varun | 1:59da9694681e | 150 | ptr_t_i2c->signal_set(0x1); |
raizel_varun | 1:59da9694681e | 151 | |
raizel_varun | 1:59da9694681e | 152 | } |
raizel_varun | 1:59da9694681e | 153 | |
raizel_varun | 1:59da9694681e | 154 | char writedata; |
raizel_varun | 1:59da9694681e | 155 | bool write2slave; |
raizel_varun | 1:59da9694681e | 156 | bool master_status_write; |
raizel_varun | 1:59da9694681e | 157 | void FUNC_MASTER_WRITE() |
raizel_varun | 1:59da9694681e | 158 | { //wait(1); |
raizel_varun | 1:59da9694681e | 159 | write2slave=true; |
raizel_varun | 1:59da9694681e | 160 | |
raizel_varun | 1:59da9694681e | 161 | |
raizel_varun | 1:59da9694681e | 162 | |
raizel_varun | 1:59da9694681e | 163 | char data = pc.getc(); |
raizel_varun | 1:59da9694681e | 164 | interrupt = 1; |
raizel_varun | 1:59da9694681e | 165 | t.start(); |
raizel_varun | 1:59da9694681e | 166 | t3.start(); |
raizel_varun | 1:59da9694681e | 167 | wait_ms(20); |
raizel_varun | 1:59da9694681e | 168 | i2c_data * i2c_data_s = i2c_data_send.alloc(); |
raizel_varun | 1:59da9694681e | 169 | i2c_data_s->data = data; |
raizel_varun | 1:59da9694681e | 170 | i2c_data_s->length = 1; |
raizel_varun | 1:59da9694681e | 171 | i2c_data_send.put(i2c_data_s); |
raizel_varun | 1:59da9694681e | 172 | master_status_write = true; |
raizel_varun | 1:59da9694681e | 173 | |
raizel_varun | 1:59da9694681e | 174 | // interrupt = 1; |
raizel_varun | 1:59da9694681e | 175 | |
raizel_varun | 1:59da9694681e | 176 | osEvent evt = i2c_data_send.get(); |
raizel_varun | 1:59da9694681e | 177 | if (evt.status == osEventMail) |
raizel_varun | 1:59da9694681e | 178 | { |
raizel_varun | 1:59da9694681e | 179 | i2c_data *i2c_data_s = (i2c_data*)evt.value.p; |
raizel_varun | 1:59da9694681e | 180 | writedata = i2c_data_s -> data; |
raizel_varun | 1:59da9694681e | 181 | t.stop(); |
greenroshks | 2:fa5a3ff74b74 | 182 | //t3.start(); |
greenroshks | 2:fa5a3ff74b74 | 183 | if(data%2) |
greenroshks | 2:fa5a3ff74b74 | 184 | master_status_write = (bool) master.write(BAE_ADD|0x00,&writedata,1); |
greenroshks | 2:fa5a3ff74b74 | 185 | else |
greenroshks | 2:fa5a3ff74b74 | 186 | master_status_write = (bool) master.write(PYLD_ADD|0x00,&writedata,1); |
raizel_varun | 1:59da9694681e | 187 | t3.stop(); |
raizel_varun | 1:59da9694681e | 188 | if(master_status_write==0) |
raizel_varun | 1:59da9694681e | 189 | { |
raizel_varun | 1:59da9694681e | 190 | printf("master has written %c to slave\n\r",writedata); |
raizel_varun | 1:59da9694681e | 191 | write2slave=false; |
raizel_varun | 1:59da9694681e | 192 | } |
raizel_varun | 1:59da9694681e | 193 | i2c_data_send.free(i2c_data_s); |
raizel_varun | 1:59da9694681e | 194 | printf("\n%d\n",t.read_us()); |
raizel_varun | 1:59da9694681e | 195 | t.reset(); |
raizel_varun | 1:59da9694681e | 196 | printf("\n%d\n",t3.read_us()); |
raizel_varun | 1:59da9694681e | 197 | t3.reset(); |
raizel_varun | 1:59da9694681e | 198 | } |
raizel_varun | 1:59da9694681e | 199 | interrupt = 0; |
raizel_varun | 1:59da9694681e | 200 | } |
raizel_varun | 1:59da9694681e | 201 | |
raizel_varun | 1:59da9694681e | 202 | |
raizel_varun | 1:59da9694681e | 203 | |
raizel_varun | 1:59da9694681e | 204 | |
raizel_varun | 1:59da9694681e | 205 | |
raizel_varun | 1:59da9694681e | 206 | |
raizel_varun | 1:59da9694681e | 207 | |
raizel_varun | 1:59da9694681e | 208 | |
raizel_varun | 1:59da9694681e | 209 | |
sureshsusurla | 0:2e3d21e95c97 | 210 | /********************************** Function Prototypes declaration ***********************************/ |
sureshsusurla | 0:2e3d21e95c97 | 211 | int FUNC_CDMS_hex2int(int); // Need to convert the RTC time values to integers |
sureshsusurla | 0:2e3d21e95c97 | 212 | void FUNC_CDMS_Gettime(void); // Function to get the time values from RTC registers |
sureshsusurla | 0:2e3d21e95c97 | 213 | void FUNC_CDMS_init_values(void); // Function to initialize the registers in the RTC |
sureshsusurla | 0:2e3d21e95c97 | 214 | |
sureshsusurla | 0:2e3d21e95c97 | 215 | |
sureshsusurla | 0:2e3d21e95c97 | 216 | /***************** Configure the SPI1 of the CDMS uc as the data bus for the RTC***********************/ |
sureshsusurla | 0:2e3d21e95c97 | 217 | SPI spi(PTE1,PTE3, PTE2); // mosi, miso, sclk |
sureshsusurla | 0:2e3d21e95c97 | 218 | DigitalOut cs(PTE29); // PTE29 is used for chip select |
sureshsusurla | 0:2e3d21e95c97 | 219 | |
sureshsusurla | 0:2e3d21e95c97 | 220 | char ch; |
sureshsusurla | 0:2e3d21e95c97 | 221 | SDFileSystem sd(PTE1, PTE3, PTE2, PTE22, "sd"); // the pinout on the mbed Cool Components workshop board |
raizel_varun | 1:59da9694681e | 222 | |
sureshsusurla | 0:2e3d21e95c97 | 223 | char time_stamp[15]; |
sureshsusurla | 0:2e3d21e95c97 | 224 | |
sureshsusurla | 0:2e3d21e95c97 | 225 | /***********************Initialization function of the RTC********************************************/ |
sureshsusurla | 0:2e3d21e95c97 | 226 | void FUNC_CDMS_init_values(void) |
sureshsusurla | 0:2e3d21e95c97 | 227 | { |
sureshsusurla | 0:2e3d21e95c97 | 228 | cs=0; |
sureshsusurla | 0:2e3d21e95c97 | 229 | spi.format(8,3); // Set the data bit with to be of 8 bits, |
sureshsusurla | 0:2e3d21e95c97 | 230 | // data tx mode is 3 |
sureshsusurla | 0:2e3d21e95c97 | 231 | spi.frequency(1000000); // Set Data rate to be 1 MHz |
sureshsusurla | 0:2e3d21e95c97 | 232 | |
sureshsusurla | 0:2e3d21e95c97 | 233 | cs = 0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 234 | spi.write(0x80); // Send the address of the Seconds register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 235 | spi.write(0x00); // Set seconds value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 236 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 237 | |
sureshsusurla | 0:2e3d21e95c97 | 238 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 239 | spi.write(0x81); // Send the address of the Minutes register 0x81 |
sureshsusurla | 0:2e3d21e95c97 | 240 | spi.write(0x00); // Set minutes value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 241 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 242 | |
sureshsusurla | 0:2e3d21e95c97 | 243 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 244 | spi.write(0x82); // Send the address of the Hours register 0x82 |
sureshsusurla | 0:2e3d21e95c97 | 245 | spi.write(0x00); // Set hours value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 246 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 247 | |
sureshsusurla | 0:2e3d21e95c97 | 248 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 249 | spi.write(0x83); // Send the address of the Day register 0x83 |
sureshsusurla | 0:2e3d21e95c97 | 250 | spi.write(0x01); // Set the day to 01 |
sureshsusurla | 0:2e3d21e95c97 | 251 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 252 | |
sureshsusurla | 0:2e3d21e95c97 | 253 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 254 | spi.write(0x84); // Send the address of the date register 0x84 |
sureshsusurla | 0:2e3d21e95c97 | 255 | spi.write(0x01); // Set date of the month to 01 |
sureshsusurla | 0:2e3d21e95c97 | 256 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 257 | |
sureshsusurla | 0:2e3d21e95c97 | 258 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 259 | spi.write(0x85); // Send the address of the Month register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 260 | spi.write(0x01); // Set month to 01 |
sureshsusurla | 0:2e3d21e95c97 | 261 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 262 | |
sureshsusurla | 0:2e3d21e95c97 | 263 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 264 | spi.write(0x86); // Send the address of the year register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 265 | spi.write(0x00); // Set year to 00(2000) |
sureshsusurla | 0:2e3d21e95c97 | 266 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 267 | }// End of INIT Function |
sureshsusurla | 0:2e3d21e95c97 | 268 | |
sureshsusurla | 0:2e3d21e95c97 | 269 | |
sureshsusurla | 0:2e3d21e95c97 | 270 | /*********************************Function to read the RTC registers*********************************/ |
sureshsusurla | 0:2e3d21e95c97 | 271 | void FUNC_CDMS_Gettime() |
sureshsusurla | 0:2e3d21e95c97 | 272 | { |
sureshsusurla | 0:2e3d21e95c97 | 273 | |
sureshsusurla | 0:2e3d21e95c97 | 274 | spi.format(8,3); // Set the data bit with to be of 8 bits, |
sureshsusurla | 0:2e3d21e95c97 | 275 | // data tx mode is 3 |
sureshsusurla | 0:2e3d21e95c97 | 276 | spi.frequency(1000000); // Set Data rate to be 1 MHz |
sureshsusurla | 0:2e3d21e95c97 | 277 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 278 | |
sureshsusurla | 0:2e3d21e95c97 | 279 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 280 | spi.write(0x00); // Sending address of seconds register |
sureshsusurla | 0:2e3d21e95c97 | 281 | int seconds = spi.write(0x00); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 282 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 283 | |
sureshsusurla | 0:2e3d21e95c97 | 284 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 285 | spi.write(0x01); // Sending address of Minutes register |
sureshsusurla | 0:2e3d21e95c97 | 286 | int minutes =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 287 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 288 | |
sureshsusurla | 0:2e3d21e95c97 | 289 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 290 | spi.write(0x02); // Sending address of hours register |
sureshsusurla | 0:2e3d21e95c97 | 291 | int hours =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 292 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 293 | |
sureshsusurla | 0:2e3d21e95c97 | 294 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 295 | spi.write(0x03); // Sending address of day register |
sureshsusurla | 0:2e3d21e95c97 | 296 | int day =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 297 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 298 | |
sureshsusurla | 0:2e3d21e95c97 | 299 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 300 | spi.write(0x04); // Sending address of date register |
sureshsusurla | 0:2e3d21e95c97 | 301 | int date =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 302 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 303 | |
sureshsusurla | 0:2e3d21e95c97 | 304 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 305 | spi.write(0x05); // Sending address of month register |
sureshsusurla | 0:2e3d21e95c97 | 306 | int month =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 307 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 308 | |
sureshsusurla | 0:2e3d21e95c97 | 309 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 310 | spi.write(0x06); // Sending address of year register |
sureshsusurla | 0:2e3d21e95c97 | 311 | int year =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 312 | cs = 1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 313 | |
sureshsusurla | 0:2e3d21e95c97 | 314 | // RTC sends in BCD format.. SO we convert the values generated by RTC to integers |
sureshsusurla | 0:2e3d21e95c97 | 315 | year = FUNC_CDMS_hex2int(year); |
sureshsusurla | 0:2e3d21e95c97 | 316 | month = FUNC_CDMS_hex2int(month); |
sureshsusurla | 0:2e3d21e95c97 | 317 | date = FUNC_CDMS_hex2int(date); |
sureshsusurla | 0:2e3d21e95c97 | 318 | day = FUNC_CDMS_hex2int(day); |
sureshsusurla | 0:2e3d21e95c97 | 319 | hours = FUNC_CDMS_hex2int(hours); |
sureshsusurla | 0:2e3d21e95c97 | 320 | minutes = FUNC_CDMS_hex2int(minutes); |
sureshsusurla | 0:2e3d21e95c97 | 321 | seconds = FUNC_CDMS_hex2int(seconds); |
sureshsusurla | 0:2e3d21e95c97 | 322 | |
sureshsusurla | 0:2e3d21e95c97 | 323 | // Print the obtained Time stamp |
sureshsusurla | 0:2e3d21e95c97 | 324 | //printf("The time is :%d %d %d %d %d %d %d \n\r",seconds,minutes,hours,day,date,month,year); |
sureshsusurla | 0:2e3d21e95c97 | 325 | sprintf(time_stamp,"%02d%02d%02d%02d%02d%02d",year,month,date,hours,minutes,seconds); |
sureshsusurla | 0:2e3d21e95c97 | 326 | printf(" \n\r Received HK data from BAE"); |
sureshsusurla | 0:2e3d21e95c97 | 327 | printf("\n HK_data stored in %s.txt",time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 328 | //puts(time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 329 | //printf(".txt"); |
sureshsusurla | 0:2e3d21e95c97 | 330 | }//End of Read Function |
sureshsusurla | 0:2e3d21e95c97 | 331 | |
sureshsusurla | 0:2e3d21e95c97 | 332 | /**************************Function to convert Hex values to Int values*****************************/ |
sureshsusurla | 0:2e3d21e95c97 | 333 | int FUNC_CDMS_hex2int(int a) |
sureshsusurla | 0:2e3d21e95c97 | 334 | { |
sureshsusurla | 0:2e3d21e95c97 | 335 | a=(a/16)*10+(a%16); //function to convert hex type to int type |
sureshsusurla | 0:2e3d21e95c97 | 336 | return a; |
sureshsusurla | 0:2e3d21e95c97 | 337 | }// End of convert function |
sureshsusurla | 0:2e3d21e95c97 | 338 | |
sureshsusurla | 0:2e3d21e95c97 | 339 | |
sureshsusurla | 0:2e3d21e95c97 | 340 | /******************************************END OF RTC CODE ****************************************/ |
sureshsusurla | 0:2e3d21e95c97 | 341 | |
greenroshks | 2:fa5a3ff74b74 | 342 | //char count = 10; |
greenroshks | 2:fa5a3ff74b74 | 343 | void store_data(char *hkdata) |
sureshsusurla | 0:2e3d21e95c97 | 344 | { |
sureshsusurla | 0:2e3d21e95c97 | 345 | FUNC_CDMS_Gettime(); |
sureshsusurla | 0:2e3d21e95c97 | 346 | |
greenroshks | 2:fa5a3ff74b74 | 347 | //char hk_data[25]; |
greenroshks | 2:fa5a3ff74b74 | 348 | // count++; |
greenroshks | 2:fa5a3ff74b74 | 349 | //strcpy(hk_data,"hk_Data "); |
greenroshks | 2:fa5a3ff74b74 | 350 | //strcat(hk_data,"!@@#"); |
greenroshks | 2:fa5a3ff74b74 | 351 | // hk_data[10] = count; |
sureshsusurla | 0:2e3d21e95c97 | 352 | //storedata(hk_data); |
sureshsusurla | 0:2e3d21e95c97 | 353 | mkdir("/sd/hk", 0777); |
sureshsusurla | 0:2e3d21e95c97 | 354 | char add[20]; |
sureshsusurla | 0:2e3d21e95c97 | 355 | strcpy(add,"/sd/hk/"); |
sureshsusurla | 0:2e3d21e95c97 | 356 | strcat(add,time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 357 | strcat(add,".txt"); |
sureshsusurla | 0:2e3d21e95c97 | 358 | |
sureshsusurla | 0:2e3d21e95c97 | 359 | FILE *fp = fopen(add, "w"); |
sureshsusurla | 0:2e3d21e95c97 | 360 | if(fp == NULL) { |
sureshsusurla | 0:2e3d21e95c97 | 361 | error("Could not open file for write\n"); |
sureshsusurla | 0:2e3d21e95c97 | 362 | } |
sureshsusurla | 0:2e3d21e95c97 | 363 | else |
sureshsusurla | 0:2e3d21e95c97 | 364 | { |
sureshsusurla | 0:2e3d21e95c97 | 365 | |
greenroshks | 2:fa5a3ff74b74 | 366 | fprintf(fp, "%s ",hkdata); |
sureshsusurla | 0:2e3d21e95c97 | 367 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 368 | printf("\n File stored in SD card\n"); |
sureshsusurla | 0:2e3d21e95c97 | 369 | //printf("\n Reading from the file .... \n Data is %s\n",hk_data); |
sureshsusurla | 0:2e3d21e95c97 | 370 | |
sureshsusurla | 0:2e3d21e95c97 | 371 | } |
sureshsusurla | 0:2e3d21e95c97 | 372 | } |
sureshsusurla | 0:2e3d21e95c97 | 373 | |
sureshsusurla | 0:2e3d21e95c97 | 374 | |
sureshsusurla | 0:2e3d21e95c97 | 375 | |
sureshsusurla | 0:2e3d21e95c97 | 376 | //void create_file() |
sureshsusurla | 0:2e3d21e95c97 | 377 | //{ |
sureshsusurla | 0:2e3d21e95c97 | 378 | |
sureshsusurla | 0:2e3d21e95c97 | 379 | /* |
sureshsusurla | 0:2e3d21e95c97 | 380 | fprintf(fp, "Hello fun SD Card World!\n"); |
sureshsusurla | 0:2e3d21e95c97 | 381 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 382 | |
sureshsusurla | 0:2e3d21e95c97 | 383 | fp = fopen("/sd/mydir/sdtest.txt", "r"); |
sureshsusurla | 0:2e3d21e95c97 | 384 | if(fp == NULL) { |
sureshsusurla | 0:2e3d21e95c97 | 385 | error("Could not open file for write\n"); |
sureshsusurla | 0:2e3d21e95c97 | 386 | } |
sureshsusurla | 0:2e3d21e95c97 | 387 | //fprintf(fp, "Hello fun SD Card World!"); |
sureshsusurla | 0:2e3d21e95c97 | 388 | // fprintf("The contents of %s file are :\n", "/sd/mydir/sdtest.txt"); |
sureshsusurla | 0:2e3d21e95c97 | 389 | while( ( ch = fgetc(fp) ) != '\n' ) |
sureshsusurla | 0:2e3d21e95c97 | 390 | { |
sureshsusurla | 0:2e3d21e95c97 | 391 | pc.printf("%c",ch); |
sureshsusurla | 0:2e3d21e95c97 | 392 | } |
sureshsusurla | 0:2e3d21e95c97 | 393 | //fprintf(fp); |
sureshsusurla | 0:2e3d21e95c97 | 394 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 395 | |
sureshsusurla | 0:2e3d21e95c97 | 396 | printf("Jai Mata Di..Goodbye World!\n");*/ |
sureshsusurla | 0:2e3d21e95c97 | 397 | //} |
sureshsusurla | 0:2e3d21e95c97 | 398 | |
raizel_varun | 1:59da9694681e | 399 | Ticker tx; |
sureshsusurla | 0:2e3d21e95c97 | 400 | |
sureshsusurla | 0:2e3d21e95c97 | 401 | int main() |
greenroshks | 2:fa5a3ff74b74 | 402 | { |
greenroshks | 2:fa5a3ff74b74 | 403 | interrupt=0; |
raizel_varun | 1:59da9694681e | 404 | ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE); |
greenroshks | 2:fa5a3ff74b74 | 405 | master.frequency(100000); |
sureshsusurla | 0:2e3d21e95c97 | 406 | printf("IITMSAT - CDMS\n"); |
greenroshks | 2:fa5a3ff74b74 | 407 | data_ready.rise(&FUNC_INT_BAE); |
greenroshks | 2:fa5a3ff74b74 | 408 | data_ready_pyld.rise(&FUNC_INT_PYLD); |
sureshsusurla | 0:2e3d21e95c97 | 409 | FUNC_CDMS_init_values(); |
greenroshks | 2:fa5a3ff74b74 | 410 | //tx.attach(&store_data, 20); |
raizel_varun | 1:59da9694681e | 411 | while(1) |
raizel_varun | 1:59da9694681e | 412 | { |
raizel_varun | 1:59da9694681e | 413 | FUNC_MASTER_WRITE(); |
raizel_varun | 1:59da9694681e | 414 | } |
sureshsusurla | 0:2e3d21e95c97 | 415 | |
sureshsusurla | 0:2e3d21e95c97 | 416 | } |