IGGE Power board

Dependencies:   mbed ADS1015 USBDevice MCP4725

Committer:
jamesdem1123
Date:
Mon Apr 07 06:42:13 2014 +0000
Revision:
5:6b90ed7f3eb1
Parent:
4:d29a7b77b1c6
Child:
6:7691e36d2337
ads conversion factor= * .003 ,   others *3.3  /65536

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jamesdem1123 1:dd6f8dc1e54e 1
jamesdem1123 0:54d5ccfcb14c 2 #include "mbed.h"
jamesdem1123 1:dd6f8dc1e54e 3 #include "Adafruit_ADS1015.h"
jamesdem1123 4:d29a7b77b1c6 4 //#include "USBSerial.h"
jamesdem1123 1:dd6f8dc1e54e 5
jamesdem1123 4:d29a7b77b1c6 6 #include <iostream>
jamesdem1123 4:d29a7b77b1c6 7 #include <map>
jamesdem1123 4:d29a7b77b1c6 8 #include <string>
jamesdem1123 4:d29a7b77b1c6 9 #include <stdio.h>
jamesdem1123 4:d29a7b77b1c6 10
jamesdem1123 4:d29a7b77b1c6 11 //#define SERIAL_BAUD_RATE 9600
jamesdem1123 1:dd6f8dc1e54e 12
jamesdem1123 1:dd6f8dc1e54e 13 //library function setup
jamesdem1123 1:dd6f8dc1e54e 14 I2C i2c(p28, p27);
jamesdem1123 1:dd6f8dc1e54e 15 Adafruit_ADS1015 ads(&i2c);
jamesdem1123 4:d29a7b77b1c6 16 //USBSerial pc; // USB CDC serial port
jamesdem1123 2:321c8783ea30 17 Ticker graph;
jamesdem1123 1:dd6f8dc1e54e 18
jamesdem1123 4:d29a7b77b1c6 19
jamesdem1123 4:d29a7b77b1c6 20 //can stuff
jamesdem1123 4:d29a7b77b1c6 21 Ticker ticker;
jamesdem1123 4:d29a7b77b1c6 22 CAN can1(p9, p10);
jamesdem1123 4:d29a7b77b1c6 23 CAN can2(p30, p29);
jamesdem1123 4:d29a7b77b1c6 24 char counter[8] = {1,1,1,1,1,1,1,1};
jamesdem1123 4:d29a7b77b1c6 25 int test=0x0;
jamesdem1123 4:d29a7b77b1c6 26 char counter2=0;
jamesdem1123 4:d29a7b77b1c6 27
jamesdem1123 4:d29a7b77b1c6 28
jamesdem1123 4:d29a7b77b1c6 29
jamesdem1123 1:dd6f8dc1e54e 30 //leds
jamesdem1123 1:dd6f8dc1e54e 31 DigitalOut led0(LED1);
jamesdem1123 1:dd6f8dc1e54e 32 DigitalOut led1(LED2);
jamesdem1123 1:dd6f8dc1e54e 33 DigitalOut led2(LED3);
jamesdem1123 1:dd6f8dc1e54e 34 DigitalOut led3(LED4);
jamesdem1123 0:54d5ccfcb14c 35
jamesdem1123 1:dd6f8dc1e54e 36 //current readings
jamesdem1123 4:d29a7b77b1c6 37 AnalogIn iBat(p15); //75a PROTO
jamesdem1123 1:dd6f8dc1e54e 38 AnalogIn iTwelve(p17); //31a
jamesdem1123 4:d29a7b77b1c6 39 AnalogIn iFive(p18);//31a PROTO
jamesdem1123 1:dd6f8dc1e54e 40 AnalogIn iMot(p16);//75a
jamesdem1123 1:dd6f8dc1e54e 41 AnalogIn iCpu(p20);//31a
jamesdem1123 1:dd6f8dc1e54e 42 AnalogIn iPeri(p19);//31a
jamesdem1123 1:dd6f8dc1e54e 43
jamesdem1123 1:dd6f8dc1e54e 44 //voltage scalers
jamesdem1123 1:dd6f8dc1e54e 45 #define batScal 12.2
jamesdem1123 1:dd6f8dc1e54e 46 #define motScal 12.2
jamesdem1123 1:dd6f8dc1e54e 47 #define twelveScal 12.2
jamesdem1123 1:dd6f8dc1e54e 48 #define fiveScal 12.2
jamesdem1123 1:dd6f8dc1e54e 49
jamesdem1123 1:dd6f8dc1e54e 50 //Relays
jamesdem1123 5:6b90ed7f3eb1 51 DigitalOut relSens(p21); // PROTO
jamesdem1123 1:dd6f8dc1e54e 52 DigitalOut relUsr(p22);
jamesdem1123 1:dd6f8dc1e54e 53 DigitalOut relNet(p23);
jamesdem1123 3:a01ea06ca9ab 54 DigitalOut relCpuRst(p24);
jamesdem1123 1:dd6f8dc1e54e 55 DigitalOut relCpuPower(p25);
jamesdem1123 1:dd6f8dc1e54e 56
jamesdem1123 0:54d5ccfcb14c 57
jamesdem1123 1:dd6f8dc1e54e 58 //30 minute graph arrays
jamesdem1123 4:d29a7b77b1c6 59 uint16_t powerArr [10]; //{iBat,vBat,iTwelve, vTwelve, iFive, vFive, iMot, vMot, iCpu, iPeri}
jamesdem1123 5:6b90ed7f3eb1 60 uint16_t ibat,vbat,itwelve, vtwelve, ifive, vfive, imot, vmot, icpu, iperi= 0;
jamesdem1123 4:d29a7b77b1c6 61
jamesdem1123 1:dd6f8dc1e54e 62
jamesdem1123 1:dd6f8dc1e54e 63
jamesdem1123 1:dd6f8dc1e54e 64 //volt
jamesdem1123 1:dd6f8dc1e54e 65 uint16_t vBat, vTwelve,vFive,vMot ;
jamesdem1123 1:dd6f8dc1e54e 66
jamesdem1123 2:321c8783ea30 67
jamesdem1123 4:d29a7b77b1c6 68
jamesdem1123 4:d29a7b77b1c6 69 void sending_values(long int int1,long int int2,long int int3,long int int4, int ID )
jamesdem1123 4:d29a7b77b1c6 70 {
jamesdem1123 4:d29a7b77b1c6 71 //val();
jamesdem1123 5:6b90ed7f3eb1 72 led1=1;
jamesdem1123 4:d29a7b77b1c6 73 counter[0]=int1 >> 8;
jamesdem1123 4:d29a7b77b1c6 74 counter[1]=int1 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 75 counter[2]=int2 >> 8;
jamesdem1123 4:d29a7b77b1c6 76 counter[3]=int2 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 77 counter[4]=int3 >> 8;
jamesdem1123 4:d29a7b77b1c6 78 counter[5]=int3 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 79 counter[6]=int4 >> 8;
jamesdem1123 4:d29a7b77b1c6 80 counter[7]=int4 & 0xFF;
jamesdem1123 5:6b90ed7f3eb1 81
jamesdem1123 4:d29a7b77b1c6 82 if(can1.write(CANMessage(ID, counter, 8))) {
jamesdem1123 5:6b90ed7f3eb1 83
jamesdem1123 4:d29a7b77b1c6 84 printf("Message sent: %x%x\r\n", counter[1],counter[0]);
jamesdem1123 4:d29a7b77b1c6 85 printf("Should be: %d, %d, %d, %d\r\n", int1,int2,int3,int4);
jamesdem1123 5:6b90ed7f3eb1 86 }
jamesdem1123 5:6b90ed7f3eb1 87 led1=0;
jamesdem1123 4:d29a7b77b1c6 88 }
jamesdem1123 4:d29a7b77b1c6 89
jamesdem1123 4:d29a7b77b1c6 90
jamesdem1123 5:6b90ed7f3eb1 91
jamesdem1123 4:d29a7b77b1c6 92
jamesdem1123 4:d29a7b77b1c6 93
jamesdem1123 4:d29a7b77b1c6 94
jamesdem1123 5:6b90ed7f3eb1 95 void Can_main(bool send,long int val1,long int val2,long int val3,long int val4, int the_ID)
jamesdem1123 5:6b90ed7f3eb1 96 {
jamesdem1123 4:d29a7b77b1c6 97
jamesdem1123 4:d29a7b77b1c6 98 std::map <int,string> CanIDMap;
jamesdem1123 4:d29a7b77b1c6 99
jamesdem1123 4:d29a7b77b1c6 100 //CanIDMap[0]="Motor Controller String";
jamesdem1123 4:d29a7b77b1c6 101 CanIDMap[1]="Motor Controller Ints";
jamesdem1123 4:d29a7b77b1c6 102 //CanIDMap[2]="Power Controller Voltage_Battery";
jamesdem1123 4:d29a7b77b1c6 103 CanIDMap[3]="Power Controller Voltage_5V";
jamesdem1123 4:d29a7b77b1c6 104 //CanIDMap[4]="Power Controller Voltage_12V";
jamesdem1123 4:d29a7b77b1c6 105 CanIDMap[5]="Power Controller Voltage_Motor";
jamesdem1123 4:d29a7b77b1c6 106 CanIDMap[6]="Power Controller Current_Battery";
jamesdem1123 4:d29a7b77b1c6 107 CanIDMap[7]="Power Controller Current_5V";
jamesdem1123 4:d29a7b77b1c6 108 CanIDMap[8]="Power Controller Current_12V";
jamesdem1123 4:d29a7b77b1c6 109 CanIDMap[9]="Power Controller Current_Motor";
jamesdem1123 4:d29a7b77b1c6 110 CanIDMap[10]="LCD Controller String";
jamesdem1123 4:d29a7b77b1c6 111 CanIDMap[11]="LCD Controller Ints";
jamesdem1123 4:d29a7b77b1c6 112 CanIDMap[12]="Zac is the Best";
jamesdem1123 4:d29a7b77b1c6 113
jamesdem1123 5:6b90ed7f3eb1 114
jamesdem1123 5:6b90ed7f3eb1 115
jamesdem1123 4:d29a7b77b1c6 116 //ticker.attach(&sending_values,1);
jamesdem1123 4:d29a7b77b1c6 117 CANMessage msg;
jamesdem1123 4:d29a7b77b1c6 118 int fixer1=0;
jamesdem1123 4:d29a7b77b1c6 119 int fixer2=0;
jamesdem1123 4:d29a7b77b1c6 120 int fixer3=0;
jamesdem1123 4:d29a7b77b1c6 121 int fixer4=0;
jamesdem1123 5:6b90ed7f3eb1 122
jamesdem1123 5:6b90ed7f3eb1 123 if (send==true) {
jamesdem1123 4:d29a7b77b1c6 124 sending_values(val1,val2,val3,val4,the_ID);
jamesdem1123 5:6b90ed7f3eb1 125 }
jamesdem1123 5:6b90ed7f3eb1 126 if(can2.read(msg)) {
jamesdem1123 5:6b90ed7f3eb1 127 bool tester= CanIDMap.find(msg.id) != CanIDMap.end();
jamesdem1123 5:6b90ed7f3eb1 128 if (tester) {
jamesdem1123 4:d29a7b77b1c6 129 printf("Message received: %x %x \r\n", msg.data[0], msg.data[1]);
jamesdem1123 5:6b90ed7f3eb1 130
jamesdem1123 4:d29a7b77b1c6 131 //printf("ID of message: %s \r\n", CanIDMap[msg.id]);
jamesdem1123 5:6b90ed7f3eb1 132
jamesdem1123 4:d29a7b77b1c6 133 std::string str=CanIDMap[msg.id];
jamesdem1123 4:d29a7b77b1c6 134 unsigned pos = str.find("_"); // position of "_" in str
jamesdem1123 4:d29a7b77b1c6 135 std::string str3 = str.substr (pos+1); // get from past"_" to the end
jamesdem1123 5:6b90ed7f3eb1 136 // printf("Dealing with: %s \r\n",str3);
jamesdem1123 4:d29a7b77b1c6 137 fixer1=((msg.data[0]<<8) | (msg.data[1]));
jamesdem1123 4:d29a7b77b1c6 138 fixer2=((msg.data[2]<<8) | (msg.data[3]));
jamesdem1123 4:d29a7b77b1c6 139 fixer3=((msg.data[4]<<8) | (msg.data[5]));
jamesdem1123 4:d29a7b77b1c6 140 fixer4=((msg.data[6]<<8) | (msg.data[7]));
jamesdem1123 4:d29a7b77b1c6 141 led2 = !led2;
jamesdem1123 5:6b90ed7f3eb1 142
jamesdem1123 4:d29a7b77b1c6 143 printf("Resulting Answer back is: %d, %d, %d, %d\r\n\r\n\r\n",fixer1,fixer2,fixer3,fixer4 );
jamesdem1123 5:6b90ed7f3eb1 144
jamesdem1123 4:d29a7b77b1c6 145 }
jamesdem1123 4:d29a7b77b1c6 146
jamesdem1123 5:6b90ed7f3eb1 147 else {
jamesdem1123 5:6b90ed7f3eb1 148
jamesdem1123 5:6b90ed7f3eb1 149 printf("Can Message, not related to this controller\r\n\r\n");
jamesdem1123 5:6b90ed7f3eb1 150
jamesdem1123 5:6b90ed7f3eb1 151 }
jamesdem1123 5:6b90ed7f3eb1 152
jamesdem1123 5:6b90ed7f3eb1 153 //wait(0.2);
jamesdem1123 4:d29a7b77b1c6 154 }
jamesdem1123 4:d29a7b77b1c6 155
jamesdem1123 5:6b90ed7f3eb1 156
jamesdem1123 5:6b90ed7f3eb1 157
jamesdem1123 4:d29a7b77b1c6 158
jamesdem1123 4:d29a7b77b1c6 159
jamesdem1123 4:d29a7b77b1c6 160 }
jamesdem1123 4:d29a7b77b1c6 161
jamesdem1123 4:d29a7b77b1c6 162
jamesdem1123 4:d29a7b77b1c6 163
jamesdem1123 4:d29a7b77b1c6 164
jamesdem1123 5:6b90ed7f3eb1 165 void sendArray (void)
jamesdem1123 2:321c8783ea30 166 {
jamesdem1123 4:d29a7b77b1c6 167
jamesdem1123 5:6b90ed7f3eb1 168 printf("___________________________\r\n");
jamesdem1123 5:6b90ed7f3eb1 169 printf("Sending messages....\r\n");
jamesdem1123 5:6b90ed7f3eb1 170 printf("Message id 1: Batt Cur = %d, Batt Volt = %d, Twelve Cur = %d, Twelve Volt = %d....",powerArr[0],powerArr[1],powerArr[2],powerArr[3]);
jamesdem1123 5:6b90ed7f3eb1 171 sending_values(powerArr[0],powerArr[1],powerArr[2],powerArr[3],1);
jamesdem1123 5:6b90ed7f3eb1 172 printf("....sent\r\n");
jamesdem1123 5:6b90ed7f3eb1 173 printf("Message id 2: Five Cur = %d, Five Volt = %d, Mot Cur = %d, Mot Volt = %d....",powerArr[4],powerArr[5],powerArr[6],powerArr[7]);
jamesdem1123 5:6b90ed7f3eb1 174 sending_values(powerArr[4],powerArr[5],powerArr[6],powerArr[7],2);
jamesdem1123 5:6b90ed7f3eb1 175 printf("....sent\r\n");
jamesdem1123 5:6b90ed7f3eb1 176 printf("Message id 3: Cpu Cur = %d, Periferal Cur = %d, null, null....",powerArr[8],powerArr[9]);
jamesdem1123 5:6b90ed7f3eb1 177 sending_values(powerArr[8],powerArr[9],0,0,3);
jamesdem1123 5:6b90ed7f3eb1 178 printf("....sent\r\n");
jamesdem1123 5:6b90ed7f3eb1 179 printf("CANBUS TRANMISSION COMPLETE\r\n");
jamesdem1123 5:6b90ed7f3eb1 180 printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
jamesdem1123 5:6b90ed7f3eb1 181 relNet=!relNet;
jamesdem1123 5:6b90ed7f3eb1 182 float neW =(powerArr[1]*.003);
jamesdem1123 5:6b90ed7f3eb1 183 printf("actual vbat= %2.4f volt\r\n", neW);
jamesdem1123 5:6b90ed7f3eb1 184 }
jamesdem1123 2:321c8783ea30 185
jamesdem1123 2:321c8783ea30 186
jamesdem1123 2:321c8783ea30 187
jamesdem1123 1:dd6f8dc1e54e 188 void setup(void)
jamesdem1123 1:dd6f8dc1e54e 189 {
jamesdem1123 5:6b90ed7f3eb1 190 graph.attach(&sendArray, (1.5)); //update array every 10 seconds
jamesdem1123 5:6b90ed7f3eb1 191 // cantbus.frequency(500000);
jamesdem1123 5:6b90ed7f3eb1 192 // CANMessage can_MsgRx;
jamesdem1123 5:6b90ed7f3eb1 193
jamesdem1123 1:dd6f8dc1e54e 194 //initialize relays
jamesdem1123 1:dd6f8dc1e54e 195 relSens= 0;
jamesdem1123 1:dd6f8dc1e54e 196 relNet =0;
jamesdem1123 1:dd6f8dc1e54e 197 relCpuPower=0;
jamesdem1123 1:dd6f8dc1e54e 198 relCpuRst =0;
jamesdem1123 1:dd6f8dc1e54e 199 relUsr=0;
jamesdem1123 1:dd6f8dc1e54e 200
jamesdem1123 1:dd6f8dc1e54e 201 }
jamesdem1123 1:dd6f8dc1e54e 202
jamesdem1123 1:dd6f8dc1e54e 203
jamesdem1123 2:321c8783ea30 204
jamesdem1123 1:dd6f8dc1e54e 205 int main()
jamesdem1123 1:dd6f8dc1e54e 206 {
jamesdem1123 1:dd6f8dc1e54e 207 setup();
jamesdem1123 5:6b90ed7f3eb1 208
jamesdem1123 5:6b90ed7f3eb1 209
jamesdem1123 1:dd6f8dc1e54e 210 while (1) {
jamesdem1123 5:6b90ed7f3eb1 211
jamesdem1123 5:6b90ed7f3eb1 212
jamesdem1123 2:321c8783ea30 213
jamesdem1123 1:dd6f8dc1e54e 214
jamesdem1123 1:dd6f8dc1e54e 215
jamesdem1123 5:6b90ed7f3eb1 216 powerArr[0]=ibat = (iBat.read_u16());
jamesdem1123 5:6b90ed7f3eb1 217 powerArr[1]=vBat = ads.readADC_SingleEnded(0); // read channel 0 PROTO
jamesdem1123 5:6b90ed7f3eb1 218
jamesdem1123 5:6b90ed7f3eb1 219 powerArr[2]=itwelve = (iTwelve.read_u16());
jamesdem1123 5:6b90ed7f3eb1 220 powerArr[3]=vtwelve = ads.readADC_SingleEnded(1); // read channel 1
jamesdem1123 5:6b90ed7f3eb1 221
jamesdem1123 5:6b90ed7f3eb1 222 powerArr[4]=ifive = (iFive.read_u16());
jamesdem1123 5:6b90ed7f3eb1 223 powerArr[5]=vfive = ads.readADC_SingleEnded(2); // read channel 0
jamesdem1123 5:6b90ed7f3eb1 224
jamesdem1123 5:6b90ed7f3eb1 225 powerArr[6]=imot = (iMot.read_u16());
jamesdem1123 5:6b90ed7f3eb1 226 powerArr[7]=vmot = ads.readADC_SingleEnded(3); // read channel 0
jamesdem1123 5:6b90ed7f3eb1 227
jamesdem1123 5:6b90ed7f3eb1 228 powerArr[8]=icpu = (iCpu.read_u16());
jamesdem1123 5:6b90ed7f3eb1 229 powerArr[9]=iperi = (iPeri.read_u16());
jamesdem1123 5:6b90ed7f3eb1 230
jamesdem1123 5:6b90ed7f3eb1 231 //powerArr[] = {ibat,vbat,itwelve, vtwelve, ifive, vfive, imot, vmot, icpu, iperi};
jamesdem1123 5:6b90ed7f3eb1 232
jamesdem1123 5:6b90ed7f3eb1 233 led0=!led0;
jamesdem1123 4:d29a7b77b1c6 234
jamesdem1123 0:54d5ccfcb14c 235 }
jamesdem1123 0:54d5ccfcb14c 236 }
jamesdem1123 1:dd6f8dc1e54e 237
jamesdem1123 1:dd6f8dc1e54e 238
jamesdem1123 1:dd6f8dc1e54e 239
jamesdem1123 1:dd6f8dc1e54e 240
jamesdem1123 1:dd6f8dc1e54e 241
jamesdem1123 1:dd6f8dc1e54e 242
jamesdem1123 1:dd6f8dc1e54e 243
jamesdem1123 1:dd6f8dc1e54e 244
jamesdem1123 1:dd6f8dc1e54e 245
jamesdem1123 1:dd6f8dc1e54e 246
jamesdem1123 1:dd6f8dc1e54e 247
jamesdem1123 1:dd6f8dc1e54e 248
jamesdem1123 1:dd6f8dc1e54e 249
jamesdem1123 4:d29a7b77b1c6 250
jamesdem1123 4:d29a7b77b1c6 251
jamesdem1123 4:d29a7b77b1c6 252
jamesdem1123 4:d29a7b77b1c6 253
jamesdem1123 4:d29a7b77b1c6 254
jamesdem1123 4:d29a7b77b1c6 255
jamesdem1123 4:d29a7b77b1c6 256