test

Dependencies:   z00_NSYS_CAR mbed SDFileSystem

Committer:
NAOKI19990810
Date:
Wed Dec 23 08:49:47 2020 +0000
Revision:
1:32dfdcc9490f
huji

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NAOKI19990810 1:32dfdcc9490f 1 /*=========================================
NAOKI19990810 1:32dfdcc9490f 2 Title:4axis
NAOKI19990810 1:32dfdcc9490f 3
NAOKI19990810 1:32dfdcc9490f 4 Revision:1.0.0
NAOKI19990810 1:32dfdcc9490f 5
NAOKI19990810 1:32dfdcc9490f 6 Editor:Dyson
NAOKI19990810 1:32dfdcc9490f 7
NAOKI19990810 1:32dfdcc9490f 8 For GR-PEACH
NAOKI19990810 1:32dfdcc9490f 9 Compile using Mbed Online Compiler (revision:130)
NAOKI19990810 1:32dfdcc9490f 10
NAOKI19990810 1:32dfdcc9490f 11 reminder:
NAOKI19990810 1:32dfdcc9490f 12 Last Modified:2018/09/20
NAOKI19990810 1:32dfdcc9490f 13 ==========================================*/
NAOKI19990810 1:32dfdcc9490f 14
NAOKI19990810 1:32dfdcc9490f 15 //=====CONSTANT VARIBLES========
NAOKI19990810 1:32dfdcc9490f 16 #define INDICATOR 1//Front:0 Rear:1
NAOKI19990810 1:32dfdcc9490f 17 #define BUFF_DEPTH 128
NAOKI19990810 1:32dfdcc9490f 18 #define BUFF_COUNT 3
NAOKI19990810 1:32dfdcc9490f 19
NAOKI19990810 1:32dfdcc9490f 20 //======GLOBAL VARIBLES=========
NAOKI19990810 1:32dfdcc9490f 21 char adcsel = 0;
NAOKI19990810 1:32dfdcc9490f 22
NAOKI19990810 1:32dfdcc9490f 23 int sum = 7;
NAOKI19990810 1:32dfdcc9490f 24
NAOKI19990810 1:32dfdcc9490f 25 int kill = 0;
NAOKI19990810 1:32dfdcc9490f 26 int KILL_COUNT;
NAOKI19990810 1:32dfdcc9490f 27 float t_pulse = 0;
NAOKI19990810 1:32dfdcc9490f 28
NAOKI19990810 1:32dfdcc9490f 29 int buff_depth = 0;
NAOKI19990810 1:32dfdcc9490f 30 int buff_index = 0;
NAOKI19990810 1:32dfdcc9490f 31 int cur_buff=0;
NAOKI19990810 1:32dfdcc9490f 32
NAOKI19990810 1:32dfdcc9490f 33 int flg =0;
NAOKI19990810 1:32dfdcc9490f 34 typedef struct Logdata_t{
NAOKI19990810 1:32dfdcc9490f 35 int acc[4];
NAOKI19990810 1:32dfdcc9490f 36 float t_acc;
NAOKI19990810 1:32dfdcc9490f 37 float m_t_pulse;
NAOKI19990810 1:32dfdcc9490f 38 }Logdata;
NAOKI19990810 1:32dfdcc9490f 39 Logdata data[BUFF_COUNT][BUFF_DEPTH];
NAOKI19990810 1:32dfdcc9490f 40
NAOKI19990810 1:32dfdcc9490f 41 bool write_ok[BUFF_COUNT];
NAOKI19990810 1:32dfdcc9490f 42
NAOKI19990810 1:32dfdcc9490f 43 int rch[3];
NAOKI19990810 1:32dfdcc9490f 44
NAOKI19990810 1:32dfdcc9490f 45 //=========SYSTEM==============
NAOKI19990810 1:32dfdcc9490f 46 #include "mbed.h"
NAOKI19990810 1:32dfdcc9490f 47 #define _Enable 0
NAOKI19990810 1:32dfdcc9490f 48 #define _Disable 1
NAOKI19990810 1:32dfdcc9490f 49 Serial gps(P8_13,P8_11);
NAOKI19990810 1:32dfdcc9490f 50 Serial pc(USBTX,USBRX);
NAOKI19990810 1:32dfdcc9490f 51 InterruptIn PPS(P2_15);
NAOKI19990810 1:32dfdcc9490f 52 Timer utime;
NAOKI19990810 1:32dfdcc9490f 53 Ticker adc_ticker;
NAOKI19990810 1:32dfdcc9490f 54 //Ticker gps_ticker;
NAOKI19990810 1:32dfdcc9490f 55 SPI adc(P10_14, P10_15, P10_12);
NAOKI19990810 1:32dfdcc9490f 56 DigitalOut cs_adc(P8_15);
NAOKI19990810 1:32dfdcc9490f 57 DigitalOut myled_r(LED1);
NAOKI19990810 1:32dfdcc9490f 58 DigitalOut myled_g(LED2);
NAOKI19990810 1:32dfdcc9490f 59 DigitalOut myled_b(LED3);
NAOKI19990810 1:32dfdcc9490f 60
NAOKI19990810 1:32dfdcc9490f 61
NAOKI19990810 1:32dfdcc9490f 62 void adc_init(void){
NAOKI19990810 1:32dfdcc9490f 63 pc.printf(".");
NAOKI19990810 1:32dfdcc9490f 64 cs_adc = _Enable;// ADC chip select on
NAOKI19990810 1:32dfdcc9490f 65 wait_ms(112);//55ms:NG 56ms:OK
NAOKI19990810 1:32dfdcc9490f 66 adc.write(0x06);//reset
NAOKI19990810 1:32dfdcc9490f 67 wait_us(32);//15us:NG 16us:OK
NAOKI19990810 1:32dfdcc9490f 68 adc.write(0x43);// write register 00h-03h
NAOKI19990810 1:32dfdcc9490f 69 adc.write(0x81);// AIN0-GND GAIN:1 PGA:off
NAOKI19990810 1:32dfdcc9490f 70 adc.write(0xd0);// 2000sps turbomode single temp:off burn:off
NAOKI19990810 1:32dfdcc9490f 71 adc.write(0xc0);// ref:AVDD
NAOKI19990810 1:32dfdcc9490f 72 adc.write(0x00);// DOUT/DRDY
NAOKI19990810 1:32dfdcc9490f 73 adc.write(0x08);// START
NAOKI19990810 1:32dfdcc9490f 74 cs_adc = _Disable;// ADC chip select off
NAOKI19990810 1:32dfdcc9490f 75 wait(0.7);
NAOKI19990810 1:32dfdcc9490f 76 pc.printf(".\r\n");
NAOKI19990810 1:32dfdcc9490f 77 }
NAOKI19990810 1:32dfdcc9490f 78
NAOKI19990810 1:32dfdcc9490f 79 void ind(){
NAOKI19990810 1:32dfdcc9490f 80 switch(INDICATOR){
NAOKI19990810 1:32dfdcc9490f 81 case 0:
NAOKI19990810 1:32dfdcc9490f 82 pc.printf("A-FRONT\r\n");
NAOKI19990810 1:32dfdcc9490f 83 KILL_COUNT = 5752;//6252
NAOKI19990810 1:32dfdcc9490f 84 break;
NAOKI19990810 1:32dfdcc9490f 85
NAOKI19990810 1:32dfdcc9490f 86 case 1:
NAOKI19990810 1:32dfdcc9490f 87 pc.printf("B-REAR\r\n");
NAOKI19990810 1:32dfdcc9490f 88 KILL_COUNT = 5752;
NAOKI19990810 1:32dfdcc9490f 89 break;
NAOKI19990810 1:32dfdcc9490f 90 }
NAOKI19990810 1:32dfdcc9490f 91 wait(1);
NAOKI19990810 1:32dfdcc9490f 92 }
NAOKI19990810 1:32dfdcc9490f 93
NAOKI19990810 1:32dfdcc9490f 94 void rstRx(){
NAOKI19990810 1:32dfdcc9490f 95 char ch;
NAOKI19990810 1:32dfdcc9490f 96 ch = pc.getc();//1文字受信バッファより取り出し
NAOKI19990810 1:32dfdcc9490f 97 if(ch == 114){
NAOKI19990810 1:32dfdcc9490f 98 NVIC_SystemReset();
NAOKI19990810 1:32dfdcc9490f 99 }
NAOKI19990810 1:32dfdcc9490f 100 }
NAOKI19990810 1:32dfdcc9490f 101
NAOKI19990810 1:32dfdcc9490f 102 void adcwork(){
NAOKI19990810 1:32dfdcc9490f 103 cs_adc = _Enable;
NAOKI19990810 1:32dfdcc9490f 104 adc.write(0x10);
NAOKI19990810 1:32dfdcc9490f 105 for(int j=0;j<3;j++){
NAOKI19990810 1:32dfdcc9490f 106 rch[j] = adc.write(0xff);
NAOKI19990810 1:32dfdcc9490f 107 };
NAOKI19990810 1:32dfdcc9490f 108 data[buff_index][buff_depth].acc[adcsel] = (int)((rch[0]<<16)|(rch[1]<<8)|rch[2]);
NAOKI19990810 1:32dfdcc9490f 109 data[buff_index][buff_depth].t_acc = utime.read();
NAOKI19990810 1:32dfdcc9490f 110 data[buff_index][buff_depth].m_t_pulse = t_pulse;
NAOKI19990810 1:32dfdcc9490f 111 buff_depth++;
NAOKI19990810 1:32dfdcc9490f 112
NAOKI19990810 1:32dfdcc9490f 113 adc.write(0x40);// write register 00h
NAOKI19990810 1:32dfdcc9490f 114 switch(adcsel){
NAOKI19990810 1:32dfdcc9490f 115 case 0:
NAOKI19990810 1:32dfdcc9490f 116 adc.write(0x91);// AIN1-GND GAIN:1 PGA:off
NAOKI19990810 1:32dfdcc9490f 117 adcsel=1;
NAOKI19990810 1:32dfdcc9490f 118 break;
NAOKI19990810 1:32dfdcc9490f 119
NAOKI19990810 1:32dfdcc9490f 120 case 1:
NAOKI19990810 1:32dfdcc9490f 121 adc.write(0xa1);// AIN2-GND GAIN:1 PGA:off
NAOKI19990810 1:32dfdcc9490f 122 adcsel=2;
NAOKI19990810 1:32dfdcc9490f 123 break;
NAOKI19990810 1:32dfdcc9490f 124
NAOKI19990810 1:32dfdcc9490f 125 case 2:
NAOKI19990810 1:32dfdcc9490f 126 adc.write(0xb1);// AIN3-GND GAIN:1 PGA:off
NAOKI19990810 1:32dfdcc9490f 127 adcsel=3;
NAOKI19990810 1:32dfdcc9490f 128 break;
NAOKI19990810 1:32dfdcc9490f 129
NAOKI19990810 1:32dfdcc9490f 130 case 3:
NAOKI19990810 1:32dfdcc9490f 131 adc.write(0x81);// AIN0-GND GAIN:1 PGA:off
NAOKI19990810 1:32dfdcc9490f 132 adcsel=0;
NAOKI19990810 1:32dfdcc9490f 133 break;
NAOKI19990810 1:32dfdcc9490f 134 }
NAOKI19990810 1:32dfdcc9490f 135
NAOKI19990810 1:32dfdcc9490f 136 if(buff_depth == BUFF_DEPTH){
NAOKI19990810 1:32dfdcc9490f 137 write_ok[buff_index]=true;
NAOKI19990810 1:32dfdcc9490f 138 buff_index++;
NAOKI19990810 1:32dfdcc9490f 139 buff_depth=0;
NAOKI19990810 1:32dfdcc9490f 140 if(buff_index==BUFF_COUNT){
NAOKI19990810 1:32dfdcc9490f 141 buff_index=0;
NAOKI19990810 1:32dfdcc9490f 142 }
NAOKI19990810 1:32dfdcc9490f 143 }
NAOKI19990810 1:32dfdcc9490f 144
NAOKI19990810 1:32dfdcc9490f 145 adc.write(0x08); //start
NAOKI19990810 1:32dfdcc9490f 146 cs_adc = _Disable; // ADC chip select off
NAOKI19990810 1:32dfdcc9490f 147
NAOKI19990810 1:32dfdcc9490f 148 }
NAOKI19990810 1:32dfdcc9490f 149
NAOKI19990810 1:32dfdcc9490f 150 void gps_get(){
NAOKI19990810 1:32dfdcc9490f 151 double gps_time;
NAOKI19990810 1:32dfdcc9490f 152 float lat,lng;
NAOKI19990810 1:32dfdcc9490f 153 int stat,lock,gpsc;
NAOKI19990810 1:32dfdcc9490f 154 // int flg =0;
NAOKI19990810 1:32dfdcc9490f 155 char ns,ew;
NAOKI19990810 1:32dfdcc9490f 156 gpsc =0;
NAOKI19990810 1:32dfdcc9490f 157 while(1){
NAOKI19990810 1:32dfdcc9490f 158 gpsc++;
NAOKI19990810 1:32dfdcc9490f 159 int gps_num=0;
NAOKI19990810 1:32dfdcc9490f 160 char gps_data[256];
NAOKI19990810 1:32dfdcc9490f 161 memset(gps_data, '\0' ,256);;
NAOKI19990810 1:32dfdcc9490f 162
NAOKI19990810 1:32dfdcc9490f 163 while(gps.getc()!='$'){}
NAOKI19990810 1:32dfdcc9490f 164 while( (gps_data[gps_num] =gps.getc() ) !='\r'){
NAOKI19990810 1:32dfdcc9490f 165 gps_num++;
NAOKI19990810 1:32dfdcc9490f 166 if(gps_num==155){//max 255
NAOKI19990810 1:32dfdcc9490f 167 pc.printf("\r\n**ERROR!***\r\n");
NAOKI19990810 1:32dfdcc9490f 168 break;
NAOKI19990810 1:32dfdcc9490f 169 }
NAOKI19990810 1:32dfdcc9490f 170 }
NAOKI19990810 1:32dfdcc9490f 171 // if(gps_num==255){
NAOKI19990810 1:32dfdcc9490f 172 // break;
NAOKI19990810 1:32dfdcc9490f 173 // }
NAOKI19990810 1:32dfdcc9490f 174
NAOKI19990810 1:32dfdcc9490f 175 gps_data[gps_num]='\0';
NAOKI19990810 1:32dfdcc9490f 176
NAOKI19990810 1:32dfdcc9490f 177 if(sscanf(gps_data,"GPGGA,%lf,%f,%c,%f,%c,%d,%d",&gps_time,&lat,&ns,&lng,&ew,&stat,&lock) >= sum ){
NAOKI19990810 1:32dfdcc9490f 178 sum = 1;
NAOKI19990810 1:32dfdcc9490f 179 pc.printf("\r\ngpstime,%lf,lat,%f,lng,%f\r\n",gps_time,lat,lng);
NAOKI19990810 1:32dfdcc9490f 180 break;
NAOKI19990810 1:32dfdcc9490f 181 }else{
NAOKI19990810 1:32dfdcc9490f 182 if( gpsc>10){
NAOKI19990810 1:32dfdcc9490f 183 pc.printf("NOT FOUND\r\n");
NAOKI19990810 1:32dfdcc9490f 184 flg = 1;
NAOKI19990810 1:32dfdcc9490f 185 break;
NAOKI19990810 1:32dfdcc9490f 186 }
NAOKI19990810 1:32dfdcc9490f 187 }
NAOKI19990810 1:32dfdcc9490f 188 }
NAOKI19990810 1:32dfdcc9490f 189 }
NAOKI19990810 1:32dfdcc9490f 190
NAOKI19990810 1:32dfdcc9490f 191 void pps_rise(){
NAOKI19990810 1:32dfdcc9490f 192 __disable_irq();
NAOKI19990810 1:32dfdcc9490f 193 t_pulse = utime.read();
NAOKI19990810 1:32dfdcc9490f 194 __enable_irq();
NAOKI19990810 1:32dfdcc9490f 195 }
NAOKI19990810 1:32dfdcc9490f 196
NAOKI19990810 1:32dfdcc9490f 197 int main(void){
NAOKI19990810 1:32dfdcc9490f 198 pc.baud(460800);
NAOKI19990810 1:32dfdcc9490f 199 pc.attach(rstRx, Serial::RxIrq);
NAOKI19990810 1:32dfdcc9490f 200 wait(0.1);
NAOKI19990810 1:32dfdcc9490f 201 pc.printf("\r\nINITIALIZING");
NAOKI19990810 1:32dfdcc9490f 202 cs_adc = _Disable;
NAOKI19990810 1:32dfdcc9490f 203 adc.format(8,1);
NAOKI19990810 1:32dfdcc9490f 204 adc.frequency(750000);
NAOKI19990810 1:32dfdcc9490f 205 pc.printf(".");
NAOKI19990810 1:32dfdcc9490f 206 wait(0.7);
NAOKI19990810 1:32dfdcc9490f 207 memset(data, '\0' ,sizeof(data));
NAOKI19990810 1:32dfdcc9490f 208 memset(write_ok, '\0' ,sizeof(write_ok));
NAOKI19990810 1:32dfdcc9490f 209 adc_init();
NAOKI19990810 1:32dfdcc9490f 210
NAOKI19990810 1:32dfdcc9490f 211 ind();
NAOKI19990810 1:32dfdcc9490f 212 wait(0.7);
NAOKI19990810 1:32dfdcc9490f 213 gps_get();
NAOKI19990810 1:32dfdcc9490f 214 wait(0.3);
NAOKI19990810 1:32dfdcc9490f 215 pc.printf("STARTING");
NAOKI19990810 1:32dfdcc9490f 216 wait(0.3);
NAOKI19990810 1:32dfdcc9490f 217 pc.printf(".");
NAOKI19990810 1:32dfdcc9490f 218 wait(0.3);
NAOKI19990810 1:32dfdcc9490f 219 pc.printf(".");
NAOKI19990810 1:32dfdcc9490f 220 wait(0.3);
NAOKI19990810 1:32dfdcc9490f 221 pc.printf(".\r\n");
NAOKI19990810 1:32dfdcc9490f 222
NAOKI19990810 1:32dfdcc9490f 223 utime.start();
NAOKI19990810 1:32dfdcc9490f 224 utime.reset();
NAOKI19990810 1:32dfdcc9490f 225
NAOKI19990810 1:32dfdcc9490f 226 PPS.rise(pps_rise);
NAOKI19990810 1:32dfdcc9490f 227 adc_ticker.attach_us(&adcwork,833);
NAOKI19990810 1:32dfdcc9490f 228
NAOKI19990810 1:32dfdcc9490f 229 int x_buff;
NAOKI19990810 1:32dfdcc9490f 230 int y_buff;
NAOKI19990810 1:32dfdcc9490f 231 int z_buff;
NAOKI19990810 1:32dfdcc9490f 232 int a_buff;
NAOKI19990810 1:32dfdcc9490f 233
NAOKI19990810 1:32dfdcc9490f 234 while(1){
NAOKI19990810 1:32dfdcc9490f 235 if(write_ok[cur_buff]){
NAOKI19990810 1:32dfdcc9490f 236 for(int i=0;i<BUFF_DEPTH;i++){
NAOKI19990810 1:32dfdcc9490f 237 for(int j = 0 ; j < 4 ; j++){
NAOKI19990810 1:32dfdcc9490f 238 if(data[cur_buff][i].acc[j] != 0){
NAOKI19990810 1:32dfdcc9490f 239 x_buff = data[cur_buff][i].acc[j];
NAOKI19990810 1:32dfdcc9490f 240 pc.printf("x,%d,%f,%f\r\n",x_buff,data[cur_buff][i].t_acc,data[cur_buff][i].m_t_pulse);
NAOKI19990810 1:32dfdcc9490f 241 }
NAOKI19990810 1:32dfdcc9490f 242
NAOKI19990810 1:32dfdcc9490f 243 else if(data[cur_buff][i].acc[j] != 0){
NAOKI19990810 1:32dfdcc9490f 244 y_buff = data[cur_buff][i].acc[j];
NAOKI19990810 1:32dfdcc9490f 245 pc.printf("y,%d,%f,%f\r\n",y_buff,data[cur_buff][i].t_acc,data[cur_buff][i].m_t_pulse);
NAOKI19990810 1:32dfdcc9490f 246 }
NAOKI19990810 1:32dfdcc9490f 247
NAOKI19990810 1:32dfdcc9490f 248 else if(data[cur_buff][i].acc[j] != 0){
NAOKI19990810 1:32dfdcc9490f 249 z_buff = data[cur_buff][i].acc[j];
NAOKI19990810 1:32dfdcc9490f 250 pc.printf("z,%d,%f,%f\r\n",z_buff,data[cur_buff][i].t_acc,data[cur_buff][i].m_t_pulse);
NAOKI19990810 1:32dfdcc9490f 251 }
NAOKI19990810 1:32dfdcc9490f 252
NAOKI19990810 1:32dfdcc9490f 253 else{
NAOKI19990810 1:32dfdcc9490f 254 a_buff = data[cur_buff][i].acc[j];
NAOKI19990810 1:32dfdcc9490f 255 pc.printf("a,%d,%f,%f\r\n",a_buff,data[cur_buff][i].t_acc,data[cur_buff][i].m_t_pulse);
NAOKI19990810 1:32dfdcc9490f 256 }
NAOKI19990810 1:32dfdcc9490f 257 }
NAOKI19990810 1:32dfdcc9490f 258 }
NAOKI19990810 1:32dfdcc9490f 259
NAOKI19990810 1:32dfdcc9490f 260 write_ok[cur_buff]=false;
NAOKI19990810 1:32dfdcc9490f 261 cur_buff++;
NAOKI19990810 1:32dfdcc9490f 262 kill++;
NAOKI19990810 1:32dfdcc9490f 263 if(cur_buff==BUFF_COUNT){
NAOKI19990810 1:32dfdcc9490f 264 cur_buff=0;
NAOKI19990810 1:32dfdcc9490f 265 }
NAOKI19990810 1:32dfdcc9490f 266 if(kill == KILL_COUNT){
NAOKI19990810 1:32dfdcc9490f 267 adc_ticker.detach();
NAOKI19990810 1:32dfdcc9490f 268 }
NAOKI19990810 1:32dfdcc9490f 269 if(kill == KILL_COUNT+1){
NAOKI19990810 1:32dfdcc9490f 270 wait(40);
NAOKI19990810 1:32dfdcc9490f 271 gps_get();
NAOKI19990810 1:32dfdcc9490f 272 float stamp=utime.read();
NAOKI19990810 1:32dfdcc9490f 273 pc.printf("%f\r\n",stamp);
NAOKI19990810 1:32dfdcc9490f 274 }
NAOKI19990810 1:32dfdcc9490f 275 }
NAOKI19990810 1:32dfdcc9490f 276 }
NAOKI19990810 1:32dfdcc9490f 277 }