**Where do I find the pins relative to timers of each individual Arduino microcontroller?**

As I like Arduino's I already have various samples of them. The one I mostly use is the Uno and Micro for now... I'm planning to also get a Mega and others. Most simple things work on all devices, but if you start with complex code to fasten up things, every device is a little different.
A problem I could not solve for days now is the relation between pins and timers.

I cannot find any information about the Arduino Micro. I also don't know exactly what the proper keywords are that I need to find the relation between timers and pins.

**Example:**
A PWM driver multiplexing

As I for now just got some stuff from my local dealer I have no access to shift registers, PWM drivers and other proper integrated circuits.

So I used the Arduino as a PWM driver for 8 RGB or 24 (3*8) white LEDs.
The code works on Arduino Uno. But as the **Arduino Micro has no *Timer2***, `TCCR2B`, I cannot use the same code on the Arduino Micro.

Even if I understand the code (I wrote a lot in other languages...), some of the Atmel chip specific parameters are not clear.

This function sets the prescaler of the timer:

    void setPwmFrequency(int pin, int divisor){

      byte mode;
      if(pin==5||pin==6||pin==9||pin==10){
        switch(divisor){
          case 1:mode=0x01;break;
          case 8:mode=0x02;break;
          case 64:mode=0x03;break;
          case 256:mode=0x04;break;
          case 1024:mode=0x05;break;
          default:return;
        }
        if(pin==5||pin==6){
          TCCR0B=TCCR0B&0b11111000|mode;
        } else{
          TCCR1B=TCCR1B&0b11111000|mode;
        }
      }else if(pin==3||pin==11){
        switch(divisor){
          case 1:mode=0x01;break;
          case 8:mode=0x02;break;
          case 32:mode=0x03;break;
          case 64:mode=0x04;break;
          case 128:mode=0x05;break;
          case 256:mode=0x06;break;
          case 1024:mode=0x7;break;
          default:return;
        }
        TCCR2B=TCCR2B&0b11111000|mode;
      }
    }

First of all, I probably don't even need this function as soon I know what frequency I want, and so I probably need only two lines to set my three (RGB) pins.

    //Arduino Uno timer setup for pin 9, 10, and 11
    TCCR1B=TCCR1B&0b11111000|0x01; // Pin 9,10
    TCCR2B=TCCR2B&0b11111000|0x01; // Pin 11

1. Correct, I need to set `TCCR1B` only one time?

2. What does the `0b11111000` refer to?

In the setup function there is also this line:

    TIMSK2 = 1<<TOIE2;

3. What does this do?

While the above three questions are not so important until it works, **I need to understand how I can convert those timers to work with Arduino Micro**, but also later with other Arduino boards.

----------

**On Arduino Micro**

There is no timer 2

Do pin 9, 10, and 12 have the same timer?

    ??????=??????&0b11111000|0x01;

Also if I understand correctly the Arduino Micro has:

1. A higher PWM range 1024 vs 255 (UNO)??
2. A much higher frequency available in on Timer4 only for pin 13

**So is there somewhere a table describing the differences between all Arduino timers?**

**Full working (on Arduino Uno) code.**

    unsigned char Prescaler=0;
    unsigned char CurrentLED=0;
    unsigned char LEDValues[8][3];
    unsigned char ports[8]={
      0b00000100,
      0b00001000,
      0b00010000,
      0b00100000,
      0b01000000,
      0b10000000,
      0b00000001,
      0b00010000
    };//PINS 2,3,4,5,6,7,8,12

    #define PrescalerOverflowValue 4

    ISR(TIMER2_OVF_vect){
      if(Prescaler<PrescalerOverflowValue){
        Prescaler++;
      }else {
        Prescaler=0;
        Multiplex();
      }
    }

    void Multiplex(void){
      PORTD&=0b00000011;
      PORTB&=0b11101110;
      analogWrite(9,255-LEDValues[CurrentLED][0]);
      analogWrite(10,255-LEDValues[CurrentLED][1]);
      analogWrite(11,255-LEDValues[CurrentLED][2]);
      CurrentLED<6?(PORTD|=ports[CurrentLED]):(PORTB|=ports[CurrentLED]);
      CurrentLED++;
      if(CurrentLED>7)CurrentLED=0;
    }
    void setPwmFrequency(int pin, int divisor){
      byte mode;
      if(pin==5||pin==6||pin==9||pin==10){
        switch(divisor){
          case 1:mode=0x01;break;
          case 8:mode=0x02;break;
          case 64:mode=0x03;break;
          case 256:mode=0x04;break;
          case 1024:mode=0x05;break;
          default:return;
        }
        if(pin==5||pin==6){
          TCCR0B=TCCR0B&0b11111000|mode;
        }else{
          TCCR1B=TCCR1B&0b11111000|mode;
        }
      }else if(pin==3||pin==11){
        switch(divisor){
          case 1:mode=0x01;break;
          case 8:mode=0x02;break;
          case 32:mode=0x03;break;
          case 64:mode=0x04;break;
          case 128:mode=0x05;break;
          case 256:mode=0x06;break;
          case 1024:mode=0x7;break;
          default:return;
        }
        TCCR2B=TCCR2B&0b11111000|mode;
      }
    }

    void setup(void){

      pinMode(2,OUTPUT);//1
      pinMode(3,OUTPUT);//2
      pinMode(4,OUTPUT);//3
      pinMode(5,OUTPUT);//4
      pinMode(6,OUTPUT);//5
      pinMode(7,OUTPUT);//6
      pinMode(8,OUTPUT);//7
      pinMode(12,OUTPUT);//8
      pinMode(9,OUTPUT);//red
      pinMode(10,OUTPUT);//green
      pinMode(11,OUTPUT);//blue
      setPwmFrequency(9,8);
      setPwmFrequency(10,8);
      setPwmFrequency(11,8);
      TIMSK2=1<<TOIE2;
    }

    void loop(void){
      for(int i=0;i<8;i++){
        //LEDValues[i][0]; // Red
        //LEDValues[i][1]; // Green
        //LEDValues[i][2]; // Blue
      }
    }