DDS I - PRESENTATION





DIRECT DIGITAL SYNTHESIZERS (DDS)

F6EHJ - Gérard LAGIER (F6EHJ@wanadoo.fr)


Le document suivant décrit l'expérimentation qui a été faite à partir d'un DDS AD9850 :

- Présentation du DDS AD9850
- Mode de commande parallÚle / série
- Calcul de la fréquence de sortie en fonction de la fréquence d'horloge
(des exemples sont fournis dans un tableau excel)
- Commande du DDS par un PIC 16F84
- Détail sur les modules de chargement
- Schéma de base
- Interface utilisateur (variation de fréquence, pas, présélectionâ?Š)
- Affichage de la fréquence
- Mise en oeuvre des décalages (offset) pour application oscillateur local

INTRODUCTION

Lâ??apparition des DDS est en train de révolutionner le monde des télécommunications et ouvre aux amateurs des perspectives jusquâ??alors inaccessibles.

Lâ??objet de cet article est dâ??approcher (dâ??apprivoiser) progressivement les DDS par leur mise en oeuvre dans des applications amateurs qui ne sont pas des professionnels de lâ??électronique ou de lâ??informatique, mais qui ont dâ??abord lâ??envie dâ??apprendre et qui disposent de quelques bases, je pense notamment aux radioamateursâ?Š
La théorie du fonctionnement ne sera abordée que lorsquâ??elle se révÚlera indispensable à la mise en oeuvre. Câ??est donc sous lâ??aspect pratique que cette article aborde le sujet; il fournit les bases nécessaires à la réalisation dâ??un générateur HF ou encore celle dâ??un VFO de récepteur. Puis, seront exposés les avantages et inconvénients (vécus) des DDS ainsi que les solutions palliatives envisagées. Pour terminer, la réalisation pratique dâ??un générateur BF/HF pouvant être utiliser en VFO ou même émetteur CW QRP sera décrite en détail avec les schémas et plans des circuits imprimés.



1. Quâ??est ce quâ??un DDS:

Pour faire simple, je dirai que câ??est une â??petite boîte noireâ?� qui permet de générer un signal sinusoïdal à fréquence variable avec une trÚs grande stabilité alliée à une trÚs grande résolution, câ??est à dire avec des incréments de fréquence trÚs faibles. Le terme sinusoïdal est cependant inexact car le signal de sortie est issu dâ??un convertisseur digital/ analogique 10 bits. Aussi, la forme du signal est une succession de paliers formant une sinusoïde. Lâ??observation à lâ??oscilloscope ne permet pas de discerner ces paliers, mais ils existent et nous y reviendrons.

La définition du DDS pourrait être en quelque sorte celle dâ??un VFO Geloso, encore utilisé de nos jours ou encore dâ??un oscillateur type Colpitts ou Hartley avec la stabilité en moins...
Plus prÚs de nous, le PLL avec ses parfois capricieuses boucles de verrouillage de phase

Voyons chacune des caractéristiques énoncées.


1.1. La stabilité:

Le DDS requiert une horloge de référence pour élaborer son signal de sortie. La stabilité du signal généré par le DDS reposera entiÚrement sur ce signal dâ??horloge. Ce signal sera fourni par un oscillateur à quartz. Si lâ??on prend comme exemple un signal de référence de 125 MHz et un signal de sortie du DDS de 12.5 MHz, une dérive de 10 Hz de lâ??horloge affectera le signal utile de 1Hzâ?Š !


1.2. Fréquence du signal:

La fréquence de lâ??oscillateur à quartz qui pilote le DSS est dépendante de deux paramÚtres:

- la fréquence maximale admissible par le DDS lui-même
- la fréquence maximale du signal souhaité.

Bien que la fréquence théorique utile (Nyquist) soit égale à la moitié de la fréquence de lâ??horloge on prendra comme rÚgle de base : fréquence de lâ??oscillateur égale ou supérieure à 3 fois la fréquence maximale de sortie désirée. Cette rÚgle simple permet alors de choisir a priori le DDS qui convient.

Quelques exemples:

- Soit à remplacer le VFO dâ??un transceiver dont la stabilité et la précision de fréquence sont jugés insuffisantes. Le VFO fournit un signal entre 5 et 5.5 MHz. La fréquence haute est donc 5.5 MHz, un oscillateur de 16.5 MHz est le minimum autorisé, un DDS acceptant un signal dâ??horloge à 15/20 MHz sera retenu en configuration minimale.

