Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

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?

UserRevisionLine numberNew 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