die überlegung ist schonmal sehr gut! du legst einfach 4 counter fest und jedesmal wenn einer deiner counter abgelaufen ist, setzt du ihn mit einem neuen wert + (rnd() * zu variierendem Wert) ... aber unter der vorraussetzung, dass rnd() einen wert zwischen 0 udn 1 liefert, das weis ich leider grad nicht ^^

beachte unbedingt, wenn du mit float arbeitest auch immer schön zu casten und die ergebnisvariablen richtig festzulegen, damit du keine kommastellen verlierst!

achja das wichtigeste vergessen, in den counterüberläufen dekrementierst du deine counter bis sie 0 erreichen, vll. noch 4 variablen die signalisieren ob du für die jeweilige LLED gerade in die on oder off phase gehst! und fasse dich bei deinen bedingungen so kurz wie möglich, der interrupt darf nciht so lange dauern!