- Soit un transceiver couvrant les bandes amateur (1.8/29.7 MHz) possédant un seul changement de fréquence avec une Fl à 9MHz. Dans ce cas, le VFO doit couvrir la plage de 10.8 à 38.7 MHz. Câ??est déjà beaucoup plus difficile pour un VFO classique. Dans ce cas, la fréquence de lâ??oscillateur du DDS devra être au minimum de 38.7x3 soit 106.1 MHz, ce qui nécessite un DDS acceptant 100 MHz. Ce dernier exemple peut également être appliqué pour un récepteur à conversion directe requérant un VFO de 0 à 29.7 MHz; la fréquence de lâ??horloge se retrouve alors à 90 MHz.

Cependant, comme rÚgle générale, plus la fréquence utile sera éloignée de la fréquence maximale du DDS, meilleure sera la qualité du signal.

Les DDS récents admettent des signaux dâ??horloge à 125 , 180 voire 300 MHz, ce qui permet dâ??obtenir des signaux utiles jusquâ??à 100 MHz. Malheureusement, leur disponibilité en petite quantité et leur prix ne permettent pas toujours à lâ??amateur de se lancer dans des montages requerrant leur utilisation. Afin de pouvoir appliquer ce qui sera exposé, le DDS AD9850, disponible chez les revendeurs sera le seul utilisé.


1.3. Résolution:

La résolution est lâ??incrémentation minimal de la fréquence du signal de sortie. Elle dépend directement de la fréquence de lâ??horloge et du DDS lui-même. Pour une fréquence dâ??horloge de 125 MHz, la résolution disponible est égale à.. 0.0291 Hz


1.4. Conclusion:

Obtenir un signal de fréquence variable entre 0 et 40 MHz, par pas de 0.0291 Hz minimum possédant la stabilité dâ??un quartz.. On est bien proche de lâ??oscillateur idéal. Cet oscillateur est maintenant à notre portée. Profitons en!


2. Mise en oeuvre:

Il ne faut pas sâ??attendre à trouver des selfs et des condensateurs variables avec le DDS: le DDS est un composant qui requiert trÚs peu dâ??éléments externe : dans le montage proposé, seuls 3 résistances et 4 condensateur de découplage seront nécessaires pour le
DDS. Par contre, il ne se commande pas trÚs simplement, il faut en fait lui parler afin de lui ordonner ce quâ??il faut faire.


2.1. Le boîtier:

Il sâ??agit, vous lâ??aurez tous deviné, dâ??un circuit intégré a nombre de pattes variable, pour ceux que je connais, entre 16 et 44. Comme indiqué précédemment, nous nous bornerons à retenir un seul modÚle fabriqués par Analog Device: lâ?? AD 9850. Une parenthÚse cependant : lâ??AD9835 est un modÚle plus rustique admettant une fréquence dâ??horloge de 50 MHz ; lâ??AD9851 est au contraire plus performant (180 MHz) mais ces deux composants restent quasiment introuvables.

Lâ??AD9850 possÚde 28 pattes. Autant dire de suite quâ??une des difficultés est la taille de la bête car ce sont des boîtiers SSOP ou â??ultra small SSOPâ?�. Ca promet et ce nâ??est rien de le dire...! La taille hors tout est de lâ??ordre de 10mm X 7mm, la distance entre patte de 1mm ! Le soudage dâ??un tel composant sur un circuit imprimé nâ??est pas chose simple et loupe et petit fer à souder sont de rigueur. La procédure de soudage sera décrite en détail dans le chapitre « réalisation ».


2.2. Lâ?? AD 9850:

Câ??est le premier DDS que jâ??ai utilisé et sa mise en Å?uvre est à la portée de lâ??amateur moyen comme lâ??auteur.
Ce DDS admet une horloge à 125 MHz ce qui décline un signal de sortie de fréquence maximale autour de 40 MHz.
AprÚs essai, il est possible dâ??aller au-delà et il monte à 170 MHz; par contre la consommation augmente rapidement et la température également.. Je nâ??ai pas insisté outre mesure.
Le pas minimal dâ??incrémentation est de 0.03 Hz avec lâ??horloge à 125 MHz, la tension de sortie de 1.2V efficaces sur 50 ohms entre 0.03 Hz et 40MHz....


2.2.1. Les différentes PIN:

Elles sont au nombre de 28, mais beaucoup dâ??entre elles ne sont pas utilisées ou reliées à la masse ou à lâ??alimentation, il en résulte que seules les pins suivantes méritent une description:

PIN 7:W_CLCK

Câ??est la broche qui reçoit lâ??horloge de travail. Cet horloge va cadencer le chargement du
message « fréquence » du DDS

PIN8:FQ_UD

Cette broche valide la fin du message de programmation et indique au DDS quâ??il peut
prendre en compte ce qui vient dâ??être chargé.

PIN 9:CLK_ IN

Câ??est lâ??entrée de lâ??oscillateur de référence à quartz évoquée ci-avant.

PIN 25: SERIAL DATA IN

Cette entrée reçoit le message de programmation fréquence.

PIN 21: out

Câ??est la sortie analogique du DDS (la plus intéressante...!)

PIN 22: out B

Câ??est la même que ci-dessus, déphasée de 180°

PIN 11 et 18 : Avdd

Il sâ??agit de lâ??alimentation 5V de la partie analogique

PIN 6 et 23 : DVdd

Il sâ??agit de lâ??alimentation +5V de la partie digitale. Les autres pins sont soient à la masse, soient inutilisées et restent en lâ??air. Pour mémoire les pins 2, 3 et 4 qui sont trois des entrées parallÚles servent à configurer le DDS en mode série.

Remarques sur les alimentations :

Comme décrit ci-dessus, le 9850 requiert deux alimentations +5V : une pour sa partie digitale et une pour sa partie analogique. Ceci complique le dessin du circuit imprimé et nécessite un filtrage séparé des deux sources 5V. Il est possible de sâ??en affranchir en ignorant cette particularité et en alimentant les 4 pins
par le +5V. La contre partie de cette simplification est lâ??accroissement de signaux parasites en sortie
du DDS. En fonction des besoins en pureté spectrale, on optera pour lâ??une des deux solutions. Dans tous les cas, le découplage des 4 pins dâ??alimentation (6, 11, 18, 23) sera soigneusement réalisé au ras de chaque pin. Des condensateurs chip de 10 à 100 nF seront de préférence employés.

Pour conclure sur cette énumération, on sâ??aperçoit que tout compte fait, elle nâ??est pas trÚs longue et quâ??il nâ??y a pas lieu de sâ??affoler...


2.2.2. PRINCIPE DE FONCTIONNEMENT:

Il est indispensable de comprendre ce quâ??il est nécessaire de faire avant de démarrer. Trois étapes sont nécessaires :

1. Elaboration de la fréquence désirée:

La génération de fréquence repose sur le chargement dâ??un registre à 32 bits situé dans le DDS. Ce mot de 32 bits (4 octets) est entiÚrement représentatif de la fréquence du signal de sortie. Il est donc nécessaire de le définir, de le générer et de le charger dans le DDS. Ces 3 opérations sont les seules (ou presque) à réaliser.

2. Définition du message fréquence 32 bits:

Il est défini par la formule suivante:

F out= Fxtal X N/2exp 32 (Fxtal = fréquence de lâ??oscillateur horloge)

On en déduit simplement N :

N= Fout x 2exp 32 / Fxtal

Exemple: Soit à générer un signal de sortie de 5.250 023 MHz avec un DDS muni dâ??un oscillateur dâ??horloge à 100 MHz

N= 5250023 Hz x 4294967296/100 000 000 = 225 488 771

Cette valeur est à convertir en hexadécimal, soit 0D 70 A7 B3. On complÚte avec des zéros si nécessaire afin dâ??obtenir les 32 bits requis. Câ??est tout. Voir le tableau Excel en exemple

3. Génération du message de 32 bits:

Ce message de 4 octets va devoir prendre une consistance logique car pour lâ??instant, il nâ??est que le résultat dâ??un calcul arithmétique. A ce stade, il est nécessaire de comprendre comment il va falloir sâ??adresser au DDS pour lui faire connaître ce message (notre objectif). Pour entrer le message dans le DDS, deux solutions sâ??offrent à nous:

Le mode parallÚle:

Le DDS possÚde 8 entrées (8 fils correspondant chacun à un bit dâ??un octet). Comme le mot â??fréquenceâ?� comporte 4 octets (32 bits), le DDS accepte que lâ??envoi se fasse en 4 fois, câ??est à dire un octet aprÚs lâ??autre. Par contre, il demande que ce soit lâ??octet de poids faible qui soit présenté en premier. Si lâ??on reprend lâ??exemple calculé précédemment, les différentes octets à charger vont se
présenter ainsi:

