Я пытаюсь понять, как использовать таймеры с моим ATMEGA168A, однако пример, который у меня есть (link), похоже, не работает, так как он возвращает 0 все время.ATMEGA168A - Использование таймера
Моя идея - сделать работу ультразвукового датчика HC-SR04 (link).
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
long measure(){
//Setting up the timer
TCCR1B |= (1 << CS12) | (1 << CS11) | (1 << CS10);
//Setting trigger as output
DDRD |= (1 << PD1);
//Setting echo as input
PORTD |= (1 << PD2);
//Triggering the hardware
PORTD ^= (1 << PD1);
_delay_us(10);
PORTD ^= (1 << PD1);
//Waiting until echo goes low
TCNT1 = 0;
while(bit_is_clear(PIND, PD2));
long timer_value = TCNT1;
//Calculating and returning the distance
long distance = timer_value/58.82;
return distance;
}
Как я могу успешно измерить время, в течение которого PD2 был высоким?
Каким образом это, кажется, не работает? Сбой? Неправильное время? Не начинается? Ловит огонь? –
Вы уверены, что для таймера установлен тактовый сигнал? – MikeCAT