Hallo,

hast du mal mit einem einfachen kleinen Programm die Ausgänge gesetzt? Versuch das mal, damit man den Fehler eingrenzen kann.
Mir sind zwei Sachen aufgefallen.
Code:
uint16_t Pulslength[40]; // !!! // array for all delays
ändere bitte in
Code:
volatile uint16_t Pulslength[40]; // !!! // array for all delays
Code:
    TIMSK |= _BV(TOIE2) | _BV(TOIE1);
Warum TOIE2, verschweigst du uns etwas? Timer2 wird nicht gestartet.

Gruß

Jens