Tôi có một Arduino Nano với 328P và cần tất cả 6 chân PWM.
Vì vậy, tôi đã phải điều chỉnh bộ đếm gộp trước và Chế độ WGM của Timer0.
Bây giờ nó đang ở chế độ PWM đúng pha với tỷ lệ trước là 1.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
Bây giờ tôi cần một phép tính thời gian làm việc cho các thư viện khác, nhưng vì Timer0 có nhiệm vụ đó nên mọi thứ đã không còn hoạt động nữa.
Tôi đã thử điều chỉnh hệ thống dây điện.
// the prescaler is set so that timer0 ticks every 64 clock cycles, and the
// the overflow handler is called every 256 ticks.
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))
đến đây
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(1 * 510))
Nhưng nó giống như tôi đã không thay đổi bất cứ điều gì. (đã thử nghiệm các cài đặt khác đã được thay đổi để nó được biên dịch lại)
Toàn bộ mã:
void setup() {
// Set Timer 0, 1 and 2
// Register A: Output A and B to non-inverted PWM and PWM mode to phase correct.
// Register B: Pre Scaler to 1.
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00);
TCCR0B = _BV(CS00);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
TCCR1B = _BV(CS10);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(8, LOW);
delay(65000);
digitalWrite(8, HIGH);
delay(65000);
}