most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
joel_ssc
Date:
Mon May 13 19:25:26 2019 +0000
Revision:
92:52a91656458a
Parent:
73:f6f378311c8d
version for first flight test, timeouts not yet set correctly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkelly10 9:d5fcdcb3c89d 1 #include "ltc1298.hpp"
mkelly10 9:d5fcdcb3c89d 2
danstrider 10:085ab7328054 3 SpiADC::SpiADC(PinName mosi, PinName miso, PinName sclk, PinName csel, PinName led) :
danstrider 10:085ab7328054 4 _spi(mosi, miso, sclk), // mosi, miso, sclk
danstrider 10:085ab7328054 5 adcLed(led), // status led
danstrider 10:085ab7328054 6 cs(csel) // chip select
mkelly10 9:d5fcdcb3c89d 7 {
mkelly10 9:d5fcdcb3c89d 8 }
mkelly10 9:d5fcdcb3c89d 9
danstrider 10:085ab7328054 10 void SpiADC::initialize() {
mkelly10 9:d5fcdcb3c89d 11 //set up the spi bus and frequency
mkelly10 51:c5c40272ecc3 12 _spi.format(12,0);
mkelly10 9:d5fcdcb3c89d 13 _spi.frequency(1000000);
mkelly10 51:c5c40272ecc3 14
mkelly10 9:d5fcdcb3c89d 15 //chip select high puts ltc1298 in standby
danstrider 10:085ab7328054 16 cs = 1;
danstrider 10:085ab7328054 17
danstrider 10:085ab7328054 18 //zero the initial ch0 and ch1 oversampled readings
mkelly10 9:d5fcdcb3c89d 19 ch0_filt = 0;
mkelly10 9:d5fcdcb3c89d 20 ch1_filt = 0;
mkelly10 51:c5c40272ecc3 21 ch2_filt = 0;
mkelly10 51:c5c40272ecc3 22 ch3_filt = 0;
mkelly10 51:c5c40272ecc3 23 ch4_filt = 0;
mkelly10 51:c5c40272ecc3 24 ch5_filt = 0;
mkelly10 51:c5c40272ecc3 25 ch6_filt = 0;
mkelly10 51:c5c40272ecc3 26 ch7_filt = 0;
mkelly10 9:d5fcdcb3c89d 27
danstrider 10:085ab7328054 28 //led on to say hello
tnhnrl 68:8f549749b8ce 29 adcLed = 0; //debug turned off
mkelly10 9:d5fcdcb3c89d 30 }
mkelly10 9:d5fcdcb3c89d 31
danstrider 10:085ab7328054 32 // start an interupt driven trigger of the external ADC
danstrider 10:085ab7328054 33 void SpiADC::start() {
mkelly10 51:c5c40272ecc3 34 interval.attach_us(this, &SpiADC::update, 10000); //this should be a 100 Hz sample rate
mkelly10 9:d5fcdcb3c89d 35 }
mkelly10 9:d5fcdcb3c89d 36
danstrider 10:085ab7328054 37 // stop the interupt driven trigger
danstrider 10:085ab7328054 38 void SpiADC::stop() {
mkelly10 9:d5fcdcb3c89d 39 interval.detach();
mkelly10 9:d5fcdcb3c89d 40 }
mkelly10 9:d5fcdcb3c89d 41
danstrider 10:085ab7328054 42 void SpiADC::update() {
mkelly10 9:d5fcdcb3c89d 43 //flash the LED
tnhnrl 68:8f549749b8ce 44 //adcLed = !adcLed;
mkelly10 9:d5fcdcb3c89d 45
mkelly10 9:d5fcdcb3c89d 46 //chip select low starts data conversion
mkelly10 9:d5fcdcb3c89d 47 cs = 0;
mkelly10 51:c5c40272ecc3 48
mkelly10 9:d5fcdcb3c89d 49 //the next thing is the input data word
mkelly10 9:d5fcdcb3c89d 50 //it is 4 bits and looks like this
mkelly10 9:d5fcdcb3c89d 51 // | start | single/diff | odd/sign | MSB first/LSB first |
mkelly10 9:d5fcdcb3c89d 52 // if you want single ended on channel 0 MSB first then input 0xD
mkelly10 9:d5fcdcb3c89d 53 // if you want single ended on channel 1 MSB first then input 0xF
mkelly10 9:d5fcdcb3c89d 54
mkelly10 9:d5fcdcb3c89d 55 // get channel 0
mkelly10 51:c5c40272ecc3 56 unsigned int byte = _spi.write((0x18)<<2);
mkelly10 9:d5fcdcb3c89d 57 //send a dummy byte to receive the data
mkelly10 9:d5fcdcb3c89d 58 unsigned int byte1 = _spi.write(0x0);
mkelly10 9:d5fcdcb3c89d 59 ch0_raw = byte1;
mkelly10 9:d5fcdcb3c89d 60 ch0_filt += (ch0_raw - ch0_filt)/CH0OVERSAMPLE;
mkelly10 9:d5fcdcb3c89d 61
mkelly10 9:d5fcdcb3c89d 62 cs = 1;
mkelly10 9:d5fcdcb3c89d 63 cs = 0;
mkelly10 9:d5fcdcb3c89d 64
mkelly10 51:c5c40272ecc3 65 byte = _spi.write((0x19)<<2);
mkelly10 9:d5fcdcb3c89d 66 //send a dummy byte to receive the data
mkelly10 9:d5fcdcb3c89d 67 byte1 = _spi.write(0x0);
mkelly10 9:d5fcdcb3c89d 68 ch1_raw = byte1;
mkelly10 9:d5fcdcb3c89d 69 ch1_filt += (ch1_raw - ch1_filt)/CH1OVERSAMPLE;
mkelly10 9:d5fcdcb3c89d 70
mkelly10 9:d5fcdcb3c89d 71 //switch chip select back to high
mkelly10 9:d5fcdcb3c89d 72 cs = 1;
mkelly10 51:c5c40272ecc3 73 cs = 0;
mkelly10 51:c5c40272ecc3 74
mkelly10 51:c5c40272ecc3 75 byte = _spi.write((0x1A)<<2);
mkelly10 51:c5c40272ecc3 76 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 77 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 78 ch2_raw = byte1;
mkelly10 51:c5c40272ecc3 79 ch2_filt += (ch2_raw - ch2_filt)/CH2OVERSAMPLE;
mkelly10 51:c5c40272ecc3 80
mkelly10 51:c5c40272ecc3 81 //switch chip select back to high
mkelly10 51:c5c40272ecc3 82 cs = 1;
mkelly10 51:c5c40272ecc3 83 cs = 0;
mkelly10 51:c5c40272ecc3 84
mkelly10 51:c5c40272ecc3 85 byte = _spi.write((0x1B)<<2);
mkelly10 51:c5c40272ecc3 86 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 87 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 88 ch3_raw = byte1;
mkelly10 51:c5c40272ecc3 89 ch3_filt += (ch3_raw - ch3_filt)/CH3OVERSAMPLE;
mkelly10 51:c5c40272ecc3 90
mkelly10 51:c5c40272ecc3 91 //switch chip select back to high
mkelly10 51:c5c40272ecc3 92 cs = 1;
mkelly10 51:c5c40272ecc3 93
mkelly10 51:c5c40272ecc3 94 cs = 0;
mkelly10 51:c5c40272ecc3 95
mkelly10 51:c5c40272ecc3 96 byte = _spi.write((0x1C)<<2);
mkelly10 51:c5c40272ecc3 97 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 98 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 99 ch4_raw = byte1;
mkelly10 51:c5c40272ecc3 100 ch4_filt += (ch4_raw - ch4_filt)/CH4OVERSAMPLE;
mkelly10 51:c5c40272ecc3 101
mkelly10 51:c5c40272ecc3 102 //switch chip select back to high
mkelly10 51:c5c40272ecc3 103 cs = 1;
mkelly10 51:c5c40272ecc3 104
mkelly10 51:c5c40272ecc3 105 cs = 0;
mkelly10 51:c5c40272ecc3 106
mkelly10 51:c5c40272ecc3 107 byte = _spi.write((0x1D)<<2);
mkelly10 51:c5c40272ecc3 108 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 109 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 110 ch5_raw = byte1;
mkelly10 51:c5c40272ecc3 111 ch5_filt += (ch5_raw - ch5_filt)/CH5OVERSAMPLE;
mkelly10 51:c5c40272ecc3 112
mkelly10 51:c5c40272ecc3 113 //switch chip select back to high
mkelly10 51:c5c40272ecc3 114 cs = 1;
mkelly10 51:c5c40272ecc3 115
mkelly10 51:c5c40272ecc3 116 cs = 0;
mkelly10 51:c5c40272ecc3 117
mkelly10 51:c5c40272ecc3 118 byte = _spi.write((0x1E)<<2);
mkelly10 51:c5c40272ecc3 119 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 120 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 121 ch6_raw = byte1;
mkelly10 51:c5c40272ecc3 122 ch6_filt += (ch6_raw - ch6_filt)/CH6OVERSAMPLE;
mkelly10 51:c5c40272ecc3 123
mkelly10 51:c5c40272ecc3 124 //switch chip select back to high
mkelly10 51:c5c40272ecc3 125 cs = 1;
mkelly10 51:c5c40272ecc3 126
mkelly10 51:c5c40272ecc3 127 cs = 0;
mkelly10 51:c5c40272ecc3 128
mkelly10 51:c5c40272ecc3 129 byte = _spi.write((0x1F)<<2);
mkelly10 51:c5c40272ecc3 130 //send a dummy byte to receive the data
mkelly10 51:c5c40272ecc3 131 byte1 = _spi.write(0x0);
mkelly10 51:c5c40272ecc3 132 ch7_raw = byte1;
mkelly10 51:c5c40272ecc3 133 ch7_filt += (ch7_raw - ch7_filt)/CH7OVERSAMPLE;
mkelly10 51:c5c40272ecc3 134
mkelly10 51:c5c40272ecc3 135 //switch chip select back to high
mkelly10 51:c5c40272ecc3 136 cs = 1;
mkelly10 51:c5c40272ecc3 137
mkelly10 9:d5fcdcb3c89d 138 return ;
mkelly10 9:d5fcdcb3c89d 139 }
mkelly10 9:d5fcdcb3c89d 140
danstrider 10:085ab7328054 141 int SpiADC::readCh0() {
mkelly10 9:d5fcdcb3c89d 142 return ch0_filt;
mkelly10 9:d5fcdcb3c89d 143 }
mkelly10 9:d5fcdcb3c89d 144
danstrider 10:085ab7328054 145 int SpiADC::readCh1() {
mkelly10 9:d5fcdcb3c89d 146 return ch1_filt;
mkelly10 51:c5c40272ecc3 147 }
mkelly10 51:c5c40272ecc3 148
mkelly10 51:c5c40272ecc3 149 int SpiADC::readCh2() {
mkelly10 51:c5c40272ecc3 150 return ch2_filt;
mkelly10 51:c5c40272ecc3 151 }
mkelly10 51:c5c40272ecc3 152
mkelly10 51:c5c40272ecc3 153 int SpiADC::readCh3() {
mkelly10 51:c5c40272ecc3 154 return ch3_filt;
mkelly10 51:c5c40272ecc3 155 }
mkelly10 51:c5c40272ecc3 156
mkelly10 51:c5c40272ecc3 157 int SpiADC::readCh4() {
mkelly10 51:c5c40272ecc3 158 return ch4_filt;
mkelly10 51:c5c40272ecc3 159 }
mkelly10 51:c5c40272ecc3 160
mkelly10 51:c5c40272ecc3 161 int SpiADC::readCh5() {
mkelly10 51:c5c40272ecc3 162 return ch5_filt;
mkelly10 51:c5c40272ecc3 163 }
mkelly10 51:c5c40272ecc3 164
mkelly10 51:c5c40272ecc3 165 int SpiADC::readCh6() {
mkelly10 51:c5c40272ecc3 166 return ch6_filt;
mkelly10 51:c5c40272ecc3 167 }
mkelly10 51:c5c40272ecc3 168
mkelly10 51:c5c40272ecc3 169 int SpiADC::readCh7() {
mkelly10 51:c5c40272ecc3 170 return ch7_filt;
tnhnrl 73:f6f378311c8d 171 }
tnhnrl 73:f6f378311c8d 172
tnhnrl 73:f6f378311c8d 173 int SpiADC::readRawCh0() {
tnhnrl 73:f6f378311c8d 174 return ch0_raw;
tnhnrl 73:f6f378311c8d 175 }
tnhnrl 73:f6f378311c8d 176
tnhnrl 73:f6f378311c8d 177 int SpiADC::readRawCh1() {
tnhnrl 73:f6f378311c8d 178 return ch1_raw;
tnhnrl 73:f6f378311c8d 179 }
tnhnrl 73:f6f378311c8d 180
tnhnrl 73:f6f378311c8d 181 int SpiADC::readRawCh2() {
tnhnrl 73:f6f378311c8d 182 return ch2_raw;
tnhnrl 73:f6f378311c8d 183 }
tnhnrl 73:f6f378311c8d 184
tnhnrl 73:f6f378311c8d 185 int SpiADC::readRawCh3() {
tnhnrl 73:f6f378311c8d 186 return ch3_raw;
tnhnrl 73:f6f378311c8d 187 }
tnhnrl 73:f6f378311c8d 188
tnhnrl 73:f6f378311c8d 189 int SpiADC::readRawCh4() {
tnhnrl 73:f6f378311c8d 190 return ch4_raw;
tnhnrl 73:f6f378311c8d 191 }
tnhnrl 73:f6f378311c8d 192
tnhnrl 73:f6f378311c8d 193 int SpiADC::readRawCh5() {
tnhnrl 73:f6f378311c8d 194 return ch5_raw;
tnhnrl 73:f6f378311c8d 195 }
tnhnrl 73:f6f378311c8d 196
tnhnrl 73:f6f378311c8d 197 int SpiADC::readRawCh6() {
tnhnrl 73:f6f378311c8d 198 return ch6_raw;
tnhnrl 73:f6f378311c8d 199 }
tnhnrl 73:f6f378311c8d 200
tnhnrl 73:f6f378311c8d 201 int SpiADC::readRawCh7() {
tnhnrl 73:f6f378311c8d 202 return ch7_raw;
tnhnrl 73:f6f378311c8d 203 }