Petite précision: j'ai omis un petit détail qui ne change pas grand chose.
Si le délai temps_off ou temps_on est trop long pour tenir dans une seule période du timer (ce qui peut arriver si le frequence est basse, j'ai eu le cas), il peut être nécéssaire de découper temps_on et temps_off comme ceci:
temps_on = reste_on + N_on * periode_timer;
(et donc on aura N_on interruptions pendant temps_on)
Ca complique un peu le code d'interruption (plus un bête if) mais rien de sérieux.
-----