Mot de 32 bits: 0D 70 A7 B3

Hex Binaire
1er octet: B3 1011 0011
2Úme octet: A7 1010 0111
3Úme octet: 70 0111 0000
4Úme octet 0D 0000 1101

Ceci est juste pour mémoire car ce nâ??est pas ce mode que nous utiliserons car il requiert un bus complet de 8 bits, denrée particuliÚrement rare dans les microcontrÎleurs récents bon marché.

Le mode série

Cette fois, câ??est le bon...â??
Lâ??entrée se fait sur un seul fil et câ??est suffisant puisque les 32bits vont se succéder à la queue-leu-leu. Câ??est le rÎle de lâ??entrée SERIAL_DATA_ IN pin 25.

Le DDS demande également à ce que le premier bit soit de poids le plus faible. Si lâ??on reprend le résultat trouvé précédemment, le message est le suivant en partant de la gauche:

11001101 00010101 00001110 1011000

Noter lâ??ordre des bits, poids faible de lâ??octet de poids faible en premier. Par contre, lâ??envoi des bits ne doit pas se faire nâ??importe comment : il est nécessaire de les synchroniser avec une horloge. Ce signal sera appliqué sur lâ??entrée W_CLK pin 7. Non seulement lâ??envoi des bits doit être synchronisé avec lâ??horloge de travail, mais encore faut il prévenir le DDS quand le chargement commence et à quel moment il peut
prendre en compte celui-ci. Il faut en effet que la totalité des 32 bits ait eu le temps dâ??arriver dans le registre fréquence...
Câ??est le rÎle de lâ??entrée FQ_UD qui recevra un signal en début et en fin de chargement. A lâ??issue de ce processus qui va demander quelques microsecondes, la fréquence correspondante sera disponible en sortie. Câ??est tout... !

3. INTERFACAGE DU DDS

Toutes les opérations énumérées ci-dessus vont devoir être réalisées de trÚs nombreuses fois : par exemple à chaque mouvement du « bouton fréquence » dâ??un VFO, donc elles doivent être automatisées et effectuées dans un temps minimal. Les 32 bits, le signal dâ??horloge de travail et le signal de validation vont devoir être
générés et lâ??opération sera terminée pour la fréquence définie. Le recours à la logique câblée TTL/MOS pourrait être une des solutions mais le nombre de fréquences différentes serait vite limité. Aujourdâ??hui la technologie nous offre des opportunités beaucoup plus performantes permettant une trÚs grande souplesse de
fonctionnement. Je veux parler ici des microcontrÎleurs. Le mot est lâché et il va falloir faire avec ces nouveaux composants qui deviennent rapidement indispensables!

3.1. LE MICROCONTROLEUR:

Je ne parlerai ici que de la famille des PIC de Microchip qui sont les seuls µcontrÎleurs que jâ??ai expérimentés, de nombreuses application utilisant d'autres types de contrÎleurs sont légions sur le web. Pour faire simple, nous prendrons le plus simple - mais pas le moins performant de la famille- je veux citer le PIC 16F84. Lâ??intérêt de ce composant est dâ??abord son coût (7â?¬ environ) et sa capacité à posséder une mémoire flash câ??est à dire programmable et effaçable à volonté de 1 Koctet environ (1024 mots de 14 bits en réalité).
Le PIC possÚde 13 entrée/ sorties réparties en 5 fils pour le port A (RA0 à RA4) et 8 fils pour le port B (RB0 à RB7). Je passe sous silence les fonctions complémentaires (timer, interruption...) dans lâ??immédiat.
Cette pléthore dâ??entrées /sorties va être largement suffisante pour commander le DDS qui ne requiert que 3 fils. Par contre, si lâ??envie nous prenait de disposer dâ??un affichage digital de la fréquence de sortie, les autres E/S nous serait dâ??un grand secours. Si par ailleurs, il était nécessaire de changer la fréquence du DDS (pour recevoir des stations différentes par exemple dans le cas dâ??un VFO), encore une fois les E/S seraient
les bienvenues pour gérer un codeur mécanique ou optique par exemple. Jâ??arrête la lâ??énumération car je suis persuadé que ça vous donne des idées...!

