【问题标题】:Is it possible to get 2 seconds delay with timer registers in Arduino?Arduino中的定时器寄存器可以延迟2秒吗?
【发布时间】:2018-04-25 16:25:40
【问题描述】:

我现在正在做一个简单的项目。我需要编写一个代码,在定时器和 ADC 寄存器的帮助下每秒钟改变电位器的值。我已经使用 Timer0 来完成这项任务,一切都很好,但是串行监视器中的输出变化如此之快,而不是 2 秒。为什么会这样?

我的代码:

void setup()
{
  TCCR0A = 0; //reset the register
  TCCR0B = 0; //reset the register
  OCR0A = 0;  //reset  the register

  TCCR0A = (1 << COM0A1)|(0 << WGM01) | ( 0 << WGM00);
  TCCR0B = (1 << CS02)  |(1 << CS00); //1024 prescaler 

  ADCSRA = (1 << ADEN) | ( 1 << ADSC); 
  //enabling the ADC with shifting ADEN by 1
  ADMUX  = (1 << REFS0)| (1<<MUX0) | (0 << MUX1) | (1 << MUX2);
  //shifting REFS0 by 1 means setting it as AVCC
  //shifting MUX0 and MUX2 by 1 means setting A5 pin on

  Serial.begin(9600);

}

void loop() {

  int highval = ADCH; //Data Register High
  int lowwal = ADCL; //Data Register Low
  int sensval = analogRead(A5);

  uint8_t answer; 
  answer = ((highval) * 256 + lowwal) * 5 / 1023; 

  if(TCNT0 == 0xF1) {
        Serial.println(answer);
  }
  if(TCNT0 == 0x00) {
        Serial.println(answer);
  }

}

void timdel() {

  TCNT0 = 0xF1;     // 2 seconds 
}

【问题讨论】:

  • timdel() 应该做什么?它永远不会被调用。
  • TCNT0 等于 2 秒,但是当我在 if 语句中调用它时它仍然不起作用。

标签: timer arduino adc


【解决方案1】:

Arduinos 通常在 16MHz cpu 时钟上运行。您已将预分频器设置为 1024 和 8 位 Timer/Counter0。所以它会溢出每个1/(16000000/1024/256)16.384ms

但是您可以使用 16bit T/C 1。您可以获得超过 4 秒的时间。但是我会使用 CTC 模式,它是相应的标志(没有中断)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多