Electronique > Réalisations > Contrôleur DAC AD1955 001

Dernière mise à jour : 07/08/2011

Présentation

Ce contrôleur permet de configurer deux convertisseurs numérique / analogique (CNA - pour Convertisseur Analogique Numérique - ou DAC - pour Digital to Analog Converter) AD1955 de Analog Devices dans une configuration "double-mono" (un DAC pour la voie gauche et un DAC pour la voie droite) via un bus de liaison de type SPI. Il met en oeuvre soit un PIC 16F628A soit un PIC 12F675 qui comme chacun sait ne possèdent ni l'un ni l'autre de module SPI "hard" intégré. Mais qu'à cela ne tienne, il doit bien y avoir moyen de contourner ce léger problème. Deux schémas sont proposés :
- Schéma 001c : à base de PIC 12F675, version simplifiée... et suffisante pour le besoin de base - Terminé 
- Schéma 001 : A base de PIC 16F628A, version assez complète permettant l'envoi de différentes trames à la demande - Non terminé
Le schéma 001c à base de 12F675 a été élaboré après le schéma 001 à base de 16F628A, ce qui explique son "index".

Avertissement

Pour l'heure, travail uniquement sur la version 001c avec PIC 12F675 / horloge interne 4 MHz.

Schéma 001c - Version simplifiée avec 12F675

Comment donc pourrions-nous faire plus simple !

controleur_ad1955_001c

Connexions à effectuer entre PIC et AD1955
Le PIC dispose de quatre lignes d'E/S qui ont ici été configurées en sortie et qui doivent aboutir aux deux DAC commandés.

Délai à l'envoi des données
La présence d'un réseau RC sur l'entrée GP3/MCLR permet de spécifier un retard de la durée désiré entre le moment où le PIC est mis sous tension et le moment où les données sont réellement envoyées. Cela permet de s'adapter à la configuration électronique mise en oeuvre autour du AD1955. Avec R1 = 100 kO et C1 = 4,7 uF (valeur par défaut du schéma) le retard est d'environ 300 ms. Pour un délai d'une seconde il faudra porter C1 à 15 uF. Si aucun retard n'est désiré, retirer R1, C1 et D1 puis connecter la broche GP3/MCLR du PIC directement au +5 V.

Selection des données à envoyer
Le logiciel du PIC a été écrit pour permettre l'envoi de deux ensembles de trames différentes, celles sélectionnées dépendent de l'état logique de la broche GP2 du PIC. Cela n'est bien sûr absolument pas indispensable, mais pourquoi ne pas se permettre cette folie vue qu'il restait une broche libre qui ne servait à rien ? Disons aussi pour être franc que cela m'arrangeait bien car deux personnes ayant travaillé sur le sujet proposaient d'envoyer des trames différentes. En procédant ainsi on fait plaisir aux deux ;-)

Mode d'envoi des données
Le logiciel livré permet d'envoyer les données selon deux procédés :

Les deux méthodes conviennent, choisissez celle que vous préférez en adaptant le code source comme désiré : dans la procédure "AD1955_SendData", constante bUseSoftSPI à positionner à TRUE pour usage des routines Soft_SPI, constante bUseSoftSPI à positionner à FALSE pour envoi "manuel".

procedure AD1955_SendData;
const
bUseSoftSPI = true;
begin
// set the AD1955 in mono mode
if bUseSoftSPI then
AD1955_SendData_WithSPIRoutine
else
AD1955_SendData_WithoutSPIRoutine;
end;


A noter toutefois que d'un point de vue régularité des timings, l'usage de la procédure Soft_SPI donne de meilleurs résultats et qu'on peut donc l'adopter de fait. Le graphe qui suit montre les changements d'état logique opérés sur les lignes du PIC configurées en sortie, avec usage des routines Soft_SPI.

controleur_ad1955_001c_graph_001a

Dans un premier temps les données envoyées sont destinées au premier DAC (ligne CSL passant à l'état logique bas), puis dans dans un second temps les données envoyées sont destinées au second DAC (ligne CSR passant à l'état logique bas).

Schéma 001 - Version évoluée avec 16F628A

A la base, un besoin simple : celui d'envoyer quelques bits de données au DAC AD1955 pour le configurer en mode mono. Mais comme j'aime bien compliquer les choses...

Version non finalisée bien que fonctionnelle dans le principe !


controleur_ad1955_001

Pourquoi autant de boutons poussoir ?
Comme un seul bouton poussoir suffisait pour envoyer les données requises, j'en ai ajouté 15 autres, histoire de penser évolution. Mon implacable logique a encore frappé ! Mais rassurez-vous, des seizes boutons SW1 à SW16, on peut très bien n'en câbler qu'un seul. Le tout étant bien sûr de garder le bon, n'est-ce pas... Rassuré ?

Principe général de fonctionnement
Le logiciel du PIC a été écrit pour envoyer des informations logiques sur quatre fils, de la même façon que cela a été fait pour la version 001c à base de 12F675. J'aurais très bien pu me contenter d'écrire quelques lignes de codes envoyant les données requises pour passer le DAC en mode mono, mais je me suis demandé s'il n'y avait pas là l'occasion de faire un peu plus... J'ai donc prévu dans le logiciel de pouvoir modifier très simplement l'ensemble des paramètres de configuration du DAC, et pas seulement celui qui régit le mode stéro ou mono. Vous comprendrez sans doute mieux maintenant pourquoi 16 boutons poussoirs et non un seul...

Vérification initialisation PIC
Oh, une broutille. Une simple LED connectée à la ligne RA4 du PIC et qui clignote deux fois à la mise sous tension. C'est tout bête à faire et ça permet de voir si après programmation du PIC les paramètres des "fusibles" horloge et MCLR étaient bien positionnés. Comment, vous ne vous êtes jamais trompé de ce côté là ? Comme je vous envie...

Logiciels du PIC

L'archive qui suit intègre uniquement la version 001c à base de 12F675 (je peux fournir l'autre version pour 16F628A sur demande mais je n'en vois pas trop l'intérêt).
Contrôleur_ad1955_001.zip - (version du 07/08/2011)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuits imprimés

Non réalisés.