
This means that TCA is running at 250kHz, for the default system clock of 16MHz. CTRLA = (TCA_SINGLE_ CLKSEL_DIV64_gc) | (TCA_SINGLE_ENABLE_bm) The Arduino library configures the TCA CTRLA “CLKSEL” bits to /64 in the setup_timers() function from the relevant variant.c file: // Use DIV64 prescaler (giving 250kHz clock), enable TCA timer None of the other output pins options from the ATmega4809 are routed out to physical pins on the Arduino Every.Ī major limitation with the 4809’s timer setup is that there is only one prescalar setting and it is shared across all timers. The Arduino library has TCA (“non-split” mode) mapped onto PORTB (pins 5, 9, 10) TCB0 to PF4 (pin 6) and TCB1 to PF5 (pin 3). There are two options for each of the single channels of TCB0, 1, 2 and 3, a default and alternative mapping, depending on the settings of the TCBROUTEA register. To use all six pins requires the use of “split mode” for TCA, but only pins of PORTB are actually broken out for the Nano Every anyway, so “non-split mode” is used which only applies to bits. There are six options for the three channels of TCA: they can be mapped onto pins for each of PORTA to PORTF depending on the setting of the TCAROUTEA register. Which output pins are connected to which timer channel is controlled by the ATmega4809’s PORTMUX registers (see chapter 15 in the datasheet). Note that there are many more options for the ATmega4809 itself but these are not broken out in the Arduino Nano Every. TCB3: Used for millis(), micros(), delay().TCB1: PWM pin 3, also used for tone() function.The Arduino environment uses these as follows: The ATmega4809 has five timers in total, one “type A” which has three compare channels, and four “type B” timers with one channel channel each. These are mapped onto the six PWM pins for an Uno or Nano.

Part of the reason for the odd mapping to ATmega4809 ports and IO pins is that PWM is implemented using hardware timers and there are limitations on which pins can be used with the timers.įor the ATmega328 as used on the Nano, there are three timers which can be configured each to provide two outputs (OC0A/B, OC1A/B, OC2A/B). Unlike the Nano, there is no PWM possible on D11. The Nano Every supports PWM on the following pins:

One of the reasons for the odd port mapping described is down to which pins need to support PWM.
