FreeCalypso > hg > fc-rfcal-tools
diff autocal/vcxomain.c @ 26:a2e4da9d85cc
fc-rfcal-vcxo: search for zero crossing implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 22 May 2017 22:27:22 +0000 |
parents | 0b6881281d86 |
children | 841dd03d5c85 |
line wrap: on
line diff
--- a/autocal/vcxomain.c Mon May 22 22:09:59 2017 +0000 +++ b/autocal/vcxomain.c Mon May 22 22:27:22 2017 +0000 @@ -16,7 +16,8 @@ static float freq_max_neg, freq_max_pos; static float lin_a, lin_b, lin_a2, lin_b2; -static int center_search_start; +static int zero_search_dac1, zero_search_dac2, zero_search_incr; +static float zero_search_freq1, zero_search_freq2; prepare_rf_test_system() { @@ -50,11 +51,25 @@ freq_max_pos = vcxo_freq_meas(2048, "max-pos"); lin_a = (freq_max_pos - freq_max_neg) / 4096.0f; lin_b = freq_max_pos - lin_a * 2048.0f; - center_search_start = -lin_b / lin_a; - printf("Center search start DAC value: %d\n", center_search_start); - vcxo_freq_meas(center_search_start, "center"); - vcxo_freq_meas(center_search_start - 100, "center-delta"); - vcxo_freq_meas(center_search_start + 100, "center+delta"); + zero_search_dac1 = -lin_b / lin_a; + zero_search_freq1 = vcxo_freq_meas(zero_search_dac1, "zero-search"); + + /* search for zero crossing */ + if (zero_search_freq1 < 0) + zero_search_incr = 100; + else + zero_search_incr = -100; + for (;;) { + zero_search_dac2 = zero_search_dac1 + zero_search_incr; + zero_search_freq2 = vcxo_freq_meas(zero_search_dac2, + "zero-search"); + if (zero_search_incr > 0 && zero_search_freq2 >= 0) + break; + if (zero_search_incr < 0 && zero_search_freq2 < 0) + break; + zero_search_dac1 = zero_search_dac2; + zero_search_freq1 = zero_search_freq2; + } printf("Stopping RF Tx on the DUT\n"); do_rfe(STOP_ALL);