El problema con un enfoque basado en ISR es que es un interrumpir . Interrumpe las cosas.
El uso de las funciones de comparación de temporizadores incorporadas para alternar un pin de coincidencia se realiza completamente en hardware. Puedes tener código ejecutándose en el procesador y no tiene ni idea de que el temporizador está conmutando el pin.
Cuando usas un ISR para alternar un pin, tienes más flexibilidad (puedes hacer algo más que alternar un pin, y puedes alternar cualquier pin que quieras), pero ahora tienes muchas interrupciones, interrumpiendo su código . Esto puede alterar las rutinas específicas de temporización o, a altas frecuencias, incurrir en una sobrecarga innecesaria (su interrupción puede convertirse en una gran parte del recuento total de instrucciones, consumiendo ciclos que podrían ser utilizados por el programa principal).
¿Cuál generaría pulsos más precisos?
La función de coincidencia del temporizador probablemente generará un resultado más preciso, a menos que muy cuidado al programar sus interrupciones. De hecho, para conseguir un PWM/pulsos precisos con ISRs, probablemente necesitarás escribir tus ISRs en ensamblador para saber cuántos ciclos tardan, y luego tener en cuenta esto en tu código que establece los tiempos. Básicamente, la sobrecarga de entrar en el ISR va a afectar a las cosas, en cuanto a los tiempos.
En general, si es posible hacer lo que quieres hacer con los pines de coincidencia del temporizador, hazlo así para no tener la sobrecarga de la interrupción extra. Si no es posible lograr lo que necesitas sólo con los temporizadores o te has quedado sin pines de temporizador, entonces usa un ISR.