Rechercher
Produits
Mon Elektor
|
|
Sujet: generation mot de 16bit
|
| Auteur |
Message |
|
IIII
26 messages
 De passage
|
11-07-2011 10:41
Bonjour à tous,
Je dois générer des mots de 16bits. Pour préciser un peu, je vais d'abord vous présenter rapidement mon projet, puis ce que je veux générer.
Mon Projet : construire un lecteur cd hifi.
Je pars d'une mécanique-lecteur optique robuste qui sort le signal numérique à envoyer sur un dac stéréo. J'ai donc routé un Dac à base de deux AD1955 que je veux faire travailler en mode "mono" (cad que chaque AD1955 ne s'occupe que d'une seule des deux voies en stéréo). Tout a été routé, imprimé, soudé.
Mon besoin :
Voila la chose qui me reste à faire : programmer les AD1955 de mon montage pour les passer en mode "mono".
Pour cela chaque AD1955 doit recevoir 1 mot de 16bits, et le Bitclock, et le Wordclock (c'est un port série).
Je veux générer 2 mots de 16 bits différents : 1 mot pour le DAC de la voie gauche, 1 mot pour le DAC de la voie droite.
1er mot : 0 0 00 10 01 00 00 00 00
2eme mot : 0 0 00 11 01 00 00 00 00
Ma demande :
On m'a dit que je pouvais faire cela très facilement avec un PIC. Mais je ne sais pas du tout par quel bout le prendre, mais alors vraiment pas. J'ai fait pas mal de recherche, mais il y a tellement d'informations sur les PIC que je n'aboutis à rien. J'aimerais que vous m'aidiez à réaliser cela. A savoir, me conseiller quel PIC prendre, me conseiller sur le routage des ports, et m'aider à coder le PIC - je sais, ca fait beaucoup de choses, mais je ne vois pas trop comment faire autrement.
J'espère que ma demande est suffisamment claire.
Je vous remercie en tout cas de votre attention.
En vous souhaitant une bonne journée.
Max.
|
|
Totofmex
18 messages
 De passage
|
14-07-2011 20:47
Hola,
Si tu veux utiliser les PIC et si tu débute sur ce microcontrôleur, je te conseille le cours de BIGonoff.
C’est de la programmation en assembleur, mais cela ne pose pas de problème car le cours est très bien fait.
Si tu veux programmer en C, il y a un livre (de ce site) « Programmation en C des microcontrôleurs » il est très bien, mais par contre c’est avec des AVR d’Atmel.
A+
|
|
IIII
26 messages
 De passage
|
17-07-2011 23:22
je te remercie, je vais regarder le cours de BIGonoff.
Je reviendrai poser des questions si j'ai des soucis.
Merci bien.
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
18-07-2011 11:43
Bonjour Max,
il faut que je tombe sur ce sujet pour me rappeler que le courrier que tu m'as envoyé à mon adresse perso (pour ce besoin précis) est toujours en train de dormir...
Je te proposerai une solution à base de PIC, comme je l'avais envisagé dès le début. La commande des paramètres du AD1955 doit normalement se faire en SPI mais on peut tout à fait se contenter d'envoyer les données requises (tes 16 bits) à la queue-leu-leu sans faire usage de routines SPI (au niveau développement soft uC), il suffit de respecter les timings et ordre d'envoi des changements d'état sur les lignes Data et Clock.
Dans un premier temps je t'écrirai le programme (en Pascal) et te fournirai le fichier compilé (*.hex). Si tu éprouves des difficultés pour programmer ton PIC, je te proposerai mon service (gratuit bien entendu).
A bientôt,
Rémy
|
|
IIII
26 messages
 De passage
|
18-07-2011 21:41
Bonjour Rémy,
content de vous lire. Je suis en train de lire le tuto de BIGonoff, comme me l'a conseillé Totofmex. Je serai comme ca déjà plus en terrain connu!
Sinon j'essaie de me dépatouiller en C avec les fonctions SPI que je peux trouver, mais en programmation je suis pour le moment très rapidement limité.
Je viens aussi de commander un kit de programmation PIC2KIT de Microchip. Ca sera surement plus facile pour moi de tester les fonctions in situ.
Je vous remercie en tout cas du temps que vous me consacrez.
Max
|
|
YMasquel
2503 messages
 Expert
|
18-07-2011 22:15
Bonjour Max,
Le cours de Bigonoff est vraiment excellent et vaut largement les ouvrages publiés jusqu'alors.
Par contre si tu débutes il serait raisonnable d'utiliser un simulateur plutôt que de déverminer "in situ". Pour cela je te conseille l'excellent PIC SIMULATOR IDE. Il n'est pas gratuit mais permet une période d'essai d'un mois gratuit et finalement d'un coût raisonnable. Il dispose de plusieurs outils périphériques permettant de tester facilement le fonctionnement des différents modules matériels et propose un BASIC simple et efficace mais le simulateur fonctionne directement avec les exécutables (.hex) quels que soient les langages utilisés pour leur programmation.
Amicalement, Yves.
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
18-07-2011 22:37
Bonsoir Max,
tu trouveras comme promis un point de départ pour ton projet, via les deux liens suivants :
Schéma
Logiciel PIC 16F628A
Ne soit pas surpris par le nombre de boutons poussoirs sur le schéma, j'ai juste prévu des extensions... Pour ton cas un seul suffira.
Pour le logiciel il te semblera sans doute un peu compliqué car je l'ai écrit avec l'idée d'en faire plus que pour ton besoin initial. Là encore pour extensions éventuelles...
Pour commencer, je t'invite à lire dans un éditeur texte simple (bloc-note de Windows par exemple) le code source du fichier "electronique_controleur_ad1955_001.mpas" dont tu peux temporairement renommer l'extension en "*.txt". Tu localiseras je pense assez rapidement les quelques lignes qui t'intéressent.
Très important :
- la routine relative à l'envoi des signaux horloges et données ne correspond peut-être pas à ce qu'il faut faire, je n'ai pas décortiqué à fond le datasheet du AD1955 !
- je ne peux évidement pas garantir que ce point de départ soit bon. C'est juste une piste à explorer.
Je reconnais que d'un point de vue pédagogique c'est limite car je te mets devant des tas de lignes de code alors qu'il aurait mieux valu commencer "petit". Mais bon...
N'hésites pas à crier si au fond de toi tu sens que c'est la meilleur chose à faire
Et si ce machin fonctionne, ce sera l'occasion d'en faire un petit résumé - je prépare le terrain.
Edit : tu pourras utiliser le logiciel proposé par Yves puisque le fichier *.hex est également fourni.
Cordialement,
Rémy
Modifié par Chimimic - Remy Mallard
le 18-07-2011 22:39 Modifié par Chimimic - Remy Mallard
le 18-07-2011 22:43
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
19-07-2011 08:44
Bonjour Max,
j'ai mal dormi cette nuit, j'étais découragé de t'avoir embarqué sur une solution aussi lourde que celle à base de 16F628A avec sa ribambelle de boutons poussoir et ses dizaines de lignes de code.
Je pense pouvoir me racheter un peu ce matin en te proposant une solution plus "visuelle" et moins tordue à base de 12F675, où la lecture du code te semblera sans doute plus évidente. Comme tu le constateras, on y retrouve tes données à envoyer sous leur forme originelle, sans passer par des noms de paramètres de configuration dont nous n'avons finalement que faire pour le moment...
Schéma
Logiciel PIC 16F628A
Même proposition : commence par lire sous format texte simple le fichier de code source appelé "electronique_controleur_ad1955_001b_12f675.mpas".
Et oublie pour l'instant l'horreur proposée en premier lieu !
Bien cordialement,
Rémy
|
|
IIII
26 messages
 De passage
|
19-07-2011 14:47
Bonjour Rémy,
Je ne sais quoi dire! Je vous tire mon chapeau. Je vais éplucher tout cela bien attentivement. Et je reviendrai si je bloque vraiment.
Mais j'ai déjà une petite question : je viens de regarder le datasheet du PIC12F675. Je crois comprendre que le pin 4 ne peut pas faire office d'envoi de données. Je parle de ca parce qu'il me faut configurer 2 AD1955 : l'un en mode mono left, l'autre en mode mono right (pour faire un dac stéréo). Donc je dois envoyer un mot de 16 bits différents sur chaque AD1955, même si la LRClock et la BClock sont les mêmes pour les deux.
Je peux alors surement utiliser le premier schéma avec le PIC16F628 ? Et tous les boutons, ca ne me gene pas. Si je mets un rail de boutons tirettes, ca prends pas trop de place, ca ne me gene pas. Il faudra juste que j'annote bien ces boutons pour ne pas m'y perdre, mais ca j'ai déjà fait donc ca devrait aller.
Dites moi si je me trompe.
En tout cas, je vous remercie encore!
En vous souhaitant à tous une bonne journée.
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
19-07-2011 16:02
Bonjour Max,
effectivement, la ligne GP3 du 12F675 ne peut qu'être configurée en entrée. Et on ne vas pas s'embêter à ajouter de la logique externe de routage des signaux, qui risque de devenir une vraie usine à gaz.
La solution consistant à employer deux PIC 12F675 pour piloter les deux DAC serait elle aussi un peu lourde, moi-même privilégierais un seul composant programmable pour assurer l'ensemble des tâches.
Sans doute la solution idéale consisterait en effet à déporter dans un 16F628A le code simple actuellement écrit pour le 12F675. Là c'est sûr, pas de soucis au niveau du nombre de lignes d'E/S, et on reste sur une base qui n'encombre pas trop l'esprit !
Viendra le moment des tests, qui confirmeront si les timings attribués aux signaux horloge et données sont conformes pour bonne prise en compte par le circuit de gestion des commandes du DAC. Si vous le souhaitez, je pourrai vous aider à ce moment où il faudra sans doute effectuer quelques ajustements. Je doute en effet que tout fonctionne bien du premier coup... A moins que dans l'analyse des infos du datasheet du DAC ressortent tous les éléments utiles pour un développement pro et réfléchi... ce dont je ne me sens pas capable en ce moment.
Cordialement,
Rémy
|
|
IIII
26 messages
 De passage
|
19-07-2011 17:17
Je vous remercie Rémy. Je me suis un peu équipé pour pouvoir tester des trucs de mon côté.
Sinon la question est peut-être bien stupide, mais pourquoi ne pas proposer d'utiliser les commandes SPI des PIC, comme writeSPI(machin) que j'ai trouvé il y a peu de temps ? Ce n'est pas fiable ? Excusez si la question est stupide.
En vous remerciant.
Max
|
|
IIII
26 messages
 De passage
|
19-07-2011 17:30
Je viens de décortiquer votre programme pour le PIC12F675.
Je comprends mieux ce que vous avez voulu faire : envoyer les mots pour le AD1955 Gauche et le mot pour le AD1955 Droit sur les deux états de bascule du LRClock. Je ne savais qu'on pouvait faire cela, je croyais qu'il fallait obligatoirement les envoyer en parallèle. Mais si c'est le cas, votre solution est bien plus simple et je suis preneur!
Dites moi si je me méprends.
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
19-07-2011 18:46
Max,
pourquoi ne pas proposer d'utiliser les commandes SPI des PIC, comme writeSPI(machin) que j'ai trouvé il y a peu de temps ?
On peut effectivement utiliser cette façon de faire mais pour un besoin aussi "simple" cela ne me semblait pas utile. Il faut noter que l'on peut élaborer des commandes SPI (ou I2C, c'est un peu de la même famille dans l'idée) de façon "matérielle" ou "logicielle". Dans le premier cas le micro-contrôleur doit posséder un module matériel interne adapté (on sait si c'est le cas en consultant son datasheet) pour envoyer les trames avec une commande de type "WriteSPI_Hard", sinon on doit élaborer les trames de façon purement logicielle de style "WriteSPI_Soft". Ce deuxième cas impose une vitesse d'horloge plus élevée et dans certains cas certaines limitations pour les besoins annexes (au niveau interruptions par exemple). De plus, j'avoue avoir été un peu dérouté par la présence de deux lignes d'horloge, là où habituellement on n'en a qu'une.
Je comprends mieux ce que vous avez voulu faire : envoyer les mots pour le AD1955 Gauche et le mot pour le AD1955 Droit sur les deux états de bascule du LRClock. Je ne savais qu'on pouvait faire cela, je croyais qu'il fallait obligatoirement les envoyer en parallèle.
C'est ce que j'ai compris à la lecture du datasheet, mais j'avoue ne pas être sûr de mon coup à 100% à l'heure qu'il est. Je n'ai pas encore assimilé toutes les subtilités de la bête...
Comme je le disais, des tests seront nécessaires et c'est là qu'on va s'amuser
Cordialement,
Rémy
|
|
Anneo
1273 messages
 Expert
