![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
i2c+sd+rtc , ported untested code , working probability 90% if i2c works
Dependencies: SDFileSystem mbed-rtos mbed-src mbed
Fork of cdms_SD_rtc by
Diff: main.cpp
- Revision:
- 0:2e3d21e95c97
- Child:
- 1:59da9694681e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Mar 13 20:04:05 2015 +0000 @@ -0,0 +1,207 @@ +#include "mbed.h" +#include "SDFileSystem.h" + +/************************Include the required Header files for the code *******************************/ +#include "mbed.h" +#include "string.h" + +/********************************** Function Prototypes declaration ***********************************/ +int FUNC_CDMS_hex2int(int); // Need to convert the RTC time values to integers +void FUNC_CDMS_Gettime(void); // Function to get the time values from RTC registers +void FUNC_CDMS_init_values(void); // Function to initialize the registers in the RTC + + +/***************** Configure the SPI1 of the CDMS uc as the data bus for the RTC***********************/ +SPI spi(PTE1,PTE3, PTE2); // mosi, miso, sclk +DigitalOut cs(PTE29); // PTE29 is used for chip select + +char ch; +SDFileSystem sd(PTE1, PTE3, PTE2, PTE22, "sd"); // the pinout on the mbed Cool Components workshop board +Serial pc(USBTX, USBRX); // tx, rx +char time_stamp[15]; + +/***********************Initialization function of the RTC********************************************/ +void FUNC_CDMS_init_values(void) +{ + cs=0; + spi.format(8,3); // Set the data bit with to be of 8 bits, + // data tx mode is 3 + spi.frequency(1000000); // Set Data rate to be 1 MHz + + cs = 0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x80); // Send the address of the Seconds register 0x80 + spi.write(0x00); // Set seconds value to 0 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x81); // Send the address of the Minutes register 0x81 + spi.write(0x00); // Set minutes value to 0 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x82); // Send the address of the Hours register 0x82 + spi.write(0x00); // Set hours value to 0 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x83); // Send the address of the Day register 0x83 + spi.write(0x01); // Set the day to 01 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x84); // Send the address of the date register 0x84 + spi.write(0x01); // Set date of the month to 01 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x85); // Send the address of the Month register 0x80 + spi.write(0x01); // Set month to 01 + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x86); // Send the address of the year register 0x80 + spi.write(0x00); // Set year to 00(2000) + cs=1; // Set chip select pin to be 1: DeActivate RTC chip +}// End of INIT Function + + +/*********************************Function to read the RTC registers*********************************/ +void FUNC_CDMS_Gettime() +{ + + spi.format(8,3); // Set the data bit with to be of 8 bits, + // data tx mode is 3 + spi.frequency(1000000); // Set Data rate to be 1 MHz + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x00); // Sending address of seconds register + int seconds = spi.write(0x00); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x01); // Sending address of Minutes register + int minutes =spi.write(0x01); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x02); // Sending address of hours register + int hours =spi.write(0x01); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x03); // Sending address of day register + int day =spi.write(0x01); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x04); // Sending address of date register + int date =spi.write(0x01); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x05); // Sending address of month register + int month =spi.write(0x01); // Read the value by sending dummy byte + cs=1; // Set chip select pin to be 1: DeActivate RTC chip + + cs=0; // Set chip select pin to be 0: Activate RTC chip + spi.write(0x06); // Sending address of year register + int year =spi.write(0x01); // Read the value by sending dummy byte + cs = 1; // Set chip select pin to be 1: DeActivate RTC chip + + // RTC sends in BCD format.. SO we convert the values generated by RTC to integers + year = FUNC_CDMS_hex2int(year); + month = FUNC_CDMS_hex2int(month); + date = FUNC_CDMS_hex2int(date); + day = FUNC_CDMS_hex2int(day); + hours = FUNC_CDMS_hex2int(hours); + minutes = FUNC_CDMS_hex2int(minutes); + seconds = FUNC_CDMS_hex2int(seconds); + + // Print the obtained Time stamp + //printf("The time is :%d %d %d %d %d %d %d \n\r",seconds,minutes,hours,day,date,month,year); + sprintf(time_stamp,"%02d%02d%02d%02d%02d%02d",year,month,date,hours,minutes,seconds); + printf(" \n\r Received HK data from BAE"); + printf("\n HK_data stored in %s.txt",time_stamp); + //puts(time_stamp); + //printf(".txt"); +}//End of Read Function + +/**************************Function to convert Hex values to Int values*****************************/ +int FUNC_CDMS_hex2int(int a) +{ +a=(a/16)*10+(a%16); //function to convert hex type to int type +return a; +}// End of convert function + + +/******************************************END OF RTC CODE ****************************************/ + +char count = 10; +void store_data() +{ + FUNC_CDMS_Gettime(); + + char hk_data[25]; + count++; + strcpy(hk_data,"hk_Data "); + strcat(hk_data,"!@@#"); + hk_data[10] = count; + //storedata(hk_data); + mkdir("/sd/hk", 0777); + char add[20]; + strcpy(add,"/sd/hk/"); + strcat(add,time_stamp); + strcat(add,".txt"); + + FILE *fp = fopen(add, "w"); + if(fp == NULL) { + error("Could not open file for write\n"); + } + else + { + + fprintf(fp, "%s ",hk_data); + fclose(fp); + printf("\n File stored in SD card\n"); + //printf("\n Reading from the file .... \n Data is %s\n",hk_data); + + } +} + + + +//void create_file() +//{ + + /* + fprintf(fp, "Hello fun SD Card World!\n"); + fclose(fp); + + fp = fopen("/sd/mydir/sdtest.txt", "r"); + if(fp == NULL) { + error("Could not open file for write\n"); + } + //fprintf(fp, "Hello fun SD Card World!"); + // fprintf("The contents of %s file are :\n", "/sd/mydir/sdtest.txt"); + while( ( ch = fgetc(fp) ) != '\n' ) + { + pc.printf("%c",ch); + } + //fprintf(fp); + fclose(fp); + + printf("Jai Mata Di..Goodbye World!\n");*/ +//} + +Ticker t; + +int main() +{ + printf("IITMSAT - CDMS\n"); + + FUNC_CDMS_init_values(); + t.attach(&store_data, 20.0); + while(1); + +}