Цитата
А как определялся сдвиг фаз в вашей конструкции?
Напишу сразу, как должно быть (сейчас немного через (_*_), но принцип тот же). Да, и имейте в виду, там весьма сильно используются особенности периферии AVR.
0. Все датчики подключены на порт C. Первый на PC0/PC1, второй на PC2/PC3, третий на PC4/PC5.
1. Тактовая частота проца 10.24МГц.
2. Таймер 1 считает от 0 до 255 (используется режим CTC), итого частота переполнений 40кГц, равная резонансной частоте датчиков.
3. Программно синхронно с таймером дрыгаем ножками текущего передающего датчика, например, PC0/PC1. Т.е. делаем PC0=0,PC1=1 и через 128 тактов PC0=1,PC1=0 и через 128 тактов повторяем (опять же точно 40кГц, причем, синхронно с насчетом таймера).
4. Мультиплексор АЦП подключен к аналоговому компаратору, вторая ножка компаратора на земле.
5. Соответственно, одна из ножек текущего приемного датчика включена на ввод и через мультиплексор АЦП попадает на компаратор, вторая - включена на вывод и на земле.
6. Выход компаратора включен на Input Capture таймера (установкой бита ACSR_ACIC)
7. В коде, который дергает ножками, проверяется флаг наличия ICP, и если он установлен, то значение регистра ICR прибавляется к интегратору (с учетом возможной смены знака).
8. Все это дело крутится в цикле измерения для накопления. Я делал 1024 раза. При этом, предварительно выполняется 4000 холостых циклов (для того, чтобы полностью закончился переходный процесс в приемном и передающем датчике).
Тонкости заключаются в работе со знаком при накоплении. Т.к. изменение значения ICR из 0 в 255 - это на самом деле вычитание 1, а не прибавление 255. Именно для удобства выбрана тактовая 10.24 (но начиналось все с тактовой 10МГц и досчетом таймера до 250, вот там бубен некислый).