Dâ??autre part, le PIC lui aussi requiert un signal dâ??horloge qui peut être fourni par un
quartz ou un simple réseau RC. Une alimentation +5V permet dâ??alimenter le PIC
(quelques mA).
Dans lâ??immédiat on en reste au DDS dans sa mise en oeuvre la plus simple.

3.2. INTERFACAGE MATERIEL DDS/µcontrÎIeur:

Il faut donc relier le DDS avec le PIC.
Comme évoquée à lâ??instant, cette liaison est des plus simple puisque 3 fils de commande
sont seulement nécessaires pour piloter le DDS:

SERIAL_DATA vers RA0
W_CLK vers RA1
FQ_UD vers RA2

Le choix des trois ports RA0 à RA2 est complÚtement arbitraire, on décide ce que lâ??on veut parmi les ports disponibles.
La platine dâ??essai se présente alors sous cette forme:

On remarquera quelques points particuliers :

- Les alimentations :

A partir dâ??une source 15 à 18V (petit bloc secteur), deux régulateurs fournissent le +12
et le +5V.
Lâ??alimentation +12V est uniquement destinée à lâ??amplificateur de sortie.
Lâ??alimentation +5V est séparée en deux pour fournir le +5V aux parties analogique
(+5A) et digitale (+5D). On notera les condensateurs C4 à C7 qui seront placés prÚs des
fils dâ??alimentation du 9850.

- Les liaisons PIC/DDS :

Pour ne pas charger le schéma, les fils entre le PIC et le DDS ne sont pas figurés. Il suffit de repérer les entrées sorties de lâ??un et de lâ??autre pour « visualiser » les connexions.
Autant dire que ce schéma nâ??autorise aucune commande externe pour faire varier lafréquence ni son affichage. Il pourra être cependant utilisé pour réaliser un oscillateur à fréquence fixe dont la valeur pourra cependant être changée ou ajustée selon le besoin.

3.2. LOGICIEL:

Evidemment, il faut en passer par là. Ce nâ??est pas bien compliqué, puisque jâ??y suis arrivé sans vraiment être un spécialiste, ni tombé dedans tout petit.
Lâ??éditeur utilisé est MPLAB, lâ??assembleur est MPASM disponible tous deux en libre service sur le site Microchip. Attention les fichiers ont une taille respectableâ?Š
Que faut-il faire? Résumons les différentes étapes:

3.2.1. générer les 32 bits, soit 4 octets.

Il nâ??y a pas plus simple. Il suffit de charger le contenu des 4 octets (hexa) dans 4
emplacements mémoire que lâ??on aura définis préalablement. Nous les appellerons
ACCO, ACC1, ACC2 et ACC3. On en prendra un cinquiÚme ACC4 qui sera toujours à
zéro pour faire plaisir au DDS afin de ne pas le désorienter...! (en réalité ce 5Úme octet
permet de commander la phase du signal de sortie, sans intérêt pour notre application).

Pour lâ??exemple, la valeur retenue sera chargé dans ces variables dÚs lâ??initialisation du
PIC par la fonction â??defineâ?�:

define ACCO hâ??B3â??
define ACC1 hâ??A7â??
define ACC2 hâ??70â??
define ACC3 hâ??0Dâ??
define ACC4 0

Voilà, câ??est fait une fois pour toute ; pour changer de fréquence, il faudra modifier ces
valeurs, manuellement pour lâ??instant.

3.2.2. créer lâ??horloge de travail:

Il nâ??y a pas plus simple. ..Nous avons décidé que lâ??entrée W_CLK du DDS serait attaquée par RA1.
Il suffit de mettre alternativement ce bit à 1 puis à 0 pour créer un magnifique signal carré en sortie de RA1.
Deux instructions pour cela sont nécessaires:

BSF RA1 (Bit Set variable) met le bit de RA1 à 1
BCF RA1(Bit Clear variable) met le bit de RA1 à 0

Pour recommencer, il suffit de se repositionner à la premiÚre instruction.

3.2.3. créer le signal de validation:

Câ??est identique à ci-dessus. Nous avons choisi RA2 pour attaquer lâ??entrée FQ_UD du DDS.
Les deux instructions utilisées précédemment vont remplir le même rÎle.

BSF RA2
BCF RA2

3.2.4. envoi des 32 bits:

