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.
- Version 001c avec PIC 12F675 : les
données requises par les DAC sont bien produites par le PIC mais il
reste à vérifier que les DAC les digèrent bien. Tests et résultats des
tests après validation dans circuit cible avec les deux DAC AD1955 (attente résultats finaux de la part d'un utilisateur).
- Version
001 avec PIC 16F628A : commencée mais suspendue jusqu'à validation de
la version 001c avec 12F675. Même si validation OK avec 12F675, le
développement de la version 001 avec 16F628A ne sera poursuivi
que s'il y a un intérêt à le faire (lire s'il y a de la
demande).
Schéma 001c - Version simplifiée avec 12F675
Comment donc pourrions-nous faire plus simple !
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.
- Data = SPI Data, à connecter en même temps sur l'entrée
CDATA (broche
24) du premier AD1955 (voie gauche) et sur l'entrée CDATA (broche 24)
du second AD1955 (voie droite).
- Clock = SPI Clock, à connecter en même temps sur l'entrée
CCLK (broche
26) du premier
AD1955 (voie gauche) et sur l'entrée CCLK (broche 26) du second AD1955
(voie droite).
- CSL = Chip Select Left, à connecter sur l'entrée
CLATCH
(broche 25) du premier
AD1955 (voie gauche)
- CSR = Chip Select Right, à connecter sur l'entrée
CLATCH
(broche 25) du second
AD1955 (voie droite)
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 ;-)
- Broche GP2 à la masse : envoi des données selon A. Ciuffoli
- Broche GP2 au +5V : envoi des données selon Max
Mode d'envoi des données
Le logiciel livré permet d'envoyer les données selon deux procédés :
- soit en utilisant les routines logicielles SPI
(Soft_SPI_Write) de l'éditeur MikroPascal que j'utilise;
- soit en envoyant "manuellement" les bits de donnée les uns
après les autres.
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.
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 !
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.