Честотен брояч на 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 секунда и повтаря измерването
- Ако броят на импулсите е по-малък от хиляда, тогава се извършва допълнително сравнение. В случай, че честотата е по-малка от 10 Hz, циклите се броят над 20 импулса на входа (10 ATmega8A-AU