Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Tue Nov 1 2022 05:06:55 by
1.7.2