# PWM with the Arduino Mega

**URL:** <https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562>\
**Category:** General Guidance\
**Created:** [January 5, 2016, 12:47pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562 "2016-01-05T12:47:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_rian](https://avatars.discourse-cdn.com/v4/letter/_/77aa72/32.png) [@\_rian](https://forum.arduino.cc/u/_rian)\
**Post date:** [January 5, 2016, 12:47pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562/1 "2016-01-05T12:47:18Z")

</div>

Hi Guys,

I need to write some PWM signals with higher resolution than the built-in functions allow, so I tried to use the 16-bit timers of the ATMega to generate the signal, but I dont get an output.

I used Timer3 in Mode 8 (Phase and frequency correct PWM) and Comparator Mode 3. With a counting frequency of clk/8 I use 10000 as TOP to get a PWM frequency of 100Hz and I set OCR3A to 8500 to get a duty cycle of 1500µs.

Does anyone see, why this doesn't work?

```cpp
void setup() {
  pinMode(2,OUTPUT);

  ICR3 = 10000;
  TCCR3A = (1<<COM3A1)|(1<<COM3A0);
  TCCR3B = (1<<WGM33)|(1<<CS31);
  OCR3A = 8500;
  TCNT3 = 0;
  sei();
}

void loop() {
  
}

```

Thanks for replies

---

<div class="post-metadata">

**Author:** ![GoForSmoke](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/goforsmoke/32/1127097_2.png) [@GoForSmoke](https://forum.arduino.cc/u/GoForSmoke)\
**Post date:** [January 5, 2016, 1:15pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562/2 "2016-01-05T13:15:39Z")

</div>

[http://playground.arduino.cc/Code/PwmFrequency](http://playground.arduino.cc/Code/PwmFrequency)

---

<div class="post-metadata">

**Author:** ![cattledog](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cattledog/32/217816_2.png) [@cattledog](https://forum.arduino.cc/u/cattledog)\
**Post date:** [January 5, 2016, 4:38pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562/3 "2016-01-05T16:38:59Z")

</div>

```cpp
 pinMode(2,OUTPUT);

```

```cpp
TCCR3A = (1<<COM3A1)|(1<<COM3A0);

```

You have set up for output on channel 3A and and compare OCR3A. 3A is output on Digital pin 5

Pin2 is OC3B. You need to change either the setup to match pin 2 or set pin5

```cpp
 pinMode(5,OUTPUT)

```

---

<div class="post-metadata">

**Author:** ![\_rian](https://avatars.discourse-cdn.com/v4/letter/_/77aa72/32.png) [@\_rian](https://forum.arduino.cc/u/_rian)\
**Post date:** [January 9, 2016, 1:36pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562/4 "2016-01-09T13:36:22Z")

</div>

Yup, that was it. Classical mistake 🙂

Thanks

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 5, 2021, 5:42pm UTC](https://forum.arduino.cc/t/pwm-with-the-arduino-mega/356562/5 "2021-05-05T17:42:48Z")

</div>

Closed on May 5, 2021, 5:42pm UTC


