Générateur de signaux arbitraires, pour environ 20$ (5 / 6 étapes)

Étape 5: Le groupe de travail de programmation

Voici un guide à la programmation de cet appareil. Je vais commencer avec le programme utilisé pour générer l’onde sinusoïdale de 1,7 Mhz :

DÉPART :

comprennent « m8515def.inc » ; Il s’agit d’un fichier de définition, une chose très utile à utiliser. Si vous avez besoin d’une copie, google le nom de fichier

REGISTERS0 :
LDI r16, 0 x 00
LDI r17, 0 x 25
LDI r18, 0x7F
LDI r19, 0xD9 ; Charge s’inscrit tout d’abord, de cette façon par la suite, que votre code peut produire une sortie ~ 1 par cycle d’horloge
LDI r20, 0xFF ; Ces valeurs ont été déterminées par 127*sin(x)(pi/4), pour les valeurs entières positives de x.
sur DDRB, r20

Sine0 de 2Mhz :
sur le PORTB, r18
sur le PORTB, r19
sur le PORTB, r20
sur le PORTB, r19
sur le PORTB, r18
sur le PORTB, r17
sur le PORTB, r16
sur le PORTB, r17 ; une période du sine wave @ 2Mhz si vous utilisez une vitesse d’horloge de 16Mhz
rjmp 2Mhz sine0

Ce qui suit est des exemples d’ondes sinusoïdales de 1Mhz, générés de deux façons différentes.

Sine0 de 1Mhz :
sur le PORTB, r18
NOP
sur le PORTB, r19
NOP
sur le PORTB, r20
NOP
sur le PORTB, r19
NOP
sur le PORTB, r18
NOP
sur le PORTB, r17 ; une période du sine wave @ 1Mhz si vous utilisez une vitesse d’horloge de 16Mhz
NOP
sur le PORTB, r16 ; C’est la manière paresseuse.
NOP
sur le PORTB, r17 ; L’exemple suivant montrera le meilleur chemin.
rjmp 1Mhz sine0

REGISTERS1 :
LDI r16, 0x7F
LDI r17, 0xAB
LDI r18, 0xD1
LDI r19, 0xF6
LDI r20, 0xFE
LDI r21, 0 x 53 ; Notez que nous avons chargé les 9 registres de mémoire ! Notez combien registres vous avez, et
LDI r22, 0x2D ; faire bon usage. Où 127*sin(x)(pi/n), n peut être n’importe quel nombre de registres
LDI r23, 0 x 08 ; où nombre de registres plus 1 divisé par 2... sauf si je me trompe !
LDI r24, 0 x 00
Sine1 de 1Mhz :
sur le PORTB, r16
sur le PORTB, r17
sur le PORTB, r18
sur le PORTB, r19
sur le PORTB, r20
sur le PORTB, r19
sur le PORTB, r18
sur le PORTB, r17
sur le PORTB, r16
sur le PORTB, r21
sur le PORTB, r22
sur le PORTB, r23
sur le PORTB, r24
sur le PORTB, r23
sur le PORTB, r22
sur le PORTB, r21
rjmp 1Mhz sine1

Ce qui précède est un bel exemple du compromis entre la résolution et la fréquence. De réduire de moitié la résolution, vous pouvez doubler la fréquence. Un lecteur perspicace
auront remarqué que les deux formes d’onde utilisent 0x7F (127) comme un zéro point indépendamment de l’ordre que les registres sont chargés... Vous pouvez déterminer qu’un autre
point zéro est plus utile pour certaines formes d’onde... mais pour ceux symétrique comme vous êtes le plus susceptible d’utiliser, 0x7F est optimale.

Maintenant, nous passons à un sujet plus compliqué... Comment produisons-nous une forme d’onde de 1,5 Mhz ? Tenir compte :
sine(x)(pi/6)
qui serait la résolution correcte à utiliser... mais, étant donné que cette résolution divise équitablement dans 2pi, mais pas dans p/2... notre forme d’onde se penchera étrange,
parce qu’à aucun moment la sortie est égal au minimum ou le maximum de la fonction, ce qui veut dire quelque chose près 0 x 00 et 0xFF ! Pour la grande
fréquences, la forme d’onde peut être approximativement correcte de toute façon, en raison de la capacité naturelle et l’inductance dans n’importe quel circuit. Il résiste à tout changement
en courant ou en tension, donc à des fréquences plus élevées, si vous copiez 0 x 00 dix fois, puis deux fois 0xFF... la deuxième 0xFF vous donnera une valeur un peu supérieure
que la première. Essayez-le et voyez, il peut ou peut ne pas fonctionner selon des variables qui sont trop complexes pour discuter ici.

Le fait est qu’il est difficile, voire impossible de générer des fréquences qui ne sont pas des fractions binaires de la vitesse d’horloge... À très haute
fréquences, vous pourriez être en mesure de « tricher » à l’aide de la capacité parasite et inductance... et certainement à des fréquences plus basses, la question devient sans importance
comme nous le verrons dans le prochain exemple... mais certainement il y a certaines fréquences qui ne peut pas être générés.

