Timer hardware

The ATmega128 has 4 timers/counters:

TC name Bits # Output compare registers # Output compare pins
TC0 8 1 1
TC1 16 3 3 (one shared with TC2)
TC2 8 1 1 (shared with TC1)
TC3 16 3 3
All timers support:
  • Overflow and compare match interrupts
  • Clear timer on compare match (Auto reload, CTC)
  • Phase correct PWM
  • Fast PWM

Dragonfly timer pin connections

Pin function Pin name Alternate functions Net name Function Comments
OC0 PB4 -- !IR_EN Rangefinders power switch
OC1A PB5 -- PWM_HB1 Motor
OC1B PB6 -- PWM_HB1 Motor
OC1C/OC2 PB7 -- PWM_BUZZ Da Beep
OC3A PE3 AIN1 DIO1 DIO pin 3 Analog comperator
OC3B PE4 INT4 DIO2/SCL_B DIO pin 5 External Interrupt
OC3C PE5 INT5 DIO3/SDA_B DIO pin 7 External Interrupt

Timer to function allocation

  • The motors have to use TC1, because they are connected to OC1A/OC1B (and hardware PWM should be used).
  • The Buzzer has to use TC2 because it is connected to OC2 (and hardware frequency generation should be used).
  • The orbs cannot be shared with the motors because the motors (hardware PWM) require a PWM mode of the time, while the orbs (software PWM) require a non-PWM mode to allow for immediate OCR update (this is due to the implementation of the AVR timer modes)
Current plan:
Function Timer
Motors TC1
Buzzer TC2
Time base
Orbs TC0

Timer Uses (Old)

Timer 1 motor.c
Timer 2 buzzer.c (odometry also seems to use this)
Timer 3 time.c, orb.c