Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какой таймер лучше для подсчета импульсов
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
IF_P
Измерение аналоговых сигналов производится с использованием ПНЧ. На выходе 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-разр. таймер. wink.gif
=GM=
Цитата(IF_P @ Mar 30 2011, 20:23) *
Вот бы еще один 16-разр. таймер

Ну так, используйте предделитель на 1024 для таймера0. Таймером доделите на 144, получите свои 20 мс.
rx3apf
Цитата(IF_P @ Mar 31 2011, 00:23) *
2. T1 для "ворот" управится за три заправки. А вот с T0 есть проблема. Для подсчета 18 тыс. импульсов нужно 70 циклов таймера. При каждом прерывании получим:
4 цикла на запись в стэк
3 цикла на переход по адресу
3 цикла на завершение текущей команды (макс. CALL 4 цикла).

В результате 10 циклов по 135 nS = 1,35 uS. За это время может приидти 1 импульс ( а может и нет).
В итоге на цикл измерения +-70 импульсов.
......
все же, хотелось узнать ваше мнение. Кто и как поступает в таких случаях. Возможны ли подводные камни?

Я бы использовал T1 для формирования "ворот", причем добавил бы внешнюю логику (триггер и ключик-"И"), чтобы a) с выхода триггера завести на ICP, улучшим тем самым разрешение по частоте; cool.gif триггер + "И" управляют поступлением импульсов на вход T0, который их и считает (прерывания переполнения ~3.5 kHz это совсем немного). Открывание-закрывание "ворот" - по OC1x (а хоть бы и "вручную", все равно, обработав ICP, даже при отклонении длительности "ворот" точность результата не пострадает).

Предполагается считать строго в "воротах", после закрытия потери импульсов допустимы ?
zombi
Цитата(IF_P @ Mar 31 2011, 00:23) *
Вот бы еще один 16-разр. таймер. wink.gif

Ну так и используйте проц с двумя 16-разр. таймерами laughing.gif
IF_P
Цитата(zombi @ Mar 30 2011, 22:56) *
Ну так и используйте проц с двумя 16-разр. таймерами laughing.gif

Так плата уже спаяна.

Цитата(rx3apf @ Mar 30 2011, 22:52) *
Предполагается считать строго в "воротах", после закрытия потери импульсов допустимы ?

Да, конечно, считать только в воротах. За пределами ворот идет переключение канала, холостой цикл и измерение другого канала. Плата изготовлена и добавить логику уже нельзя. А на выходе ПНЧ уже стоит триггер ТМ2 в режиме деления на 2. Оставил со старой схемы на 8051. Там проц иногда пропускал короткие (по длительности) импульсы от ПНЧ. Приходилось формировать меандр. Но тут, в дальнейшем, я планировал триггер выбросить.

А насчет использования ICP буду сейчас думать. А то я что-то не "въехал".

Цитата(=GM= @ Mar 30 2011, 22:43) *
Ну так, используйте предделитель на 1024 для таймера0. Таймером доделите на 144, получите свои 20 мс.

Да, конечно, можно. Я вначале посмотрел на р-р TCCR, что используется либо предделитель, либо внешний вход. Я рассматривал разные варианты с таймерами и упустил из виду, что счетчик импульсов и таймер ворот это разные устройства и в одном из них можно использовать предделитель.
Так и сделаю. Большое спасибо за подсказку. Опыта работы с AVR мало.
=GM=
Цитата(IF_P @ Mar 30 2011, 22:12) *
Большое спасибо за подсказку. Опыта работы с AVR мало

На здоровье.

Не знаю ваших требований к точности, но если использовать метод захвата, получите погрешность 2.5 Гц за 20 мс для 900 кГц входной частоты. Посмотрите здесь, ссылки ведут на электроникс, мне просто лениво было выковыривать их оттуда.
IF_P
Цитата(=GM= @ Mar 31 2011, 15:29) *
На здоровье.

Не знаю ваших требований к точности, но если использовать метод захвата, получите погрешность 2.5 Гц за 20 мс для 900 кГц входной частоты. Посмотрите здесь, ссылки ведут на электроникс, мне просто лениво было выковыривать их оттуда.

Точности никогда не бывает "много". Смотря какой ценой ее получать. Принцип простой - Делай как лучше. Оно все равно получится хуже. А уж если сразу делать кое-как, то получим maniac.gif
Вот сейчас читаю приведенные ссылки. Если есть возможность сделать лучше, будем пробовать.
Если в этом проекте не пригодится, то, возможно. в будущем.
=GM=
Нужна голая аврка, так что в данном случае - бесплатно, мк у вас уже есть.
IF_P
Цитата(=GM= @ Mar 31 2011, 16:25) *
Нужна голая аврка, так что в данном случае - бесплатно, мк у вас уже есть.

В этом посте первая ссылка приводит в оглавление форума!? 05.gif

"Вот тут зачатки теории (начиная с поста #23) и наглядное пособие (пост #43)."

P.S.
Кажется нашел теорию:

http://electronix.ru/forum/index.php?showt...29796&st=15

Цитата(=GM= @ Mar 31 2011, 16:25) *
так что в данном случае - бесплатно.

Время - деньги.
С одной стороны потраченое время, это приобретенные знания.
Но с другой стороны. это возможная потеря денег (заказа). У меня такое было.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.