EPS (SPI Slave) , BBMv2,

Dependencies:   mbed mcp3208

Committer:
taiga_prelude
Date:
Sat Jan 02 09:54:43 2021 +0000
Revision:
0:38fe4bc9b7c3
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taiga_prelude 0:38fe4bc9b7c3 1 #include "mbed.h"
taiga_prelude 0:38fe4bc9b7c3 2
taiga_prelude 0:38fe4bc9b7c3 3 #include "mcp3208.h"
taiga_prelude 0:38fe4bc9b7c3 4
taiga_prelude 0:38fe4bc9b7c3 5 SPISlave to_cdh(p5,p6,p7,p8); // mosi, miso, sclk, ssel
taiga_prelude 0:38fe4bc9b7c3 6 Serial pc(USBTX,USBRX);
taiga_prelude 0:38fe4bc9b7c3 7
taiga_prelude 0:38fe4bc9b7c3 8 DigitalOut myleds[4] = {LED1,LED2,LED3,LED4}; // mbed動作目視確認用LED
taiga_prelude 0:38fe4bc9b7c3 9 DigitalOut ADC_on(p21); // ADC用のスイッチをONにするピン
taiga_prelude 0:38fe4bc9b7c3 10 DigitalOut ADC_off(p22); // ADC用のスイッチをOFFにするピン
taiga_prelude 0:38fe4bc9b7c3 11 DigitalOut COM_on(p23);
taiga_prelude 0:38fe4bc9b7c3 12 DigitalOut COM_off(p24);
taiga_prelude 0:38fe4bc9b7c3 13 DigitalOut myled(LED1);
taiga_prelude 0:38fe4bc9b7c3 14
taiga_prelude 0:38fe4bc9b7c3 15 AnalogIn v(p16);
taiga_prelude 0:38fe4bc9b7c3 16 SPI spi(p11,p12,p13);
taiga_prelude 0:38fe4bc9b7c3 17 MCP3208 mcp3208(spi,p14);
taiga_prelude 0:38fe4bc9b7c3 18 DigitalOut dyn(p25);
taiga_prelude 0:38fe4bc9b7c3 19
taiga_prelude 0:38fe4bc9b7c3 20 float v_bat[5], EPS_cur[5], ADC_cur[5], dyn_cur[5];
taiga_prelude 0:38fe4bc9b7c3 21 int data;
taiga_prelude 0:38fe4bc9b7c3 22
taiga_prelude 0:38fe4bc9b7c3 23 int main()
taiga_prelude 0:38fe4bc9b7c3 24 {
taiga_prelude 0:38fe4bc9b7c3 25 pc.printf("--Hi,this is eps(slave).\r\n");
taiga_prelude 0:38fe4bc9b7c3 26
taiga_prelude 0:38fe4bc9b7c3 27 to_cdh.format(8,3);
taiga_prelude 0:38fe4bc9b7c3 28 to_cdh.frequency(1000000);
taiga_prelude 0:38fe4bc9b7c3 29
taiga_prelude 0:38fe4bc9b7c3 30 int sdummy = 0xAA;
taiga_prelude 0:38fe4bc9b7c3 31
taiga_prelude 0:38fe4bc9b7c3 32 while(1) {
taiga_prelude 0:38fe4bc9b7c3 33
taiga_prelude 0:38fe4bc9b7c3 34 if(to_cdh.receive()) {
taiga_prelude 0:38fe4bc9b7c3 35 int rcmd = to_cdh.read(); //receive 1st byte
taiga_prelude 0:38fe4bc9b7c3 36 int rdummy = to_cdh.read(); //receive 2nd byte
taiga_prelude 0:38fe4bc9b7c3 37
taiga_prelude 0:38fe4bc9b7c3 38 to_cdh.reply(sdummy); // prepare to send 1st byte (dummy)
taiga_prelude 0:38fe4bc9b7c3 39 // to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 40
taiga_prelude 0:38fe4bc9b7c3 41 if(rcmd == 0x01){
taiga_prelude 0:38fe4bc9b7c3 42 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 43 }
taiga_prelude 0:38fe4bc9b7c3 44 else if(rcmd == 0x02){
taiga_prelude 0:38fe4bc9b7c3 45 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 46
taiga_prelude 0:38fe4bc9b7c3 47 pc.printf("ADC ON \r\n");
taiga_prelude 0:38fe4bc9b7c3 48 ADC_on = 1;
taiga_prelude 0:38fe4bc9b7c3 49 wait(0.5);
taiga_prelude 0:38fe4bc9b7c3 50 ADC_on = 0;
taiga_prelude 0:38fe4bc9b7c3 51 }
taiga_prelude 0:38fe4bc9b7c3 52 else if (rcmd == 0x05){
taiga_prelude 0:38fe4bc9b7c3 53 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 54 pc.printf("start initial sensing\r\n");
taiga_prelude 0:38fe4bc9b7c3 55 for(int i=0; i<5; i++){
taiga_prelude 0:38fe4bc9b7c3 56 v_bat[i] = v.read()*3.3*8.4/3.3;
taiga_prelude 0:38fe4bc9b7c3 57 EPS_cur[i] = mcp3208.read_input(0)*5; //()内の数字はchナンバー
taiga_prelude 0:38fe4bc9b7c3 58 ADC_cur[i] = mcp3208.read_input(1)*5; //()内の数字はchナンバー
taiga_prelude 0:38fe4bc9b7c3 59 pc.printf("bat_v = %f[v] EPS_cur = %f[A] ADC_cur = %f[A]\r\n ",v_bat[i],EPS_cur[i],ADC_cur[i]);
taiga_prelude 0:38fe4bc9b7c3 60 wait(1.0);
taiga_prelude 0:38fe4bc9b7c3 61 }
taiga_prelude 0:38fe4bc9b7c3 62 pc.printf("finish initial sensing \r\n");
taiga_prelude 0:38fe4bc9b7c3 63
taiga_prelude 0:38fe4bc9b7c3 64 }
taiga_prelude 0:38fe4bc9b7c3 65 else if(rcmd == 0x07){
taiga_prelude 0:38fe4bc9b7c3 66 to_cdh.reply(0xF0);
taiga_prelude 0:38fe4bc9b7c3 67 pc.printf("send initial sensing data\r\n");
taiga_prelude 0:38fe4bc9b7c3 68 }
taiga_prelude 0:38fe4bc9b7c3 69
taiga_prelude 0:38fe4bc9b7c3 70 else if(rcmd == 0x08){
taiga_prelude 0:38fe4bc9b7c3 71 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 72
taiga_prelude 0:38fe4bc9b7c3 73 pc.printf("COM ON\r\n");
taiga_prelude 0:38fe4bc9b7c3 74 COM_on = 1;
taiga_prelude 0:38fe4bc9b7c3 75 wait(0.5);
taiga_prelude 0:38fe4bc9b7c3 76 COM_on = 0;
taiga_prelude 0:38fe4bc9b7c3 77 }
taiga_prelude 0:38fe4bc9b7c3 78
taiga_prelude 0:38fe4bc9b7c3 79 else if(rcmd == 0x11){
taiga_prelude 0:38fe4bc9b7c3 80 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 81
taiga_prelude 0:38fe4bc9b7c3 82 pc.printf("COM OFF\r\n");
taiga_prelude 0:38fe4bc9b7c3 83 COM_off = 1;
taiga_prelude 0:38fe4bc9b7c3 84 wait(0.5);
taiga_prelude 0:38fe4bc9b7c3 85 COM_off = 0;
taiga_prelude 0:38fe4bc9b7c3 86 }
taiga_prelude 0:38fe4bc9b7c3 87
taiga_prelude 0:38fe4bc9b7c3 88 else if(rcmd == 0x14){
taiga_prelude 0:38fe4bc9b7c3 89 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 90
taiga_prelude 0:38fe4bc9b7c3 91 pc.printf("Check battery voltage\r\n");
taiga_prelude 0:38fe4bc9b7c3 92 for(int i=0; i<5; i++){
taiga_prelude 0:38fe4bc9b7c3 93 v_bat[i] = v.read()*3.3*8.4/3.3; //3.3必要?
taiga_prelude 0:38fe4bc9b7c3 94 pc.printf("bat_v = %f[v]\r\n ",v_bat[i]);
taiga_prelude 0:38fe4bc9b7c3 95 wait(1.0);
taiga_prelude 0:38fe4bc9b7c3 96 }
taiga_prelude 0:38fe4bc9b7c3 97 pc.printf("finish \r\n");
taiga_prelude 0:38fe4bc9b7c3 98 }
taiga_prelude 0:38fe4bc9b7c3 99
taiga_prelude 0:38fe4bc9b7c3 100 else if(rcmd == 0x15){
taiga_prelude 0:38fe4bc9b7c3 101 to_cdh.reply(0xF1);
taiga_prelude 0:38fe4bc9b7c3 102 pc.printf("Send battery voltage data\r\n");
taiga_prelude 0:38fe4bc9b7c3 103 }
taiga_prelude 0:38fe4bc9b7c3 104
taiga_prelude 0:38fe4bc9b7c3 105 else if(rcmd == 0x16){
taiga_prelude 0:38fe4bc9b7c3 106 to_cdh.reply(rcmd);
taiga_prelude 0:38fe4bc9b7c3 107
taiga_prelude 0:38fe4bc9b7c3 108 pc.printf("Heatcut ON\r\n");
taiga_prelude 0:38fe4bc9b7c3 109 dyn = 1;
taiga_prelude 0:38fe4bc9b7c3 110 for(int i=0; i<5; i++){
taiga_prelude 0:38fe4bc9b7c3 111 dyn_cur[i]= mcp3208.read_input(3)*5; //()内の数字はchナンバー
taiga_prelude 0:38fe4bc9b7c3 112 pc.printf("dyn_cur = %f[A]\r\n ",dyn_cur[i]);
taiga_prelude 0:38fe4bc9b7c3 113 wait(1.0);
taiga_prelude 0:38fe4bc9b7c3 114 }
taiga_prelude 0:38fe4bc9b7c3 115 dyn = 0;
taiga_prelude 0:38fe4bc9b7c3 116 pc.printf("heat cut OFF\r\n");
taiga_prelude 0:38fe4bc9b7c3 117 }
taiga_prelude 0:38fe4bc9b7c3 118
taiga_prelude 0:38fe4bc9b7c3 119 else if(rcmd == 0x17){
taiga_prelude 0:38fe4bc9b7c3 120 to_cdh.reply(0xF2);
taiga_prelude 0:38fe4bc9b7c3 121 pc.printf("Send cell current data\r\n");
taiga_prelude 0:38fe4bc9b7c3 122 }
taiga_prelude 0:38fe4bc9b7c3 123 else{
taiga_prelude 0:38fe4bc9b7c3 124 to_cdh.reply(0xFF);
taiga_prelude 0:38fe4bc9b7c3 125 }
taiga_prelude 0:38fe4bc9b7c3 126
taiga_prelude 0:38fe4bc9b7c3 127 pc.printf("rcmd: %02x, dummy: %02x\r\n",rcmd, rdummy);
taiga_prelude 0:38fe4bc9b7c3 128
taiga_prelude 0:38fe4bc9b7c3 129
taiga_prelude 0:38fe4bc9b7c3 130 }
taiga_prelude 0:38fe4bc9b7c3 131 }
taiga_prelude 0:38fe4bc9b7c3 132 }