Измерение аналоговых сигналов производится с использованием ПНЧ. На выходе Fmax=900 kHz.
CPU - ATmega8535, кварц 7,3728 MHz.
Два варианта.
1. Использовать 16 разр T1 для подсчета импульсов, а 8 разр. T0 для формирования "ворот".
T1 вполне хватает без перезагрузок, а вот для T0 нужно ~576 перезагрузок на цикл измермения (20 mS),
т.е. каждые ~35 uS.
2. T1 для "ворот" управится за три заправки. А вот с T0 есть проблема. Для подсчета 18 тыс. импульсов нужно 70 циклов таймера. При каждом прерывании получим:
4 цикла на запись в стэк
3 цикла на переход по адресу
3 цикла на завершение текущей команды (макс. CALL 4 цикла).
В результате 10 циклов по 135 nS = 1,35 uS. За это время может приидти 1 импульс ( а может и нет).
В итоге на цикл измерения +-70 импульсов.
Многовато получается.
При работе с 8051 таких проблем не возникало. Два 16-разр. таймера без перезагрузок справлялись и со счетом и с воротами, даже при макс. частоте 24 MHz.
Я склоняюсь к варианту 1, т.к. нет потери данных. Но не знаю как повлияет частое прерывание таймера.
Пока на плате стоит ПНЧ с 8 кан. коммутатором, 16-разр. АЦП (SPI) с 8 кан. коммутатором, связь с другим CPU по шине I2C. Но планируется двойное увеличение каналов измерения.
Выполняется измерение, фильтрация, усреднение, передача на другой CPU.
Работы, вроде, не так много для такого CPU. Интерфейсы SPI и I2C аппаратные и на их работу не должно повлиять.
Но. все же, хотелось узнать ваше мнение. Кто и как поступает в таких случаях. Возможны ли подводные камни?
Вот бы еще один 16-разр. таймер.
Сообщение отредактировал IF_P - Mar 30 2011, 20:25