zoom/firmware/calibrate.h
2013-06-12 18:40:40 -04:00

43 lines
1.1 KiB
C

#ifndef CALIBRATE_H
#define CALIBRATE_H
#define ADC_CLAMP_MIN 256
#define ADC_CLAMP_MAX 1792
#define OVERSAMPLE_COUNT 256
#define DAC_MIN DAC_LOW
#define DAC_MAX DAC_HIGH
#define SEEK_MAX_STEPS 1000
#define SEEK_FUZZ_ADC 100
#define SEEK_FUZZ_DAC (1+((DAC_RANGE * 5) / 65536))
#define CALIBRATE_ADC_ZERO 1024
#define CALIBRATE_ADC_LOW 512
#define CALIBRATE_ADC_HIGH 1536
/* Initialize. Assume some relatively-safe scaling if no calibration is run */
void calibrate_init(void);
/* Given the current DAC and ADC values d1 and a1,
compute a new DAC value d2 to give the desired ADC value a2 */
uint16_t adc_to_dac(uint16_t d1, int16_t a1, int16_t a2, float scale);
/* Calculate a new scale factor given two DAC and ADC points */
float calculate_scale(uint16_t d1, float a1, uint16_t d2, float a2);
/* Seek with the DAC to reach a specific ADC value,
using current scaling as a starting point. */
uint16_t seek(uint16_t starting_dac, int16_t desired_adc);
/* Perform calibration */
uint16_t do_calibrate(void);
/* Oversample to get a nice ADC value */
float oversample(uint16_t dac);
extern float g_scale; /* delta(DAC) / delta(ADC) */
#endif