Схема частотомера на микроконтроллере ATtiny2313
![Схема частотомера](freq_counter_schematic.png)
Описание схемы:
* ATtiny2313: Микроконтроллер отвечает за подсчет импульсов и отображение частоты на семисегментном индикаторе.
* Кварц 8 МГц: Обеспечивает тактовый сигнал для микроконтроллера.
* Конденсаторы C1 и C2: Стабилизируют питание микроконтроллера.
* Резистор R1: Защищает микроконтроллер от статического электричества.
* Транзистор T1 (BC548): Усилитель, который подключает импульсы с измеряемого источника к входу микроконтроллера.
* Резистор R2: Ограничивает ток через транзистор.
* Семисегментный индикатор: Отображает измеренную частоту.
* Резисторы R3-R9: Управляющие резисторы для семисегментного индикатора.
Код программы для микроконтроллера:
«`c
include
include
// Настройка портов и прерываний
define F_CPU 8000000UL
define DIVISOR 63
define OVERFLOW_COUNT (F_CPU / DIVISOR)
volatile unsigned long overflow_count = 0;
volatile unsigned long timer_count = 0;
void setup_timer() {
TCCR1B = (1 << CS10) | (1 << WGM12); // Настройка таймера 1 для режима CTC
OCR1A = OVERFLOW_COUNT; // Значение сравнения для переполнения
TIMSK1 |= (1 << OCIE1A); // Включение прерывания по совпадению сравнения
}
int main() {
DDRB = 0xFF; // Настройка PORTB как выход (семисегментный индикатор)
setup_timer();
sei(); // Включение прерываний
while (1) {
// Преобразовать количество переполнений и подсчет тиков в частоту
unsigned long frequency = (overflow_count * OVERFLOW_COUNT + timer_count) * DIVISOR;
// Отобразить частоту на семисегментном индикаторе
display_frequency(frequency);
}
}
ISR(TIMER1_COMPA_vect) {
overflow_count++;
}
void display_frequency(unsigned long frequency) {
// Разделить частоту на цифры (0-9)
unsigned char digits[4];
for (int i = 0; i < 4; i++) {
digits[i] = frequency % 10;
frequency /= 10;
}
// Отобразить цифры на семисегментном индикаторе
for (int i = 0; i < 4; i++) {
PORTB = digits[i];
}
}
```
Использование:
1. Подайте импульсы с измеряемого источника на вход "Input".
2. Микроконтроллер подсчитает импульсы и отобразит измеренную частоту на семисегментном индикаторе.