This code is to collect data from the ADCs in burst mode, decimate the data, encapsulate it in a simple UDP-like packet and then transmit it over the serial port.
daq.h@0:03e8a03052c9, 2010-08-27 (annotated)
- Committer:
- jimurai
- Date:
- Fri Aug 27 15:20:30 2010 +0000
- Revision:
- 0:03e8a03052c9
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jimurai | 0:03e8a03052c9 | 1 | /** |
jimurai | 0:03e8a03052c9 | 2 | * @file daq.h |
jimurai | 0:03e8a03052c9 | 3 | * Header file for daq.cpp - a data acquisition system capable of |
jimurai | 0:03e8a03052c9 | 4 | * sampling from multiple ADCs in BURST mode to allow consistent, |
jimurai | 0:03e8a03052c9 | 5 | * high-rate sampling. The samples are passed to a bank of decimators |
jimurai | 0:03e8a03052c9 | 6 | * to allow the samples to be synchronised with another, slower |
jimurai | 0:03e8a03052c9 | 7 | * sampling clock or other sampling sources/ |
jimurai | 0:03e8a03052c9 | 8 | * |
jimurai | 0:03e8a03052c9 | 9 | * @brief Header file for daq.cpp |
jimurai | 0:03e8a03052c9 | 10 | * |
jimurai | 0:03e8a03052c9 | 11 | * @author James A C Patterson |
jimurai | 0:03e8a03052c9 | 12 | */ |
jimurai | 0:03e8a03052c9 | 13 | #ifndef DAQ_H |
jimurai | 0:03e8a03052c9 | 14 | #define DAQ_H |
jimurai | 0:03e8a03052c9 | 15 | |
jimurai | 0:03e8a03052c9 | 16 | typedef void (*FuncPtr)(void); |
jimurai | 0:03e8a03052c9 | 17 | |
jimurai | 0:03e8a03052c9 | 18 | class ADC_BURST { |
jimurai | 0:03e8a03052c9 | 19 | public: |
jimurai | 0:03e8a03052c9 | 20 | ADC_BURST (); |
jimurai | 0:03e8a03052c9 | 21 | ~ADC_BURST (); |
jimurai | 0:03e8a03052c9 | 22 | void attach(FuncPtr); |
jimurai | 0:03e8a03052c9 | 23 | void burst_isr(void); |
jimurai | 0:03e8a03052c9 | 24 | uint32_t data[4]; |
jimurai | 0:03e8a03052c9 | 25 | private: |
jimurai | 0:03e8a03052c9 | 26 | FuncPtr isr_pointer_; |
jimurai | 0:03e8a03052c9 | 27 | bool attached_; |
jimurai | 0:03e8a03052c9 | 28 | static ADC_BURST *instance; |
jimurai | 0:03e8a03052c9 | 29 | static void _burst_isr(void); |
jimurai | 0:03e8a03052c9 | 30 | }; |
jimurai | 0:03e8a03052c9 | 31 | |
jimurai | 0:03e8a03052c9 | 32 | /** |
jimurai | 0:03e8a03052c9 | 33 | * Decimator class to implement simple low-pass filtering on uC |
jimurai | 0:03e8a03052c9 | 34 | * Unsigned integer decimator. Depth up to 32 samples. |
jimurai | 0:03e8a03052c9 | 35 | * Currently just behaves as a uniform weighted FIR |
jimurai | 0:03e8a03052c9 | 36 | */ |
jimurai | 0:03e8a03052c9 | 37 | class Decimator { |
jimurai | 0:03e8a03052c9 | 38 | public: |
jimurai | 0:03e8a03052c9 | 39 | Decimator (uint8_t); |
jimurai | 0:03e8a03052c9 | 40 | void write (uint16_t); |
jimurai | 0:03e8a03052c9 | 41 | uint16_t read (); |
jimurai | 0:03e8a03052c9 | 42 | private: |
jimurai | 0:03e8a03052c9 | 43 | uint8_t decimation_order_; |
jimurai | 0:03e8a03052c9 | 44 | uint8_t decimation_length_; |
jimurai | 0:03e8a03052c9 | 45 | uint8_t decimation_pointer_; |
jimurai | 0:03e8a03052c9 | 46 | uint16_t decimation_buffer_[32]; |
jimurai | 0:03e8a03052c9 | 47 | uint32_t accumulator_; |
jimurai | 0:03e8a03052c9 | 48 | }; |
jimurai | 0:03e8a03052c9 | 49 | #endif |