Un ingénieur astucieux (c’est à dire: pas moi) va installer une prise de courant pour maintenir l’oscillateur à quartz utilisé dans cet appareil... de cette façon, il/elle peut trivialement changer le
la fréquence fondamentale de l’appareil et obtenir essentiellement n’importe quelle fréquence ils veulent conformes aux spécifications du microcontrôleur
(J’ai vu bon marché... 2$... atmels qui fonctionnent à des vitesses d’horloge jusqu'à 20 Mhz).

Maintenant, voici un code pour une forme d’onde de fréquence nettement inférieure. C’est fondamentalement code depuis le site Web que j’ai répertorié comme une référence :
http://www.avr-ASM-Tutorial.net/avr_en/AVR_DAC.html
La forme d’onde est une onde en dents de scie. Allez visiter le site Web car il est très utile et le code, il est vraiment bon pour des signaux de fréquence basse-moyenne.

comprennent « m8515def.inc »
DÉPART :
LDI r18, 0xFF
sur DDDR, r18

EN DENTS DE SCIE :
sur PORTD, r18
r18 Inc
rjmp en dents de scie

Cela génère une forme d’onde d’environ 2,5 kilohertz. Vous pourriez augmenter/diminuer le fréquence en ajoutant des pauses (nop) ou minuteries, ou vous pouvez augmenter la fréquence
en diminuant la résolution... au lieu de inc (incrémentation) simple ajouter un numéro à r18. Si vous ajoutez 2, la fréquence doublerait. Si vous ajoutez 3 et une pause
(nop), la fréquence augmentera de 1,5 fois.

Pour faire un triangle de vague, ajouter un IPC instruction pour tester si la r18 est égal à 0xFF et dans l’affirmative, effectue un branchement dans une fonction similaire qui décrémente ou soustrait de la r18. Que fonction doit bien sûr tester si r18 = 0 x 00 et si ce branche à la fonction de premier.

Je vais finir ce tutoriel avec quelques indices sur la façon d’utiliser intelligemment cet appareil :
-Appliquer les fonctions du programmateur adéquat pour créer correctement des signaux de basse fréquence. Il est plus difficile que vous pensez à garder une trace de cycles d’horloge de programmes dans votre tête.
-Si les fonctions de minuterie vous effraient (ils me font peur), comte de cycles d’horloge dans votre tête et puis testez-le sur votre portée pour s’assurer que c’est correct.
-A decimal Converter hexagonale est une chose très utile pour déterminer ce que devraient être les valeurs des registres.
-Ne pas raccorder cet appareil à une antenne et utilisez-le pour communications sans fil, sauf si vous disposez d’une licence et savez ce que vous faites.
-Vous pouvez probablement programmer jusqu'à une onde carrée de 4 Mhz avec cet appareil... est utilisé comme une source d’horloge variable, ou pour injecter des communications série dans un circuit.
-8 d'entre eux avec une horloge commune ferait une source logique parallèle programmable vraiment cool.
-Générer des potentiels d’action de neurone avec elle et sans doute votre laboratoire de biologie d’économiser beaucoup d’argent.
-Faire un piano avec elle.
-Ce dispositif laisse plusieurs entrées sur l’atmega inutilisés. Si vous souhaitez que l’appareil d’être plus pratique, mais ont limité les fonctions, vous pourriez construire une
interface pour elle et un programme intelligent, donc vous pouvez générer un éventail de formes d’onde et fréquences sans reprogrammation.
-N’oubliez pas que rjmp prend des cycles d’horloge et crée un artefact ! Contourner ce problème en incluant de nombreuses périodes dans votre programme avant une boucle. Faire bon usage
de toute cette mémoire sur l’atmegas !

Obsolète (Légion Labs est un effort de recherche nouveau, sans but lucratif, aucun-degrés-requis actuellement situé à Montréal. Nous ne sommes pas affiliés avec d’autres organismes.
Il a actuellement un membre, étant donné que j’ai considéré que très récemment élargit la portée de cette opération.)

Actuellement : Légion Labs est membre d’une montréalaise à but non lucratif recherche/ingénierie effort avec un certain nombre d’autres personnes, qui loue un atelier industriel comme un endroit pour bricoler.

Articles Liés

Le générateur de signaux arbitraires Atmel Xmega USB/série

Le générateur de signaux arbitraires Atmel Xmega USB/série

cette instructable vous guide à travers la programmation et à l'aide de la carte d'évaluation de Boston Xmega Android pour travailler comme un générateur de signaux arbitraires simple en profitant de l'intégré 12 bit DAC et le contrôleur DMA haute vi
Augmenter l’efficacité de votre réfrigérateur en 10 minutes pour environ 2 $

Augmenter l’efficacité de votre réfrigérateur en 10 minutes pour environ 2 $

quand j'étais un petit enfant, supermarchés avaient souvent ces suspendus des feuilles de plastique avec des fentes coupées dedans sur le produit réfrigéré vertical et sections laitières pour garder l'air frais dans tout en permettant aux gens de fac
OscilloPhone : Utilisez votre Smartphone comme un Oscilloscope / générateur de Signal

OscilloPhone : Utilisez votre Smartphone comme un Oscilloscope / générateur de Signal

OscilloPhone : Utilisez votre Smartphone comme un Oscilloscope / générateur de signauxpar Loann BOUDIN | 2015Oscilloscopes et générateurs de signaux sont deux dispositifs électroniques essentiels pour créer et tester les circuits électroniques. Malhe
Oscilloscope USB avec le générateur de signaux

Oscilloscope USB avec le générateur de signaux

Bonjour,dans ce projet, je veux vous montrer comment faire un Oscilloscope USB simple et bon marché.Spécifications :Prix : 20$Fréquence: 2-20000HZRésolution : 16 bitsPlage de tension: +-7V / avec sonde +-70VCanaux: 2Mode X-YGénérateur de signal : sin
Trois en un: IC / testeur de continuité, générateur de signaux &

Trois en un: IC / testeur de continuité, générateur de signaux &

lors de la construction, avec des circuits intégrés, la plupart d'entre nous passent beaucoup de temps de dépannage.  Dans ces circonstances (ainsi que d'autres), il est bon de savoir que les puces fonctionnent.  Ce testeur vérifie 4 différents types
0-40 Mhz, générateur de signal sinusoïdal pour 25 $.