|
19-07-2011 23:01
Bonsoir Max,Rémy,
apres lecture de vos histoires j'ai plusieurs choses qui me chifonne.
Envoyer des mots vers l'AD1955 d'accord,mais a quel moment?
Apres un delay au demarage,ou sur commande d'un bouton,impulsion ou autre?
Les mots doivent se termine (b1,b0) par 00 pour registre commande0,par 01 registre commande1,par 10 volume gauche et par 11 volume droite.Mais les mots de Max se terminent tout les deux par 00,or ils vont atterir l'un apres l'autre dans registre commande0 et ce sera le dernier qui va s'impose.
Question de vitesse de transmission il y a un minimum de 50ns periode Clock,pas de maximum.Cad n'importe quel PIC ordinaire peut faire ca en soft sans ce faire des soucis des temps d'execution.
Anne
|
|
IIII
26 messages
 De passage
|
20-07-2011 07:18
Bonjour Anne,
Anneo
Envoyer des mots vers l'AD1955 d'accord,mais a quel moment?
Apres un delay au demarage,ou sur commande d'un bouton,impulsion ou autre?
Si j'ai bien compris le datasheet, le AD1955 doit recevoir ses mots réguilièrement, à savoir à chaque période du LRClock
Mais les mots de Max se terminent tout les deux par 00,or ils vont atterir l'un apres l'autre dans registre commande0 et ce sera le dernier qui va s'imposer.
C'est exactement ce que j'ai compris en lisant le datasheet. Je viens de le relire, et effectivement je comprends la même chose. Je pense qu'il va falloir faire 2 signaux DATA séparés et envoyer l'un sur l'AD1955 de gauche, l'autre sur celui de droite. Et en plus, c'est surement la configuration qui sera "la plus sure" de marcher.
{quote]Question de vitesse de transmission il y a un minimum de 50ns periode Clock,pas de maximum.
Ok, je n'avais pas relevé l'info. Donc la clock de 20MHz est peut-être un peu au taquet. En relisant le programme, je vois qu'on peut mettre une clock de 4MHz sans modifier le programme.
En tout cas, merci Anne.
Au plaisir de vous lire.
Max
|
|
IIII
26 messages
 De passage
