Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
SnConstants.h@67:ec999336fcd1, 2015-02-03 (annotated)
- Committer:
- uci1
- Date:
- Tue Feb 03 00:04:30 2015 +0000
- Revision:
- 67:ec999336fcd1
- Parent:
- 56:0bba0ef15697
- Child:
- 68:a21f6c4be238
STN20 Hardcoded (mac adr and config label). Power off periphs before powering anything on. do NOT use interface chip for mac adr or files (except reprogramming)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
uci1 | 1:e392595b4b76 | 1 | #ifndef SN_SnConstants |
uci1 | 1:e392595b4b76 | 2 | #define SN_SnConstants |
uci1 | 1:e392595b4b76 | 3 | |
uci1 | 67:ec999336fcd1 | 4 | // available CHIPBOARDs -- these values should never change! |
uci1 | 56:0bba0ef15697 | 5 | #define ATWD4CH 0 // set CHIPBOARD to this to get firmware for the 2012-2013 stations (value is arbitrary but unique) |
uci1 | 56:0bba0ef15697 | 6 | #define SST4CH 1 // set CHIPBOARD to this to get firmware for the 2014 stations with a single SST chip (value is arbitrary but unique) |
uci1 | 56:0bba0ef15697 | 7 | |
uci1 | 56:0bba0ef15697 | 8 | // which chip/board combination to build this firmware for |
uci1 | 67:ec999336fcd1 | 9 | #define CHIPBOARD ATWD4CH |
uci1 | 67:ec999336fcd1 | 10 | //#define CHIPBOARD SST4CH |
uci1 | 67:ec999336fcd1 | 11 | |
uci1 | 67:ec999336fcd1 | 12 | //#define DEBUG |
uci1 | 67:ec999336fcd1 | 13 | |
uci1 | 67:ec999336fcd1 | 14 | //#define USE_INTERFACE_CHIP |
uci1 | 67:ec999336fcd1 | 15 | |
uci1 | 56:0bba0ef15697 | 16 | |
uci1 | 1:e392595b4b76 | 17 | #include "SnBitUtils.h" |
uci1 | 37:ff95e7070f26 | 18 | #include "SnCommConstants.h" |
uci1 | 25:57b2627fe756 | 19 | |
uci1 | 1:e392595b4b76 | 20 | // |
uci1 | 1:e392595b4b76 | 21 | // constants |
uci1 | 1:e392595b4b76 | 22 | // |
uci1 | 67:ec999336fcd1 | 23 | |
uci1 | 67:ec999336fcd1 | 24 | // this should be updated for each and every mbed board (ugh!) |
uci1 | 67:ec999336fcd1 | 25 | //static const char kDefaultMacAdress[] = {0x00, 0x02, 0xAA, 0xAA, 0xAA, 0xAA}; // for testing SST |
uci1 | 67:ec999336fcd1 | 26 | //static const char kDefaultMacAdress[] = {0x00, 0x02, 0xBB, 0xBB, 0xBB, 0xBB}; // for testing ATWD |
uci1 | 67:ec999336fcd1 | 27 | static const char kDefaultMacAdress[] = {0x00, 0x02, 0xF7, 0xF0, 0xAE, 0xE0}; // STN 20 (ATWD MB 1) 0002F7F0AEE0 |
uci1 | 67:ec999336fcd1 | 28 | |
uci1 | 40:1324da35afd4 | 29 | // if these change, it is likely that some i/o version (config, event, etc) will need to change |
uci1 | 56:0bba0ef15697 | 30 | static const bool kIridPwrFromAfar = false; // true if Iridium & Afar are on the same relay, false if not |
uci1 | 1:e392595b4b76 | 31 | static const uint32_t kBStime = 946684800u; // 1/1/2000 00:00:00 UTC |
uci1 | 56:0bba0ef15697 | 32 | |
uci1 | 56:0bba0ef15697 | 33 | // these constants are used to specify the size of a specific i/o version of a frame, even if e.g. the number of samples changes for later i/o versions |
uci1 | 56:0bba0ef15697 | 34 | // these values should NEVER be changed!! |
uci1 | 56:0bba0ef15697 | 35 | // these values should be used in i/o functions |
uci1 | 56:0bba0ef15697 | 36 | static const uint8_t kNplasV1 = 5u; // to preserve i/o version sizes |
uci1 | 56:0bba0ef15697 | 37 | static const uint16_t kNsampsAtwd = 128u; |
uci1 | 56:0bba0ef15697 | 38 | static const uint16_t kNsampsSst = 256u; |
uci1 | 56:0bba0ef15697 | 39 | static const uint8_t kNchanDacsAtwd = 4u; |
uci1 | 56:0bba0ef15697 | 40 | static const uint8_t kNchanDacsSst = 2u; |
uci1 | 56:0bba0ef15697 | 41 | static const uint8_t kNchansFourAnt = 4u; |
uci1 | 56:0bba0ef15697 | 42 | static const uint16_t kTotSampsAtwd4ch = kNchansFourAnt*kNsampsAtwd; |
uci1 | 56:0bba0ef15697 | 43 | static const uint16_t kTotDacsAtwd4ch = kNchansFourAnt*kNchanDacsAtwd; |
uci1 | 56:0bba0ef15697 | 44 | static const uint16_t kTotSampsSst4ch = kNchansFourAnt*kNsampsSst; |
uci1 | 56:0bba0ef15697 | 45 | static const uint16_t kTotDacsSst4ch = kNchansFourAnt*kNchanDacsSst; |
uci1 | 56:0bba0ef15697 | 46 | static const uint16_t kNstopBytesSst4ch = kNsampsSst / BITS_IN_CHAR; // if the values change, may need to round this numebr |
uci1 | 56:0bba0ef15697 | 47 | |
uci1 | 56:0bba0ef15697 | 48 | // these are the station config sizes, and may change. they should not be used in i/o functions. i/o versions need updating as these change! |
uci1 | 56:0bba0ef15697 | 49 | #if CHIPBOARD==ATWD4CH |
uci1 | 56:0bba0ef15697 | 50 | static const uint8_t kNchans = kNchansFourAnt; |
uci1 | 56:0bba0ef15697 | 51 | static const uint16_t kNsamps = kNsampsAtwd; |
uci1 | 40:1324da35afd4 | 52 | static const uint8_t kNplas = kNplasV1; // update config i/o version if this changes |
uci1 | 56:0bba0ef15697 | 53 | static const uint8_t kNchanDacs = kNchanDacsAtwd; |
uci1 | 1:e392595b4b76 | 54 | static const uint16_t kNoTrigPla = 0x0000u; |
uci1 | 56:0bba0ef15697 | 55 | static const float kAsfClkPrdUs = 8.535; // us -- change kAdcToMBtimeCut if this is <=2us |
uci1 | 56:0bba0ef15697 | 56 | static const float kAdcToMBtimeCut = (kNsamps*kAsfClkPrdUs)+(kAsfClkPrdUs/2.0); |
uci1 | 56:0bba0ef15697 | 57 | #elif CHIPBOARD==SST4CH |
uci1 | 56:0bba0ef15697 | 58 | static const uint8_t kNchans = kNchansFourAnt; |
uci1 | 56:0bba0ef15697 | 59 | static const uint16_t kNsamps = kNsampsSst; |
uci1 | 56:0bba0ef15697 | 60 | static const uint8_t kNchanDacs = kNchanDacsSst; |
uci1 | 56:0bba0ef15697 | 61 | static const uint16_t kNstopBytes = kNstopBytesSst4ch; |
uci1 | 56:0bba0ef15697 | 62 | static const uint8_t kAllLTC2657 = 0x73u << 1; // slave address that every LTC2657 DAC chip will respond to |
uci1 | 56:0bba0ef15697 | 63 | static const uint8_t kUpdateDacCmd = 0x3u; // LTC2657 DAC chip command bits that write to & update DAC value |
uci1 | 56:0bba0ef15697 | 64 | static const uint8_t kMaxDacSetTries = 3u; // how many times to retry setting a dac in case no ACK is received from the DAC chip |
uci1 | 56:0bba0ef15697 | 65 | #endif |
uci1 | 51:b2bc37d660c0 | 66 | static const uint8_t kNcomms = 2u; |
uci1 | 8:95a325df1f6b | 67 | static const uint16_t kNvoltsAve = 500u; // must be greater than ~10 (but not checked. <2 will result in divide by 0) |
uci1 | 16:744ce85aede2 | 68 | |
uci1 | 1:e392595b4b76 | 69 | static const uint32_t kAbsMaxTimer = 1800u; // timers use integers counting us and can't go longer than ~ this many secs |
uci1 | 3:24c5f0f50bf1 | 70 | |
uci1 | 40:1324da35afd4 | 71 | // NOTE: these times (in sec) must be less than kAbsMaxTimer (this is not checked, however) |
uci1 | 40:1324da35afd4 | 72 | static const uint8_t kDefTimeoutMin = 3u; // minutes. used in case a clock error is detected or range needs enforcing |
uci1 | 40:1324da35afd4 | 73 | static const uint32_t kCommWinLongPrdTk = 300u; // seconds. check if it's time for a comm win every X sec. this way comm per can be longer than Timer allows |
uci1 | 40:1324da35afd4 | 74 | |
uci1 | 40:1324da35afd4 | 75 | static const uint16_t kMaxConsecCommFails = 4; // (exclusive) number of times a comm win can fail before the mbed resets |
uci1 | 40:1324da35afd4 | 76 | |
uci1 | 28:484943132bb0 | 77 | // safety nets |
uci1 | 40:1324da35afd4 | 78 | static const uint16_t kMaxFirstSeq = 25000; // max specifiable seq number -- leave room to grow |
uci1 | 28:484943132bb0 | 79 | static const float kMinForcePer = 0.05; // seconds -- safety net for max force trigger rate |
uci1 | 28:484943132bb0 | 80 | static const uint16_t kMaxThrottlePerMs = 60000; // ms -- max time between thermal triggers |
uci1 | 28:484943132bb0 | 81 | static const uint16_t kMaxBatVoltLowPwr = 25000; // ADCs -- probably futile, but try to prevent it from being in low power mode always |
uci1 | 40:1324da35afd4 | 82 | static const uint32_t kMinCommWinPeriod = 120; // seconds -- min time between communication windows |
uci1 | 28:484943132bb0 | 83 | static const uint32_t kMaxCommWinPeriod = 259200; // seconds -- max time between communication windows |
uci1 | 40:1324da35afd4 | 84 | static const uint32_t kMinCommWinDur = 600; // seconds -- min communication window duration -- must be >= Ncomms*listen/connect timeout |
uci1 | 28:484943132bb0 | 85 | static const uint32_t kMaxWatchDogPer = 3600; // seconds -- max time before watchdog reset on idle |
uci1 | 40:1324da35afd4 | 86 | static const uint32_t kMinWatchDogPer = 300; // seconds -- min time before watchdog reset on idle |
uci1 | 28:484943132bb0 | 87 | |
uci1 | 1:e392595b4b76 | 88 | static const uint16_t kTotSamps = kNchans*kNsamps; |
uci1 | 56:0bba0ef15697 | 89 | static const uint16_t kTotDacs = kNchans*kNchanDacs; |
uci1 | 1:e392595b4b76 | 90 | |
uci1 | 16:744ce85aede2 | 91 | |
uci1 | 1:e392595b4b76 | 92 | enum ESnTrgTypes { |
uci1 | 16:744ce85aede2 | 93 | kThmTrg=0, |
uci1 | 56:0bba0ef15697 | 94 | kFrcTrg=1, |
uci1 | 56:0bba0ef15697 | 95 | kExtTrg=2, |
uci1 | 56:0bba0ef15697 | 96 | kAdcToMBflag=3, |
uci1 | 16:744ce85aede2 | 97 | |
uci1 | 1:e392595b4b76 | 98 | kNumTrgs |
uci1 | 1:e392595b4b76 | 99 | }; |
uci1 | 16:744ce85aede2 | 100 | // order must match ESnTrgTypes |
uci1 | 16:744ce85aede2 | 101 | static const uint8_t kTrgBW[kNumTrgs] = { BIT(0), BIT(1), BIT(2), BIT(7) }; |
uci1 | 1:e392595b4b76 | 102 | |
uci1 | 1:e392595b4b76 | 103 | |
uci1 | 1:e392595b4b76 | 104 | |
uci1 | 0:664899e0b988 | 105 | #endif // SN_SnConstants |