【问题标题】:Error in finding the frequency of an Input square wave signal查找输入方波信号的频率时出错
【发布时间】:2018-07-10 08:11:39
【问题描述】:

有什么方法可以计算数字引脚上输入方波信号的频率?还是我应该完全依赖pulseIn() 函数?

我已经像这样写了我的代码的ISR

ISR(TIMER1_OVF_vect){
  count++;
}
ISR(TIMER1_CAPT_vect){
  value = TCNT1;
  TCNT1 = load;
  }

并尝试在串行监视器上打印值(变量:valueloadvolatile 变量)但它只显示零。我无法弄清楚它出了什么问题。!

程序的声明如下

const uint16_t freqPin = PD5;
const uint16_t load = 0;
volatile unsigned long int count=0;
volatile unsigned int value=0;

void setup()
{
Serial.begin(9600);
DDRD &= ~(1<<freqPin);
TCCR1A = 0;
TCCR1B &= B11111000 | B00000111;
TCNT1 = load;
TIMSK1 |= (1<<ICIE1);
TIMSK1 |= (1<<TOIE1);
TIFR1 |= (1<<TOV1);
sei();
}  

请帮忙。提前致谢

【问题讨论】:

    标签: timer arduino interrupt


    【解决方案1】:

    TCCR1B &amp;= B11111000 | B00000111; 行中,您没有正确配置寄存器。看起来您想配置为 B11111111,但由于您不知道其中的值,它可以是任何值,包括 0,是什么使计时器停止。

    将此行更改为TCCR1B = B11111000 | B00000111;,但请注意,因为使用此配置,您需要一个外部时钟源作为定时器,所以我建议您为最后三个字节使用另一个值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      相关资源
      最近更新 更多