2

我是编程 MCU 的新手,正在尝试在 ATtiny85 上使用 PWM。我在网上四处寻找各种教程,并设法让它与下面的代码一起工作。我的问题是我希望 PWM 频率为 8MHz/256 = 31.25kHz,但实际上是 3.9kHz,这表明正在使用 8 的预分频器值。我查看了数据表,但仍然无法弄清楚。

#define F_CPU 8000000
#include <avr/io.h>

int main(void)
{
  //Table 11-3 Compare Output Mode, Fast PWM mode
  //Table 11-5 Waveform Generation Mode Bit Description
  //COM0A0 - non-inverting
  TCCR0A |= (0<<WGM02)|(1<<WGM01)|(1<<WGM00)|(1<<COM0A1);
  //Table 11-6 Clock Select Bit Description
  TCCR0B |= (0<<CS02)|(0<<CS01)|(1<<CS00); //pre-scale factor = 1

  OCR0A=128; // 128/256 = 0.5 duty cycle

  //make PWM pin output
  DDRB |= (1<<DDB0);

  while(1){}

  return 0;
}

我正在使用带有 avrdude 和 avr-gcc 的 Raspberry Pi 对 MCU 进行编程,按照以下说明: http: //www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/

任何帮助或建议将不胜感激。谢谢 :)

4

1 回答 1

2

我发现默认情况下,ATtiny85 上的保险丝设置为将 8MHz 时钟除以 8,这说明了我遇到的明显的预缩放因子 8。我根据这个保险丝计算器更换了保险丝,它工作得很好。奇怪的是,我读过的教程都没有提到这一点,但希望我的努力可以帮助遇到同样问题的其他人。

于 2018-02-24T11:13:52.773 回答