ACX a écrit :Petite astuce, pour ne pas prendre trop de place en mémoire on peut se servir du fait que la sinusoïde est doublement symétrique et donc une table de 256 suffit pour avoir la précision d'une table de 1024 valeurs.
Oui et autre astuce , l'interpolation ;)
Imaginons un compteur de 0..255 pour les indices du tableau dans lequel sont rangées les valeurs pré calculées d'une forma d'onde. A très basse vitesse de lecture, un LFO bien lent par exemple, les 256 valeurs vont générer des paliers éventuellement audibles. On peut donc imaginer un compteur non sur 8 bits (0..255) mais plutôt sur 16 bits (0..65535) . Dans ce cas, les 8 bits de poids fort donnent l'indice dans le tableau, les 8 bits de poids faible le ratio de chacune des deux valeurs adjacentes du tableau. Ainsi on obtient un beau signal avec une définition de quasi 65536 pas avec seulement 256 valeurs.
Exemple : Onde[0] = xxx Onde[1] = xxx Onde[2] = xxx Onde[255] = xxx et inc l'incrément de 0..65535
si inc= 0 alors signal Onde[0] * 256 / 256 + Onde[1] * 0 / 256
inc = 10 alors signal Onde[0] * 246 / 256 + Onde[1] * 10 / 256
inc = 100 alors signal Onde[0] * 146 / 256 + Onde[1] * 100 / 256
inc = 255 alors signal Onde[0] * 1 / 256 + Onde[1] * 255 / 256
inc = 256 alors signal Onde[1] * 256 / 256 + Onde[2] * 0 / 256
etc....
en gros cela donnerait un truc du genre
signal = Onde[ ( inc >> 8 ) ] * ( 256 - ( inc & 0x00FF ) ) / 256 + Onde[ ( inc >> 8 ) + 1 ] * ( inc & 0x00FF ) / 256
Bon, il y a encore des optimisations possibles pour soulager le CPU et des casts importants à placer mais ça, ce sont les joies de l'apprentissage
Avec des simples incréments , masques logiques et des rotations de bits, cela reste des calculs "simples" pour les "petits PIC".
Pour finir, afin d'économiser de la "RAM" , tu peux ranger les valeurs des tableaux dans le code source avec les directives PROGMEM etc...
J'avais fait il y a quelques temps un projet de séquenceur / arpégiateur etc sur la même base que la tienne : arduino et 4922.
http://bricosique.blogspot.fr/p/interfa ... ateur.html
Le code source complet est dispo (pas d'interpolation, mais des PROGMEM pour les modulations )
Quand l'été est si pluvieux ou l'hiver si froid...