From 405225975058d649dd33ac339f8f91f5eaf561ac Mon Sep 17 00:00:00 2001 From: Michael DM Dryden Date: Wed, 26 Apr 2017 16:18:03 -0400 Subject: [PATCH] EIS: Add adjustable MCLK generated by XMEGA. --- src/eis_shield/eis.c | 6 +++--- src/eis_shield/eis.h | 2 +- src/eis_shield/eis_misc.c | 22 ++++++++++++++++++++++ src/eis_shield/eis_misc.h | 3 +++ src/experiment.c | 8 ++++---- 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/eis_shield/eis.c b/src/eis_shield/eis.c index 9850cff..7e43c9a 100644 --- a/src/eis_shield/eis.c +++ b/src/eis_shield/eis.c @@ -40,7 +40,7 @@ void eis_measure_auto(uint32_t start, uint32_t increment, uint16_t n_increments, @param reference Reference connection setting @param result_buffer Buffer to store results */ - + eis_set_mclk(0); ad5933_set_params(start, increment, n_increments, settle_cycles, pga_gain, output_range); eis_set_ref(reference); eis_set_gain(iv_gain); @@ -57,8 +57,8 @@ void eis_measure_auto(uint32_t start, uint32_t increment, uint16_t n_increments, void eis_set_params(uint32_t start, uint32_t increment, uint16_t n_increments, uint16_t settle_cycles, uint8_t pga_gain, uint8_t output_range, uint8_t iv_gain, uint16_t attenuation, uint16_t offset, - uint8_t reference){ - + uint8_t reference, uint16_t mclk_div2){ + eis_set_mclk(mclk_div2); ad5933_set_params(start, increment, n_increments, settle_cycles, pga_gain, output_range); eis_set_ref(reference); eis_set_gain(iv_gain); diff --git a/src/eis_shield/eis.h b/src/eis_shield/eis.h index ddd717a..ff7b9af 100644 --- a/src/eis_shield/eis.h +++ b/src/eis_shield/eis.h @@ -25,7 +25,7 @@ void eis_measure_auto(uint32_t start, uint32_t increment, uint16_t n_increments, void eis_set_params(uint32_t start, uint32_t increment, uint16_t n_increments, uint16_t settle_cycles, uint8_t pga_gain, uint8_t output_range, uint8_t iv_gain, uint16_t attenuation, uint16_t offset, - uint8_t reference); + uint8_t reference, uint16_t mclk_div2); cint16_t eis_measure_one(void); extern uint8_t eis_status; diff --git a/src/eis_shield/eis_misc.c b/src/eis_shield/eis_misc.c index 419e2a9..8812c57 100644 --- a/src/eis_shield/eis_misc.c +++ b/src/eis_shield/eis_misc.c @@ -8,6 +8,9 @@ #include "eis_misc.h" #include "ds4550.h" +#include "ad5933.h" +#include +#include #include void eis_set_gain(uint8_t gain){ @@ -93,3 +96,22 @@ void eis_set_ref(uint8_t ref){ return; } + +void eis_set_mclk(uint16_t div_2){ + /** + * Set EIS mclk frequency. Send 0 to reset to internal MCLK (16.776 MHz) + * + * @param div_2 half of the desired frequency divider (f = 1/(2*div_2)) + */ + if (div_2 == 0) + ad5933_set_internal_mclk(1); + else { + ioport_set_pin_dir(IOPORT_CREATE_PIN(PORTC,2), IOPORT_DIR_OUTPUT); + tc_enable(&TCC0); + tc_set_wgm(&TCC0, TC_WG_FRQ); + tc_write_cc(&TCC0, TC_CCA, div_2-1); + tc_enable_cc_channels(&TCC0,TC_CCCEN); + tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc); + ad5933_set_internal_mclk(0); + } +} diff --git a/src/eis_shield/eis_misc.h b/src/eis_shield/eis_misc.h index 00be979..919a376 100644 --- a/src/eis_shield/eis_misc.h +++ b/src/eis_shield/eis_misc.h @@ -25,7 +25,10 @@ #define EIS_REF_R2 2 #define EIS_REF_PARALLEL 3 +#define EIS_MCLK_INT 16776000UL + void eis_set_gain(uint8_t gain); void eis_set_ref(uint8_t ref); +void eis_set_mclk(uint16_t div_2); #endif /* eis_misc_h */ diff --git a/src/experiment.c b/src/experiment.c index 5c1b11b..e147ca7 100644 --- a/src/experiment.c +++ b/src/experiment.c @@ -118,11 +118,11 @@ void experiment_handler(char command){ case 'I': { uint32_t start_f, increment_f; - uint16_t n_increments, settle_cycles, attenuation, offset; + uint16_t n_increments, settle_cycles, attenuation, offset, mclk_div2; uint8_t pga_gain, output_range, iv_gain, reference; - scanf("%lu%lu%u%u%hhu%hhu%hhu%u%u%hhu", &start_f, &increment_f, &n_increments, &settle_cycles, - &pga_gain, &output_range, &iv_gain, &attenuation, &offset, &reference); + scanf("%lu%lu%u%u%hhu%hhu%hhu%u%u%hhu%u", &start_f, &increment_f, &n_increments, &settle_cycles, + &pga_gain, &output_range, &iv_gain, &attenuation, &offset, &reference, &mclk_div2); struct result { @@ -134,7 +134,7 @@ void experiment_handler(char command){ pot_exp_start(); //Disconnect DStat from shield eis_set_params(start_f, increment_f, n_increments-1, settle_cycles, pga_gain, output_range, - iv_gain, attenuation, offset, reference); + iv_gain, attenuation, offset, reference, mclk_div2); while (eis_status != EIS_STATUS_DONE){ if (udi_cdc_is_rx_ready()){ -- GitLab