Skip to content
Snippets Groups Projects
Commit 40522597 authored by Michael DM Dryden's avatar Michael DM Dryden
Browse files

EIS: Add adjustable MCLK generated by XMEGA.

parent 7783c46d
Branches
No related merge requests found
......@@ -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);
......
......@@ -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;
......
......@@ -8,6 +8,9 @@
#include "eis_misc.h"
#include "ds4550.h"
#include "ad5933.h"
#include <tc.h>
#include <ioport.h>
#include <delay.h>
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);
}
}
......@@ -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 */
......@@ -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()){
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment