gpt4 book ai didi

c - ATMEGA168A - 使用定时器

转载 作者:行者123 更新时间:2023-11-30 17:06:44 25 4
gpt4 key购买 nike

我试图了解如何在我的 ATMEGA168A 上使用定时器,但是我有 (link) 的示例似乎不起作用,因为它总是返回 0。

我的想法是做一个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 处于高电平的时间长度?

最佳答案

要测量 PD2 处于高电平的时间,请编写一些代码来执行此操作,编译,将其写入微 Controller 并打开它。

未经测试,试试这个:

#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 (after Initiate)
while(!bit_is_clear(PIND, PD2));
//Waiting until echo goes high (Echo back starts)
while(bit_is_clear(PIND, PD2));
TCNT1 = 0;
//Waiting until echo goes low (Echo back ends)
while(!bit_is_clear(PIND, PD2));
long timer_value = TCNT1;

//Calculating and returning the distance
long distance = timer_value / 58.82;
return distance;
}

关于c - ATMEGA168A - 使用定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34471193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com