Étape 3: onde sinusoïdale, 1,790 Mhz
Réinitialiser :
R1=255*Sin(0)
R2=255*Sin(pi/4)
R3=255*Sin(pi/2)
R4=255*Sin(3pi/4)
R5=255*Sin(pi)
R6=255*Sin(5pi/4)
R7=255*Sin(3pi/2)
Boucle :
sortie portN, r1
sortie portN, r2
sortie portN, r3
sortie portN, r4
sortie portN, r5
sortie portN, r6
sortie portN, r7
rjmp boucle
Le petit irrégulière « dip » dans la forme d’onde est causée par l’instruction rjmp qui prend 2 cycles d’horloge pour traiter. Pour contourner ce problème, vous copiez/collez la séquence dans la fonction de boucle plusieurs fois dos à dos, produisant de nombreuses périodes de l’onde pour chaque boucle. Cette photo est d’une séquence de 10 périodes / boucle, l’atmega16-16pu a assez de mémoire pour dix fois cela facilement.
Pour rendre les autres fréquences, vous devrez faire preuve de créativité :
-changer la résolution (pi/n), aussi longtemps que vous gardez à l’esprit plus élevée des valeurs de n requièrent des registres plus.
-utiliser l’instruction nop (il ne fait rien et prend un cycle d’horloge pour le faire)
-utiliser les timers
-utiliser une table de sinus en EEPROM
-des trucs bizarres : Remarquez comment l’artefact rjmp apporte la tension inférieure à la valeur zéro de l’onde... c’est parce qu’il représente la valeur 0 pour 3 cycles d’horloge, et quelle que soit vous utiliser de cordons de mesure aura une certaine capacité et inductance qui résiste aux changements de courant et de tension. Vous pourriez faire votre programme à produire une forme d’onde asymétrique en remplaçant r1 avec un entier positif non nul, alors que la tension retombe exactement pour le « point zéro » du reste de l’onde au cours de cycles d’horloge 2. Si vous pouvez le faire, alors mon chapeau est hors de vous.