Я новичок в программировании микроконтроллеров и пытаюсь использовать ШИМ на ATtiny85. Я просмотрел в Интернете различные учебные пособия и мне удалось заставить его работать с приведенным ниже кодом. Моя проблема в том, что я ожидаю, что частота ШИМ будет 8 МГц / 256 = 31,25 кГц, но на самом деле это 3,9 кГц, что предполагает использование значения 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;
}
Я программирую MCU, используя Raspberry Pi с avrdude и avr-gcc в соответствии с этой инструкцией: http://www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/
Любая помощь или предложения будут приняты с благодарностью. Спасибо :)
TCCR0B |= (0<<CS02)|(0<<CS01)|(1<<CS00); //pre-scale factor = 1
не делает то, что вы думаете. Он устанавливает бит CS00, но абсолютно не влияет на биты CS01 и CS02: вы вводите эти значения в регистр (|=
) с помощью операции ИЛИ, который может изменять только 0 на 1, а не наоборот. - person jasonharper   schedule 23.02.2018