Задача
Подсчитать число импульсов на входе за одну секунду.
Микроконтроллер: ATmega8, кварц 4 МГц. Среда: Atmel Studio / avra (или avra / Atmel Studio). Как настроить среду и прошить контроллер — в статье программирование AVR.
Что понадобится
- ATmega8
- кварц 8 МГц + 2×22 пФ
- 8 светодиодов + резисторы
- источник импульсов
Схема подключения
| Вывод | Подключение |
|---|---|
| PD4 / T0 | вход импульсов (включена внутренняя подтяжка) |
| PB0…PB7 | индикация результата |
Алгоритм
- Выбрать битами
CSтактирование таймера от внешнего вывода. - Обнулить счётчик — открыть окно измерения.
- Выдержать ровно одну секунду.
- Прочитать
TCNT0— это число импульсов, то есть частота в герцах.
Листинг на ассемблере
Код проверен ассемблером и собирается без ошибок. Скачать: a23.asm · a23.hex (готовая прошивка).
;=======================================================
; Проект 23. Счётчик импульсов (основа частотомера)
; ATmega8, 8 МГц. Вход импульсов — T0 (PD4)
; T0 считает внешние импульсы, результат за 1 с — на PB0..PB7
;=======================================================
.include "m8def.inc"
.def temp = r16
.def d1 = r17
.def d2 = r18
.def d3 = r19
.cseg
.org 0x0000
rjmp RESET
RESET:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
ldi temp, 0xFF
out DDRB, temp ; индикация
cbi DDRD, PD4 ; вход T0
sbi PORTD, PD4 ; подтяжка
ldi temp, (1<<CS02)|(1<<CS01) ; тактирование от вывода T0, по спаду
out TCCR0, temp
MAIN:
clr temp
out TCNT0, temp ; открываем окно счёта
rcall DELAY1S ; измерительный интервал
in temp, TCNT0 ; число импульсов за секунду
out PORTB, temp
rjmp MAIN
DELAY1S:
ldi d3, 41
C3: ldi d2, 255
C2: ldi d1, 255
C1: dec d1
brne C1
dec d2
brne C2
dec d3
brne C3
ret
Пояснения
- Внешний тактовый вход опрашивается синхронно с системным тактом, поэтому измеряемая частота не должна превышать примерно четверть тактовой.
- Восьмиразрядный счётчик считает до 255; для больших частот берут шестнадцатиразрядный T1 или считают переполнения в прерывании.
- Точность измерения целиком зависит от точности секундного окна — здесь напрямую работает стабильность кварца.
Что дальше
Разобравшись с этим проектом, переходите к следующему в разделе проекты на PIC. Справочник по архитектуре и периферии контроллеров — на странице микроконтроллеры AVR.