sato takumi / Mbed 2 deprecated Prelude_EPS_HK

Dependencies:   mbed mcp3208

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //reference
00002 //https://docs.google.com/document/d/197dgqlNFhn72JrBeSYGtR4Y7DJQRUKC61oHVD9dvLNY/edit
00003 #include "mbed.h"
00004 SPI ADC(p11,p12,p13);
00005 DigitalOut cs[2] = {p14, p26};
00006 Serial pc(USBTX, USBRX, 9600);
00007 #define START_BIT   0x04
00008 #define MODE_SINGLE 0x02    // Single-ended mode
00009 #define MODE_DIFF   0x00    // Differential mode
00010 uint16_t MCP3208_get(int channel, int adc_num);
00011 uint16_t HK_data[40];
00012 int rcmd = 0,cmdflag = 0, hk_num = 0; 
00013 uint16_t d;
00014 void commandget();
00015 void initialize();
00016 // for temp
00017 float R3 = 110;
00018 float R4 = 1000;
00019 float R5 = 68000;
00020 float Pt = 100;
00021 float R_1 = 3;
00022 float R_2 = 2;
00023 float I = 0.001;
00024 float Vreft = 2.5;
00025 float ce = 0.003851;
00026 float Rth, temp, volt;
00027 float Rse=0.02;
00028 float Gain=50;
00029 
00030 float gal;
00031 
00032 int main(void)
00033 {
00034     int bit = 8;
00035     float Vref = 5;
00036     ADC.format(bit,0);
00037     ADC.frequency(2000000); //VDD=5Vの場合は2MHz.
00038     pc.printf("\r\n");
00039     pc.printf("Hello, eps. This is MCP3208 test code.\r\n");
00040     pc.printf("if you wanna start, press *a*. \r\n");
00041     // for temp calucuration
00042     float gain = -R5*I/R4;
00043     float off = Vreft+I*R3;
00044     
00045     
00046     while(1){
00047         commandget();
00048         if(cmdflag == 1){
00049             if(rcmd == 'a'){
00050                 for(int adc_num = 0; adc_num < 2; adc_num++){
00051                     for(int i = 0; i < 3; i++){
00052                         HK_data[hk_num] = MCP3208_get(i, adc_num);
00053                         pc.printf("ADC_num: %d, return = %d\n\r",adc_num, HK_data[hk_num]);
00054                         hk_num++;
00055                     }
00056                 }
00057                 //3.3V
00058                 pc.printf("CH[0]: Volt = %.5f[V]\n\r", Vref * (float)HK_data[0] / 4096);
00059                 //Temperature
00060                 volt = Vref*(float)HK_data[1] / 4096*(R_1 + R_2)/R_1;
00061                 Rth = (volt-off)/gain+R3;
00062                 temp = (Rth-Pt)/(ce*Pt);
00063                 pc.printf("CH[1]: Temp = %.5f[degree]\n\r", temp);
00064                 //Galvanometer
00065                 gal = Vref * (float)HK_data[2] / 4096/Gain/Rse;
00066                 pc.printf("CH[2]: Galvanometer = %.5f[A]\n\r", gal);
00067             }
00068         }
00069         for(int j=0; j<hk_num; j++){
00070             pc.printf("HK[%d]: %d\n\r", j, HK_data[j]);
00071         } 
00072         initialize();
00073     }
00074     
00075     /*
00076     
00077     for(int i = 0; i < 10; i++){
00078         uint16_t d = MCP3208_get(1);
00079         HK_data[i] = d;
00080         pc.printf("return=%d volt=%.5f\n\r", d, Vref * (float)d / 4096);
00081         wait(1.0);
00082     }
00083     pc.printf("Sencing Finish\n\r");
00084     pc.printf("Print HK_data\n\r");
00085     
00086     for(int i = 0; i < 10; i++){
00087         pc.printf("HK_data[%d] = %d\n\r", i, HK_data[i]);
00088     }
00089     */
00090 }
00091 
00092 
00093 uint16_t MCP3208_get(int channel, int adc_num){
00094     cs[adc_num] = 0;
00095     pc.printf("Channel: %d, ", channel);
00096     int command_high = START_BIT | MODE_SINGLE | ((channel & 0x04) >> 2);
00097     int command_low = (channel & 0x03) << 6;
00098     ADC.write(command_high);
00099     int high_byte = ADC.write(command_low) & 0x0F;
00100     int low_byte = ADC.write(0x00);
00101     int conv_result = (high_byte << 8) | low_byte;
00102     cs[adc_num] = 1;
00103     return conv_result;
00104 }
00105 
00106 
00107 void commandget()
00108 {
00109     rcmd = pc.getc();
00110     cmdflag = 1;
00111     pc.printf("get command: %d,%d\r\n",rcmd,cmdflag);
00112 }
00113 void initialize()
00114 {
00115     rcmd = 0;
00116     cmdflag = 0;
00117     hk_num = 0;
00118 }