Страница 1 из 1

нужна помощь для простого низкоскоростного частотомера

Добавлено: Пт янв 07, 2011 15:39:14
zvyagaaa
Сразу хочу предупредить, что в программировании МК - я полный ноль (надеюсь, что только пока), всю обучалку я сделал на ATtiny, но мозгов для самостоятельной работы пока нету. Поэтому и прошу помощи.
В общем, хочу сделать что-то вроде частотомера/тахометра низкочастотного, т.е. интересуют частоты импульсов до 50Гц. Что я имею в виду. На входе мы имеем на двух каналах импульсы с амплитудой около 5 В, и частотой 0-50Гц. Нужно по достижению определенных частот зажигать в определенном порядке по три диода на канал. К примеру, достигла частота от 1 до 10Гц - зажечь один светодиод, от 10 до 15 Гц - другой, от 15 до 23 - первый и второй диод... ну и так далее.
Примерно я понимаю, как сделать такой алгоритм, и на дельфи я аналог писал - там просто:
я завел счетчик в который пишу когда импульс пришел - и по таймеру я сравниваю с теми числами, которые нас интересуют, зажигаю нужные светики и обнуляю счетчик.

Код: Выделить всё

case lcounter of
    1 .. 10:
      begin
        lColor := 1
     end;
    10 .. 15:
      begin
        lColor := 2
      end;
    15 .. 23:
      begin
        lColor := 1+2;
      end;
Здесь я так понимаю, что надо делать то же самое. В наличии есть атмеговский микроконтроллер 90S2313. Помогите реализовать алгоритм.

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Пт янв 07, 2011 15:57:36
Pavel V.
Есть несколько методов измерения частоты. Вот два из них:

1. Используем таймер в режиме захвата, в этом случае в прерывании по входящему импульсу считывается значение таймера - по разности двух соседних величин можно вычислить частоту.

2. Подсчитываем кол-во импульсов за единицу времени. Для этого можно использовать внешнее прерывание.

Поищи в сети проекты разных тахометров - это как раз то что нужно.

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Пт янв 07, 2011 16:02:22
zvyagaaa
я думаю, что второй вариант мне больше пойдет, в сети я видел реализации, но сложные для понимания, вот если бы кто объяснил бы с примерами кода, вот было бы классно.

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Пт янв 07, 2011 16:07:54
SERJ
zvyagaaa писал(а):я думаю, что второй вариант мне больше пойдет
Для измерения очень низких частот, как в Вашем случае удобнее измерять период, а не частоту, т.е. использовать первый вариант.
При втором варианте будет очень большое время измерения в Вашем случае.
Второй вариант удобен только для измерения довольно высоких частот.

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Пт янв 07, 2011 16:23:56
zvyagaaa
Для измерения очень низких частот, как в Вашем случае удобнее измерять период, а не частоту, т.е. использовать первый вариант.
почему? ведь второй вариант как работает - если мы поставим скажем период таймера = 1 сек, то количество тиков за эту секунду и будет искомая частота, а как измерять период? Я так понимаю, что мы должны тогда считать например 100 тиков, и замерять время, за которое они насчитаются, потом будет операция деления, так?

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Сб янв 08, 2011 09:31:23
zvyagaaa
Коты, профессионалы, ну помогите начать. Ну нашел я тахометр на аттини - но когда смотрю на исходник целый - то пока что не пойму откуда, что и куда, выручайте. Сердцем чую, что задача для соображающих плёвая.

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Сб янв 08, 2011 10:43:48
akl
Здравствуйте. Может это подойдет.
http://radiokot.ru/forum/viewtopic.php?p=193610#p193610

Re: нужна помощь для простого низкоскоростного частотомера

Добавлено: Сб янв 08, 2011 10:55:57
Pavel V.
Я уже давно с AVR не работал, поэтому ничего конкретного подсказать не могу.

Общий алгоритм такой:

1. Настраиваем таймер таким образом, чтобы он переполнялся примерно за 1 с (вроде бы есть у АВРов 16-битный таймер?). Это будет соответствовать минимальной измеряемой частоте 1 Гц (можно и расширить при необходимости, обрабатывая переполнение таймера и инкрементируя глобальную переменную).
2. Включаем прерывание при появлении фронта импульса на ножке таймера.
3. В прерывании считываем значение таймера и вычисляем разность с результатом предыдущего захвата.
4. Вычисляем частоту в зависимости от настроек таймера из п.1.

За конкретными примерами надо к местным AVR-специалистам обращаться, например, к ARV.