Sensor sampling library

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?

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