|
20-07-2011 07:23
Bonjour Rémy,
Chimimic - Remy Mallard
C'est ce que j'ai compris à la lecture du datasheet, mais j'avoue ne pas être sûr de mon coup à 100% à l'heure qu'il est. Je n'ai pas encore assimilé toutes les subtilités de la bête...
En lisant les commentaires de Anne, j'ai relu le datasheet, et finalement je reviens à ma première compréhension qui est apparement également celle de Anne. Je pense qu'il faut bien 2 signaux DATA séparés, mais avec le meme LRClock et le meme BClock (on pourrait en mettre des différents sur le AD1955 de gauche et le AD1955 de droite, mais pourquoi rajouter des sorties alors qu'on peut faire comme ca?).
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
20-07-2011 09:58
Bonjour Anne et Max,
merci Anne pour ton intervention.
Envoyer des mots vers l'AD1955 d'accord,mais a quel moment? Apres un delay au demarage,ou sur commande d'un bouton,impulsion ou autre?
Je ne suis pas certain qu'il soit nécessaire de les envoyer de façon répétée, un seul envoi des trames au moment de la mise sous tension ou après un léger délai devrait suffire. Mais je me trompe peut-être.
Les mots doivent se termine (b1,b0) par 00 pour registre commande0,par 01 registre commande1,par 10 volume gauche et par 11 volume droite.Mais les mots de Max se terminent tout les deux par 00,or ils vont atterir l'un apres l'autre dans registre commande0 et ce sera le dernier qui va s'impose.
Oui, tout à fait. D'ailleurs dans le code déjà écrit pour le 16F628A, il y a bien distinction des différentes adresses pour les trois registres de conf et de volume. L'envoi de quatre ou six trames au lieu de deux ne posera bien sûr aucun problème.
Question de vitesse de transmission il y a un minimum de 50ns periode Clock,pas de maximum.Cad n'importe quel PIC ordinaire peut faire ca en soft sans ce faire des soucis des temps d'execution.
Sur ce point j'avais un doute. Non pas pour la fréquence max mais plutôt pour la fréquence min. Je n'ai pas très bien saisi la notion de temps minimum requise pour les signaux de commande qui nous concernent. Au début je pensais aussi qu'il n'y avait pas de critère de fréquence min pour les signaux d'horloge et de données, mais les exemples donnés dans le datasheet avec des multiples de la fréquence d'échantillonnage du DAC m'ont laissé perplexe. Peut-être que je me pose des questions qu'il est inutile de se poser. Si pas de soucis côté vitesse min, alors pas besoin du quartz externe sur le 12F675, on utilise l'oscillateur interne 4 MHz et on libère ainsi deux lignes d'E/S qui permettront de commander de façon séparée tes deux AD1955.
La solution finale se profile petit à petit
Bien cordialement,
Rémy
|
|
Loblick
447 messages
 Habitué
|
20-07-2011 10:10
Bonjour à tous!
Ai-je le droit de chambouler toutes vos belles interprétations?
Le bus SPI pour la configuration ne serait-il pas plutôt sur les pattes CDATA (MOSI), CCLK (SPI CLOCK) et CLATCH#(SPI CS#)... La patte MISO du SPI n'étant pas utilisée dans ce cas là.
Qu'en pensez-vous?
A+, Loïc
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
20-07-2011 10:26
Bonjour Loïc,
Qu'en pensez-vous?
Que plus il a de participants qui s'y connaissent et plus on a de chances d'avancer dans la bonne direction...
J'ai peu d'expérience dans les liaisons SPI (j'ai surtout joué avec de l'I2C, quelques lignes écrites à ce sujet sur cette page) et vos aides sont bien entendu les bienvenues.
Merci pour ton intervention,
Rémy
Modifié par Chimimic - Remy Mallard
le 20-07-2011 10:27 Modifié par Chimimic - Remy Mallard
le 20-07-2011 10:28
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
20-07-2011 17:22
Bonjour,
j'ai adapté le schéma et le code logiciel du 12F675 pour exploiter la totalité des ses broches d'E/S, avec donc oscillateur interne 4 MHz (schéma 001c). Désormais les deux lignes GP4 et GP5 peuvent piloter un second DAC de façon totalement indépendante.
Y'a plus qu'à remplir avec les données à transmettre qui vont bien.
Max, as-tu pensé qu'il était possible d'envoyer manuellement les infos aux DAC avec de simples interrupteurs (avec anti-rebond associé) ? En tout cas c'est un test que je ferais si j'avais le CI sous la main... pas besoin de programmateur dans ce cas.
Cordialement,
Rémy
Modifié par Chimimic - Remy Mallard
le 20-07-2011 17:24
|
|
Anneo
1273 messages
 Expert
|
20-07-2011 19:24
Bonsoir à tous,
pour le transport de commandes le AD1955 utilise 3 broches.
24, CDATA (CD)
25, /CLTCH (CL)
26, CCLK (CC)
Ces trois doivent etre relie au 3 sortie PIC.Au repos CL=CC=1.
Pour transmettre des mots,vers une des registres a la fois,ca ce passe comme suite.
CL=0 ;ouvre la communication
Pour 16bit ,a commencer par b15...b0
CC=0
CD=bit x
CC=1 ;bit accepté a la monte du clock
Repete ;16x
CL=1 ;fin du transmission,le mot est avale
Recommence le tout pour un prochain mot.
Avec un PIC a 4MHz les instructions durent assez longtemps on a pas besoin de NOPs ralentiseur.
Anne
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
20-07-2011 19:43
Bonsoir Anne,
le code actuellement écrit pour le 12F675 V.001c fait exactement cela pour la transmission des 16 bits des mots (word) à transmettre, en commençant bien par le MSB.
J'ai modifié l'appellation LRClock en Latch et supprimé les commandes Latch entre chaque envoi de mot.
Merci pour ton aide !
Cordialement,
Rémy
Modifié par Chimimic - Remy Mallard
le 20-07-2011 19:57
|
|
IIII
26 messages
 De passage
|
20-07-2011 20:43
Bonjour à tous,
Chimimic - Remy Mallard
Max, as-tu pensé qu'il était possible d'envoyer manuellement les infos aux DAC avec de simples interrupteurs (avec anti-rebond associé) ?
Je n'ai jamais travaillé avec de la logique, don je ne comprends même pas de quoi il est question, je suis désolé.
Sinon, pour revenir à la séquence à la séquence d'envoi des données, j'ai maintenant quelque chose qui peut aider : je suis rentré en contact avec quelqu'un qui a déjà piloté les AD1955. Il vient tout juste de me répondre. Voici le code qu'il a été utilisé avec un 16F876A, mais il précise qu'on peut également utilisé un 12F679.
#include
__CONFIG(WDTDIS & XT & UNPROTECT & LVPDIS); // freq. clock 4MHz
//__CONFIG(WDTDIS & HS & UNPROTECT & LVPDIS); // freq. clock 20MHz
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
static bit CSL @ PORTBIT(PORTA, 0);
static bit CSR @ PORTBIT(PORTA, 1);
static bit BLK @ PORTBIT(PORTA, 2);
static bit CLK @ PORTBIT(PORTA, 3);
static bit DAT @ PORTBIT(PORTA, 5);
static bit ST1 @ PORTBIT(PORTB, 5);
static bit ST0 @ PORTBIT(PORTB, 4);
static bit VUP @ PORTBIT(PORTC, 7);
static bit VDW @ PORTBIT(PORTC, 6);
#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif
#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */
#if XTAL_FREQ >= 12MHZ
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif
void DelayMs(unsigned char cnt);
void write_SPI(unsigned int data, unsigned int len);
#define MAX_VOL (1023)
#define INC_VOL (1)
void main()
{
int i, flag = 1;
unsigned char buf, curr, SAVEPOR;
int vol = 0, mod_lev = 0, auto_incr = 1;
TRISA = 0b00000000; // All ports A are output
TRISB = 0b00110000; // Only Rb4 and 5 are input
TRISC = 0b11000000; // Only Rc6 and 7 are input
ADCON1 = 0x06; // All posts AN4-7 to digital
PORTA = 0b00000000;
CSL = 1;
CSR = 1;
DAT = 0;
CLK = 0;
//##################################################
//# wait 1 second for power supply startup
//##################################################
BLK = 0;
DelayMs(250);
BLK = 1;
DelayMs(250);
BLK = 0;
DelayMs(250);
BLK = 1;
DelayMs(250);
//##################################################
//# set the AD1955 in mono mode
//##################################################
CSL = 0;
write_SPI(0b00001100, 8);
write_SPI(0b00000000, 8);
CSL = 1;
DelayMs(5);
CSR = 0;
write_SPI(0b00001000, 8);
write_SPI(0b00000000, 8);
CSR = 1;
void write_SPI(unsigned int data, unsigned int n_bit)
{
unsigned int bit_mask;
int i;
bit_mask = 1 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}
|
|
IIII
26 messages
 De passage
|
20-07-2011 20:47
Dans le code, il y avait une boucle pour générer le registre de contole de volume, avec des boutons sur deux entrées. N'ayant pas besoin de cette fonctionnalité, je l'ai enlevé sans sourciller.
Je vous mets le schéma correspondant au code.
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
20-07-2011 21:47
Bonsoir Max,
et bien nous avons là une bonne base de travail.
Comme tu disposes maintenant d'un code testé et fonctionnel, peut-être préfères-tu l'utiliser comme tel ? Dans ce cas plus besoin de continuer avec le 12F675 (ou 12F679) et le soft en MikroPascal que j'avais entamé.
Si malgré tout tu souhaites que je continue de mon côté, fais-moi signe. J'aurai plaisir à avancer dans ce domaine que je ne connais que d'assez loin.
Cordialement,
Rémy
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
21-07-2011 06:52
Bonjour à tous,
et voilà le travail, je pense que cette fois on arrive à terme.
La dernière version logicielle du schéma 001c à base de PIC 12F675 produit les signaux requis pour la configuration des deux DAC séparés.
Schéma 001c
Logiciel schéma 001c du 21/07/2011
Descriptif plus complet
Je me suis permis le luxe d'inclure les deux méthodes d'envoi de données, à savoir avec ou sans usage des routines Soft_SPI de l'éditeur / compilateur que j'utilise. Cela permet de voir comment faire dans les deux cas.
Attention, pour les bits de données envoyés, je me suis calqué sur les valeurs adoptées par A. Ciuffoli pour conf en mode Mono, qui diffèrent des valeurs précisées par Max. S'il y a besoin d'y retoucher, pas de soucis !
Merci encore à Anne, Loïc et A. Ciuffoli pour leur assistance.
Cordialement,
Rémy
Modifié par Chimimic - Remy Mallard
le 21-07-2011 06:57
|
|
IIII
26 messages
 De passage
|
21-07-2011 10:26
Bonjour à tous, bonjour Rémy
merci pour tout ce travail. Je vais surement commencer par utiliser la version éprouvée de A.Ciuffoli (d'ailleurs comment sais-tu que c'est lui-même qui m'a fourni le code ?). Simplement parce que j'aurai possiblement d'autres sources d'erreurs possibles (mauvais routages ? mauvais schémas ? mauvaises soudures ?) et qu'il va bien falloir que je les identifie une par une si c'est le cas!
Je vous remercie à tous pour votre aide. J'aurai surement besoin de vos conseils pour implanter le programme dans le PIC (A.Ciuffoli utilise le protocole ICSP pour pouvoir modifier la config du DAC en direct ; c'est pas bete comme idée mais pour le moment je ne comprends pas comment ca se branche en pratique).
Mais quoi qu'il arrive, je vous donnerai de mes nouvelles, que ca marche ou non. Même si ca me prendra un certain temps pour mettre cela en oeuvre, les vacances arrivant à grands pas.
Encore merci.
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
21-07-2011 10:47
Bonjour max,
comment sais-tu que c'est lui-même qui m'a fourni le code ?
Son nom est marqué en bas du schéma que tu as posté...
J'aurai surement besoin de vos conseils pour implanter le programme dans le PIC (A.Ciuffoli utilise le protocole ICSP pour pouvoir modifier la config du DAC en direct ; c'est pas bete comme idée mais pour le moment je ne comprends pas comment ca se branche en pratique).
Oui, on appelle ça de la programmation "In-Situ", c'est à dire directement là où le composant programmable est implanté, sur la carte finale (et non sur une platine de programmation ou de développement). Ca évite les aller-retours lors de la phase de débogage entre platine de programmation et platine finale, et ça simplifie considérablement les mises à jour ultérieures. Mais on n'est pas obligé de procéder de la sorte. Pour ma part j'établie une liaison entre ma platine de développement et la platine finale pendant toute la période de mise au point. Ensuite quand ça fonctionne je retire l'uC de la platine de développement et le fixe sur la carte fnale. Bien sûr cette méthode ne permet pas la mise à jour in-situ mais dans un cadre "amateur" ça ne me pose pas de problème.
quoi qu'il arrive, je vous donnerai de mes nouvelles, que ca marche ou non.
On espère bien
Cordialement,
Rémy
|
|
IIII
26 messages
 De passage
|
21-07-2011 11:09
Chimimic - Remy Mallard
Son nom est marqué en bas du schéma que tu as posté...
Je n'avais même pas fait attention.
Pour l'ICSP, j'avais effectivement compris à quoi cela servait mais je ne visualise pas encore comment le mettre en oeuvre (comment le connecter, etc.). Mais là je peux creuser sans problème la question car je sais quoi chercher. Et je verrai bien ; si c'est facile à mettre en oeuvre, c'est un plus ; sinon, je ne pense pas que cela soit un moins.
Merci encore.
Max
|
|
Chimimic - Remy Mallard
93 messages
 Visiteur occasionnel
|
24-07-2011 10:49
Bonjour à tous,
Max, j'ai mis à jour le logiciel du 12F675.
- Désormais la broche GP3/MCLR est activée et le retard à l'envoi des données peut être spécifié de façon externe avec un simple réseau RC. Je trouve ça plus souple que de spécifier un retard logiciel au moment de l'initialisation du PIC.
- La broche GP2 qui restait libre permet de décider des trames à envoyer (les tiennes ou celle de A. Ciuffoli).
Descriptif détaillé sur ma page Contrôleur 001 pour AD1955.
Après avoir bossé sur ce petit circuit, je serais heureux de savoir s'il fonctionne correctement sur le terrain, avec tes AD1955 (les trames sont bien émises, ce point est vérifié). Je peux le programmer et te l'envoyer, si l'aventure te tente. Si oui, donnes-moi simplement ton adresse postale via mon adresse mail que tu connais déjà.
Bien cordialement,
Rémy
|
|
|
|