Честотен брояч на ATmega8 за честотен диапазон 1Hz

В тази статия бих искал да ви запозная с един "домашен уикенд" - честотен брояч на вече "легендарния" микроконтролер ATmega8. Това устройство не е позиционирано като "най-доброто" по отношение на параметрите, а схемата не претендира за оригиналност. Единствената му разлика от повечето дизайни, които могат да бъдат намерени в мрежата, е повишената точност в нискочестотния диапазон (1 - 1000 Hz). Това се постига чрез различен подход при измерване на LF и MF с HF. При измерване на ниски честоти броят на циклите на микроконтролера се отчита за определен брой импулси на входа на устройството. И при измерване на средни и високи честоти традиционно се взема предвид броят на импулсите за определен период от време.

Характеристики на честотомера:

  • Честотен диапазон с грешка на измерване от +/- 1Hz: 1000Hz - 1MHz (с грешка от +/- 20-200Hz, [> честота, > грешка] е възможно да се измерват честоти до 10MHz без прескалер).
  • Захранващо напрежение: 5V
  • Консумация на ток: 1kHz).
  • Време на показване: 3s

брояч

Проектът беше изграден и тестван вProteus и след това "на живо". Компилаторът avr-gcc (известен още катоWinAVR под Windows) беше използван за създаване на фърмуера.

Основата на веригата, както вече беше споменато, е микроконтролерът ATmega8. Данните се показват на седемсегментен LED (по избор) индикатор за 8 запознанства с общ анод. В моя случай беше използван индикатор с малък размер, съответно, и печатната платка беше проектирана в малки размери. На диаграмата, както можете да видите, има контакти за свързване на бутона (J7, J8), но това е "за бъдещето" и в момента те не се използват. 16 MHz кварцов резонатор беше използван за часовник на микроконтролера.LED D1 показва действията на уреда - по време на измервателния цикъл той се включва. Измерването продължава 1 секунда. След пауза от 3 секунди и след това ново измерване и т.н.

За индикатори с общ катод е необходимо да смените транзисторните ключове, както следва:

честотен

Освен това ще трябва да настроите програмата.

Заглавният файл "display7seg_lib.h " се нуждае от този ред:

И след това прекомпилирайте проекта.

Между другото, направих библиотека за седемсегментен индикатор не само за този проект и може би ще ви бъде полезен, тъй като има няколко полезни функции (например извеждане на низ).

За измерване на честотата, както беше споменато по-горе, устройството използва два метода: броене на циклите на микроконтролера за броя на импулсите и броене на импулсите, пристигащи на входа на устройството за определено време.

Редът на измерване е както следва:

  1. Честотата се измерва чрез преброяване на импулсите на удар
  2. Ако броят на импулсите е повече от хиляда (честотата е повече от един килохерц), тогава резултатът се показва и устройството изчаква 1 секунда и повтаря измерването
  3. Ако броят на импулсите е по-малък от хиляда, тогава се извършва допълнително сравнение. В случай, че честотата е по-малка от 10 Hz, циклите се броят над 20 импулса на входа (10 ATmega8A-AU