Comme nous lâ??avons vu tout à lâ??heure, le microcontrÎleur ne peut traiter que des octets, ses registres étant limités à 8 bits. Câ??est la raison pour laquelle nous avons découpé le mot de 32 bits à destination du DDS en 4 octets (ACC0. . .ACC3). Il sera donc nécessaire de charger séquentiellement ces 4 octets en commençant par le bit le moins significatif (LSB) de lâ??octet de poids le plus faible.
En interne du microcontrÎleur, les bits sont dans les registres mémoire ACC0..ACC3 de 8 bits, il sera donc nécessaire des les sortir un par un, puis de les envoyer lâ??un aprÚs lâ??autre vers le DDS.
Lâ?? opération de chargement doit se faire en synchronisme avec lâ??horloge de travail et le signal de validation.
Ceci ne complique pas vraiment la procédure mais nécessite de séquencer les différents évÚnements et particuliÚrement lâ??horloge et les données.
Le DDS prend en compte la donnée (1 bit du message) sur un front montant de lâ??horloge de travail.
La procédure globale est la suivante:

- lire lâ??octet de poids faible ACC0
- décaler lâ??ensemble des bits vers la droite
cette opération permet de récupérer le bit â??sortie de lâ??octetâ?? dans un bit dâ??un registre
spécifique du µcontrÎleur: la carry (ou retenue). Cette carry contiendra donc alors le bit
à envoyer au DDS dont la valeur sera...binaire, 1 ou 0.

- faire monter lâ??horloge de travail à 1
- mettre lâ??horloge de travail à 0

Voilà pour le premier bit. Il faut refaire lâ??opération 32 fois, sachant que tous les 8 bits, il faudra changer dâ??octet (ACCO puis ACC1 .. ..ACC3).

Voyons en détail le sous programme ci-dessous:

LDBYTE Câ??est le nom (étiquette) du sous-programme qui permettra de lâ??appeler

MOVLW 8 Pour charger un octet bit par bit, il faut faire
lâ??opération 8 fois. On se servira dâ??un
compteur de bit initialisé à la valeur 8.
Cette instruction charge le registre W du
PIC avec la valeur 8.

MOVWF COUNT Le registre W étant utilisé en
permanence pour les besoins internes du µ,
on se dépêchera de transférer le contenu de
W dans un registre temporaire mémoire : COUNT


BCF W_CLK Instruction décrite précédemment, lâ??horloge
de travail est mise à O

BIT BCF DATA La sortie DATA (entrée SERIAL du DDS)
est mise à zéro



RRF TEMP,1 Lâ??octet contenu dans TEMP est décalé dâ??un
rang vers la droite et tombe dans la CARRY



BTFSC CARRY_BIT Voyons le contenu de la CARRY (1 ou 0).
Si 1 on passe à lâ??instruction suivante (BSF
DATA), sinon on la saute pour aller
directement à BSF W CLK


BSF DATA Si 1 on met le data à 1 sinon on ne fait rien
data=0 puisquâ??il est déjà à 0


BSF W_CLK On fait monter à 1 le signal de lâ??horloge de travail.



BCF W_CLK On le fait redescendre pour terminer


DECFSZ COUNT,1 Le 1er bit a été envoyé, on décrémente le compteur de bit



GOTO BIT Et on retourne charger le bit suivant à lâ??étiquette BIT pour
lâ??instruction
BCF _DATA

RETURN Tant que le compteur de bit nâ??est pas à 0, on
continue à charger les bits les uns aprÚs les
autres. Les 8 bits chargés, on passe à lâ??octet
suivant

Afin dâ??économiser les variables (la place mémoire), les 4 octets seront tour à tour transférés dans une variable temporaire TEMP qui sera utilisée par le programme précédent LDBYTE. Câ??est le but du sous-programme suivant :

LD9850



MOVF ACCO,W

MOVWF TEMP

CALL LDBYTE transfert ACCO dans le registre W transfert W
dans TEMP appelle le S/P de chargement dâ??un octet

MOVF ACC1 ,W

MOVWF TEMP

CALL LDBYTE transfert ACC1 dans le registre W transfert W
dans TEMP appelle le S/P de chargement dâ??un octet

MOVF ACC2 ,W

MOVWF TEMP

CALL LDBYTE transfert ACC2 dans le registre W transfert W
dans TEMP appelle le S/P de chargement dâ??un octet

MOVF ACC3 ,W

MOVWF TEMP

CALL LDBYTE transfert ACC3 dans le registre W transfert W
dans TEMP appelle le S/P de chargement dâ??un octet

MOVF ACC4 ,W

MOVWF TEMP