0-40 Mhz, générateur de signal sinusoïdal pour 25 $.

Récemment certains conseils très bon marchés ($4-6) viennent de Chine, contenant une puce appelée le AD9850 qui est un générateur de signal sinusoïdal de synthèse numérique directe.Avec seulement 4 fils de commande, nous pouvons contrôler le Conseil
Générateur de Signal d’onde sinusoïdale modifiée.

Générateur de Signal d’onde sinusoïdale modifiée.

En raison d'une panne d'ordinateur et des fichiers perdus, j'ai dû refaire ce projet.Je me suis inspiré pour concevoir ce circuit en treize ans, deux mille watts, puissance industrielle onduleur circuits imprimés ; J'ai acheté pour dix dollars. J'ai
Générateur de signaux Arduino

Générateur de signaux Arduino

des générateurs de signaux (également appelés générateurs de fonction) sont utiles pour tester et déboguer des circuits.  Je les utilise souvent pour tester la réponse en fréquence de composantes électroniques comme ampli op et capteurs.  Ce générate
Générateur de signaux de Arduino de résistance 10

Générateur de signaux de Arduino de résistance 10

Si vous avez un Arduino UNO, ce projet est pratiquement gratuit !Il fait également un grand projet Arduino Nano.Ce que vous avez besoin (uniquement les composants passifs) :Seulement 10 résistancesCondensateur d'une filtrageVous recevrez :Un générate
Générateur de signaux iOS contrôlé par Arduino

Générateur de signaux iOS contrôlé par Arduino

Ce générateur de signaux est basé sur le travail par Amanda Ghassaei. Générateurs de signaux (ou des générateurs de fonctions) sont utilisés pour tester et déboguer des circuits. réponse en fréquence par exemple de l'ampli op ou des capteurs. Ce géné
Facile Atmel Xmega Sine Wave / générateur de signaux

Facile Atmel Xmega Sine Wave / générateur de signaux

c'est comment vous pouvez utiliser un des panneaux d'évaluation du BostonAndroid.com Xmega (20$) pour créer un générateur de forme d'onde sinusoïdale réglable simple avec une résolution de 12 bits et capable de produire des fréquences de 125Hz - 20KH
Équilibré des écouteurs pour environ 130 $

Équilibré des écouteurs pour environ 130 $

Casque équilibrée est une des meilleures façons de découvrir le plein potentiel audio de la Pono, ou n'importe quel autre amplificateur de casque qui offre un étage de sortie symétrique. Équilibrée en mode livre 4 x la puissance à vos bobines, réduit
Arduino + AD9850 30MHZ DDS générateur de Signal à 12$

Arduino + AD9850 30MHZ DDS générateur de Signal à 12$

un Signal de précession generator est très simple et abordable font à l'aide d'un synthétiseur d'arduino et dds (ad9850). Premier plus petit portable générateur de signaux son monde construire.Vous pouvez faire décent 0-30 MHZ fréquence Signal genera
Comment faire un générateur d’énergie libre pour les projets

Comment faire un générateur d’énergie libre pour les projets

Saviez-vous que la rotation d'un moteur à courant continu génère énergie.. ?Nous allons utiliser cette technique pour faire un générateur d'énergie libre pour nos projets. Le moteur utilisé ici est un motoréducteur 6v, moteur de C.C de 50 tr/min. La