Si une précision maximale est ton objectif, alors il vaut probablement mieux utiliser les timers hardware (ce qui implique d'écrire dans les registres) que de le faire avec des fonctions Arduino qui seront moins précises. Si en revanche il y a une certaine précision qui est suffisante pour ton application, alors on peut peut-être faire sans.
En termes de fréquence, tu peux aller de N=M=1, c'est à dire 16MHz (ou alors 8MHz, bien possible que ce soit que un changement de valeur à 16MHz) jusqu'à M=1024 et N=2^16-1, soit f=16MHz/M/N=0.2Hz. Tu as donc toute la gamme 0.2 Hz à 8 ou 16 MHz de disponible.
Par contre, ta précision dépendra de la fréquence : si tu es proche des 8MHz, ça deviendra moins précis. En gros tu as une demi période T/2 de 1/16MHz = 62.5 ns pour N=M=1 (ie T=125 ns, ie f=8MHz). La valeur suivante est pour N= et M=, on a donc T=2*125ns = 250 ns, soit f=4MHz. Puis vient N=3, M=1, qui donne T=3*125ns = 375 ns, soit f=2.66MHz. Et ainsi de suite : tant que tu gardes M=1, tu as T=M*125 ns, soit f=8MHz/N.
En gros, dès que tu es à moins de 800kHz (N=10, M=1), tu peux approximer n'importe quel fréquence avec moins de 5% d'erreur. Si tu es à moins de 80kHz (N=100, M=1), tu peux approximer avec moins de 0.5% d'erreur.
A noter néanmoins que je ne connais pas la précision intrinsèque de l'horloge, donc il y aura un certain seuil de précision que tu ne pourra pas dépasser.
Les caractéristiques du signal qui devra être généré :
- voltage supérieur à 0.25V et 100 % OFFSET POSITIF
- fréquence 30 KHz
- onde carrée
je suis pas sur de comprendre ta première ligne : "voltage supérieur à 0.25V et 100 % OFFSET POSITIF". Est ce que tu entends par là l’oscillation entre 0.25 et 9V dont tu parle ensuite?
Pour la fréquence de 30 kHz, ce sera toujours 30kHz ou programmable? Si oui, tu veux pouvoir couvrir quelle plage de fréquences?
Par onde carrée, tu entends que le temps passé à l'état haut est le même qu'à l'état bas?
Pour la tension entre 0.25V et 9V, ces deux valeurs sont fixes ou programmables?
Tu as quoi comme sources de tensions de disponibles? Est-ce que tu alimente l’Arduino avec du 9V ou autre chose? A noter que si tu utilise une pile 9V, elle n'est pas exactement à 9V (un peu plus quand elle est pleine, un peu moins quand elle est vide) : est-ce que cette variation est acceptable en sortie?
A noter que les sorties d'un arduino ne peuvent pas directement délivrer du 9V, mais il suffit de rajouter un transistor et le tour est joué. Mais sinon, un Arduino Uno ou Mini fait très bien l'affaire (je te conseillerais plutôt un mini ou un micro si le but est d'avoir quelque chose de petit qui rentre dans la poche).
Pour ce qui est du pont diviseur et des chocs, tu as deux options principales : soit tu prend un arduino qui n'a pas de pins soudés (par exemple certains mini ou nano sont livrés avec les pins non soudés) et tu soude directement sur l'arduino ; soit tu fait un petit circuit (sur un PCB pré-perforé par exemple) où tu place des pins (mâles si tu utilise l'arduino uno qui a des pins femelle, ou femelles si tu utilise un Mini ou Nano qui ont des pins mâles) : tu peux ensuite y enficher l'arduino. Juste mettre des fils ou des pâtes de résistances dans les pins de l'Arduino Uno, ça vas bien pour faire des tests, mais ça ne restera pas en place si tu promène ton montage dans ta poche.