Oui ca peut te produire ce que tu veux. La flute est une sinusoïde pure. Plus tu as de points pour définir le signal, plus la sinusoïde est propre (peu d'harmonique: le spectre se rapproche d'un pic à la fréquence choisie.)
Si tu fais en sorte de répartir 20 points le long de la période de la sinusoïde comme ici:
tu produira un son de fréquence 2000/20 = 100hz. Le son sera très grave mais sera très pur (la courbe est bien lisse: peu d'harmoniques). On aura un très beau son de flute!
Si tu veux jouer un LA440 à la flute via une interruption de 2khz, il te faudra une sinusoïde de 2000/440 = 4.5 points par période. Ca ressemble à ca (horizontalement ce coup ci)
Code : Tout sélectionner
| * *
| / \ / \
+-----*-----*-----*-----*-------------
|\ / \ /
| * *
On s'éloigne de la belle sinusoïde de tout à l'heure, et on se rapproche d'un signal en triangle et cela s'entends et se voie si on trace le spectre: il commence à y avoir pas mal d'harmoniques de plus en plus fortes. Le son est moins pur.
Si tu veux un LA880 avec l'interruption à 2khz, tu n'as à présent plus droit qu'à 2000/880 soit sensiblement 2 points à placer par période, ce qui ressemble (et s'entends carrément) comme un signal rectangulaire (créneaux), c'est à dire ce que produite le buzzer:
Code : Tout sélectionner
|-- *-- *--
| | | | | |
+--|--+--+--+--|--
| | | | | |
| *-- *-- *--
Fini la belle sinusoïde pure. Le signal est complètement pollué par les harmoniques devenues de plus en plus forte, et il ne reste plus que la période de reconnaissable dans le son. La flute a disparue
Conclusion: Pour avoir un truc ressemblant à une sinusoïde, il faut pas mal de points, disons 8 mini pour la fréquence la plus haute que l'on souhaite jouer. Donc si on veut pouvoir jouer un LA1680 (octave 5 si je ne m'abuse), il nous faut 8 points par période minimale (fréquence max), et donc 8*1680 = 13400 interruptions/secondes, soit toutes les 74 cycles cpu (10-15 instructions environ).
C'est beaucoup trop pour le 6809 en particulier à cause du sur-coût lié au passage en rom qui consomme à lui seul pas loin de 80 à 100 cycles avant même d'aller dans le code utilisateur (c'est plus que la durée maximale entre deux interruptions pour produire une note de cette hauteur).
Si tu veux reproduire fidèlement les sons aigus autres que rectangulaires (créneaux), tu ne peux plus passer par des interruptions. Il faut toi-même compter les cycles dans ton code et tous les 50 à 100 cycles environ (74 dans le cas du LA de l'octave 5) mettre à jour le CNA. C'est super fréquent, et il ne reste pas beaucoup de chose à faire dans les 50 à 100 cycles restant. Pour ainsi dire, le CPU passe son temps à devoir mettre à jour le CNA.
Ceci explique pourquoi, entre autres, l'usage des signaux rectangulaires est aussi utilisé: il n'y a pas besoin de beaucoup de points (donc d'interruptions) pour le produire. Ca allège pas mal le code et le CPU a alors le temps de faire autre chose à coté.