CALL LDBYTE transfert ACC4 dans le registre W transfert W
dans TEMP appelle le S/P de chargement dâ??un octet
BSF FQ_UD

BCF FQ_UD

RETURN


Une fois les 4 octets(S) sérialisés bit par bit (32/40), il ne reste plus quâ??à signaler au DDS que lâ??opération est terminée en faisant monté le signal FQ_UD à 1. On nâ??oublie pas de le remettre à 0 pour être prêt la fois suivante.
..

BSF F0_UD set Iatch pulse
BCF FQ_UD reset latch pulse

Il ne reste plus quâ??à introduire ce programme dans le PIC (le programmer) et dÚs le reset, le programme sâ??exécutera en quelques microsecondes.
Le DDS doit alors générer la fréquence de 5, 250 023 MHz.

Bon, ce nâ??est pas extrêmement simple mais ce nâ??est pas bien compliqué. Ce module est le coeur du chargement du DDS et si ce nâ??est pas le seul moyen dâ??y arriver, cette solution est trÚs souple.

Evidemment, ce programme atteint rapidement ses limites car la fréquence générée ne peut être changée que par altération manuelle des 4 variables ACCO à ACC3. Ce serait bien de pouvoir la faire varier facilement par une commande accessible, un bouton par exemple...
Par ailleurs, il serait agréable de connaître la fréquence de sortie car même si on se souvient du contenu des 4 octets, à moins de parler hexadécimal couramment et de faire les conversions octets / fréquence instantanément, il sera difficile de la mémoriser.

4. Lâ??AFFICHAGE DE LA FREQUENCE:

Câ??est une nouvelle étape, pas plus complexe.
Pour rester dans des coûts abordables tout en bénéficiant dâ??un affichage correct, mon choix sâ??est porté sur un afficheur à cristaux liquide (LCD) de 2 lignes de 16 caractÚres chacune.
Il en existe de nombreux modÚles et celui que jâ??utilise couramment est produit par HITACHI.
Il possÚde son gestionnaire dâ??entrées/ sorties et le générateur de caractÚres est intégré et programmable (je lâ??ai utilisé tel quel).

Interfaçage:

Lâ??afficheur qui comporte 16 broches nécessite 11 fils pour sa commande:

- un bus de donnée de 8 fils (1 octet)
- un fil RS (selecteur de registre)
- un fil E (enable)
- un fil R/W qui ne sera pas utilisé

Les 5 autres fils sont utilisés pour lâ??alimentation, le contraste et la masse. Certains modÚle un peu plus coûteux possÚdent un rétro-éclairage bien pratique en lumiÚre ambiante insuffisante qui mobilisent alors les deux fils restants.
La commande dâ??un tel afficheur nâ??est pas des plus simple et je ne mâ??étendrais pas davantage dessus car ceci présente peu dâ??intérêt.
Une des difficultés majeure est due à la lenteur de ce composant qui nécessite dâ??attendre entre chaque commande, sous peine dâ??échec.
A savoir que lâ??on trouve des sous-programmes tout prêt quâ??il suffit dâ??adapter (avec plus ou moins de bonheur parfois) à la configuration matérielle utilisée. Pour ma part, jâ??ai entiÚrement réécrit cette partie.
Par ailleurs, compte tenu du faible nombre de port disponible sur le microcontrolleur, il est souvent nécessaire dâ??avoir recours à une extension hardware qui permet de commander lâ??afficheur avec seulement 3 fils. Câ??est le rÎle du 74HC595 utilisé ici.
Lâ??insertion de ce composant permet dâ??économiser les ports dâ??entrée/ sortie mais la complexité du logiciel sâ??accroît un peu (on n'a rien sans rien...!)

Ces 3 fils seront :

- SERIAL DATA IN (on nâ??invente rien)
- CLK_595 (câ??est la W_CLK du DDS..)
- LATCH (câ??est le FQ_UD du DDSâ?Š)

Rappelons à ce moment, que pour le DDS, en lâ??absence de signal FQ_UD, les données chargées ne seront pas prises en compte, câ??est comme si rien nâ??avait été envoyé.
Pour le 595, la rÚgle est la même: tant que LATCH nâ??est pas activé, les données chargées sont ignorées.
Dans cette configuration, rien ne nous empêche de faire transiter les données (SERIAL_DATA_IN) à destination du DDS ou du 595 par le même fil...!

Suite...






 
© 2002 f6blk.net