Sensor sampling library
Sensors.h@0:eea8d19a7f6b, 2015-02-23 (annotated)
- Committer:
- Joseph_Penikis
- Date:
- Mon Feb 23 18:03:29 2015 +0000
- Revision:
- 0:eea8d19a7f6b
- Child:
- 1:f9f0b92a9d7c
Merged Sensor Library into repo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Joseph_Penikis | 0:eea8d19a7f6b | 1 | #ifndef SENSORS_H |
Joseph_Penikis | 0:eea8d19a7f6b | 2 | #define SENSORS_H |
Joseph_Penikis | 0:eea8d19a7f6b | 3 | |
Joseph_Penikis | 0:eea8d19a7f6b | 4 | #define CHANNEL_0 0x00 |
Joseph_Penikis | 0:eea8d19a7f6b | 5 | #define CHANNEL_1 0x01 |
Joseph_Penikis | 0:eea8d19a7f6b | 6 | #define CHANNEL_2 0x02 |
Joseph_Penikis | 0:eea8d19a7f6b | 7 | #define CHANNEL_3 0x03 |
Joseph_Penikis | 0:eea8d19a7f6b | 8 | |
Joseph_Penikis | 0:eea8d19a7f6b | 9 | #define CPU_CLOCK 48000000 |
Joseph_Penikis | 0:eea8d19a7f6b | 10 | |
Joseph_Penikis | 0:eea8d19a7f6b | 11 | /** |
Joseph_Penikis | 0:eea8d19a7f6b | 12 | * Pulses sets how many edges to detect before returning a time, max of 2^16, affectively refers to sample time |
Joseph_Penikis | 0:eea8d19a7f6b | 13 | * Glitch filter recognizes change on input pin after 2^n rising clock edges |
Joseph_Penikis | 0:eea8d19a7f6b | 14 | * Setting glitch filter to zero disables glitch filter |
Joseph_Penikis | 0:eea8d19a7f6b | 15 | * TODO: DETERMINE EXACT FUNCTIONALITY AND USAFULNESS OF FUNCTION |
Joseph_Penikis | 0:eea8d19a7f6b | 16 | */ |
Joseph_Penikis | 0:eea8d19a7f6b | 17 | extern "C" void setup_counter(int glitch_filter); |
Joseph_Penikis | 0:eea8d19a7f6b | 18 | |
Joseph_Penikis | 0:eea8d19a7f6b | 19 | /** |
Joseph_Penikis | 0:eea8d19a7f6b | 20 | * Measure the period observed on the sensor indicated by "sensor" |
Joseph_Penikis | 0:eea8d19a7f6b | 21 | * TO VERIFY (KL25Z): |
Joseph_Penikis | 0:eea8d19a7f6b | 22 | * PTC1 -> Pulse Counter Input 0 (00) |
Joseph_Penikis | 0:eea8d19a7f6b | 23 | * PTC2 -> Pulse Counter Input 1 (01) |
Joseph_Penikis | 0:eea8d19a7f6b | 24 | * PTC3 -> Pulse Counter Input 2 (10) |
Joseph_Penikis | 0:eea8d19a7f6b | 25 | * PTC4 -> Pulse Counter Input 3 (11) |
Joseph_Penikis | 0:eea8d19a7f6b | 26 | */ |
Joseph_Penikis | 0:eea8d19a7f6b | 27 | extern "C" int measure_clock_cycles(char sensor, int samples); |
Joseph_Penikis | 0:eea8d19a7f6b | 28 | |
Joseph_Penikis | 0:eea8d19a7f6b | 29 | float measure_frequency(char sensor, int samples) |
Joseph_Penikis | 0:eea8d19a7f6b | 30 | { |
Joseph_Penikis | 0:eea8d19a7f6b | 31 | // Divide the number of cpu clock cycles by the number of measured periods of the measured waveform to |
Joseph_Penikis | 0:eea8d19a7f6b | 32 | // get the number of clock cycles per period |
Joseph_Penikis | 0:eea8d19a7f6b | 33 | int clock_cycles = measure_clock_cycles(sensor, samples) / samples; |
Joseph_Penikis | 0:eea8d19a7f6b | 34 | |
Joseph_Penikis | 0:eea8d19a7f6b | 35 | // Divide CPU_CLOCK by the number of clock cycles to get the period |
Joseph_Penikis | 0:eea8d19a7f6b | 36 | return (CPU_CLOCK / (float)clock_cycles); |
Joseph_Penikis | 0:eea8d19a7f6b | 37 | } |
Joseph_Penikis | 0:eea8d19a7f6b | 38 | |
Joseph_Penikis | 0:eea8d19a7f6b | 39 | #endif |