besoin aide CNA R2R 16 bits...

Jul 15, 2009 66 Replies

On Jul 16, 5:59 pm, "GzavSnap"

Attends : si son CNA 8 bits fonctionne, son CNA 16 bits doit fonctionner aussi.

Vede, voici un test pour lever le doute qui subsiste entre le fichier WAV et le CNA 16 bits, en testant juste le CNA :

Un bout de code avec une variable non signee sur 16 bits, un compteur que tu incrementes a chaque tour de boucle. Ecris ses MSB et LSB vers le CNA : en sortie tu dois avoir une dent de scie bien lineaire, sinon c'est ton CNA qui deconne.

void main(void) { unsigned int u =3D 0; // compteur

// ... les inits de ton PIC

while(1) // forever { PORTD =3D u >> 8; // MSB PORTC =3D u & 0xFF; // LSB u++; // increment du compteur

// ajoute une une tempo ici ... } }

vede a ecrit

alors l'origine semble fiable ;o)

Puisque tu semble etre satisfait du R2R en wav 8 bits sur un seul port out, j'essaierai pour une levée de doute sur pb synchro de distribuer le meme signal (wav) 8 bits sur les 2 ports prevus pour le 16 bits en ne connectant le reseau R2R que sur les bits odd ou even des 2 ports (ou autre config) Rvl

Jean-Christophe se fendait de cette prose :

L'idéal étant un signal en dent de scie (rampe).

LeLapin

nt.

Je pense qu'un souci majeur de Vede est justement qu'il n'a pas d'oscilloscope, sinon ce serait r=E9solu depuis longtemps. ahhhhh qu'est-ce que j'ai pu m'emmerder avant d'acheter mon tektro d'occa= sion !

--=20

formatting link
/
formatting link

le=20

je plussoie all=E8grement.

yg

--=20

formatting link
/
formatting link

et comme l'a test=E9 vede, le code avec xor $80 fonctionne mieux qu'avec la valeur absolue.

ouais, attends, il doit rester une bouteille de champagne dans un = coin...

on peut raisonner sur autre chose que des concepts ? :-)

en m=EAme temps, le jour o=F9 plus personne ne pourra ronchonner sur internet, =E7a fera tout bizarre...

orie des nombres...

) je crois pas, non.

e ? d'un autre c=F4t=E9, il vient de dire que le code avec xor $80 ne fonctio= nne pas tr=E8s bien donc je soup=E7onne un probl=E8me autre part. et sans oscillo on n'ira pas loin.

non sign=E9.

je suis d'accord. d'ailleurs c'est une op=E9ration que je connais depuis assez longtemps pour reconnaitre quand je dois l'utiliser, sans me poser de question.

a sortie attend.

litude,

la solution est simple : un xor et au lit !

si : quelle est la valeur absolue de -32768 pour un entier 16 bits ?

moi aussi mais pour d'autres raison. et l=E0 je viens de me r=E9veiller :-/

on a la r=E9putation qu'on se fait, hein :-)

--=20

formatting link
/
formatting link

"vede" a écrit dans le message de news: snipped-for-privacy@k30g2000yqf.googlegroups.com...

il est de toute façon illusoire d'esperer la qualité 16bit, à la louche les 4 derniers bit sont noyés dans le bruit analogique de la sortie...

ou alors AOP de précision, plan de masse impec, etc...

tu peux trouver un DAC 10 ou 12 bit moins cher et suffisant...

"Jean-Christophe" a écrit dans le message de news: snipped-for-privacy@y7g2000yqa.googlegroups.com...

c'est pour ce genre de gag qu'il y a des composants tout fait avec des latch et tout ce qu'il faut...

mais c'est super pédagogique sa démarche...

On Jul 16, 11:52=A0pm, whygee

Pas d'oscillo ? Bon, une autre solution : une tempo elevee dans la boucle, pour avoir le temps de voir evoluer lentement la tension en sortie du CNA avec un voltmetre. La tension doit augmenter lineairement, puis retomber au minimum lors du passage du compteur de 65535 a zero.

Ou encore : reboucler la sortie du CNA vers un CAN, et par soft comparer la valeur du CAN avec la valeur ecrite sur le CNA ... pour toute valeur de 0 a 65535.

Jean-Christophe se fendait de cette prose :

Encore faut-il ne pas avoir le même problème sur l'ADC :)

LeLapin

Jean-Christophe, le 16/07/2009 a écrit :

C'est effectivement limpide. Un signal audio de la vraie vie à valeur moyenne nulle échatillonné en complément à 2. Si c'est effectivement ça qui se passe, ce qu'il faut faire est évident. Il faut ajouter 0x8000 à la valeur, sans se préoccuper de la retenue. Si l'outil de calcul est basé sur des mots de 8 bits, il suffit d'ajouter 0x80 (10000000b) à l'octet de poids fort. Tout ceci revient à inverser le bit de poids fort du mot de 16 bits, donc le bit de poids fort de l'octet de poids fort. Visuellement, l'addition correspond à "monter" le signal de

32767, avec effet "compteur kilométrique" (65535 + 1 = 0, etc.). L'inversion correpond à "échanger" la bande 0 .. 32767 et la bande 32768 .. 65535. Pour inverser un bit, on peut utiliser un XOR (OU exclusif) avec 0x8000 ou 0x80.
Pierre Maurette

On Jul 17, 10:45=A0am, LeLapin

Y'en a un deja integre dans son PIC ;-)

j'espere que vede à bien pensé à utiliser 2 ports de sortie de meme techno et pas des ports avec des technos differentes mixée Rvl

me=20

hmmmm je pense =E0 un truc con : son PIC aurait-il des p=E9riph=E9riques multiplex=E9s avec les broches de= son DAC ? si le code d'initialisation est mauvaise alors les bits en sortie sont ma= uvais, ce qui se v=E9rifie facilement avec des LEDs ou un voltm=E8tre.

yg

--=20

formatting link
/
formatting link

me

son DAC ?

uvais,

Bonjour =E0 tous,

bon ben =E7a y est, =E7a fonctionne ;O] avec le sch=E9ma R2R pr=E9sent=E9 d=E9s le d=E9but

formatting link

et le code: Mmc_Fat_Read(caracter) mlsb =3D caracter Mmc_Fat_Read(caracter) mmsb =3D caracter xor 0x80 PORTB =3D mmsb PORTD =3D mlsb

"bizarrement", il faut envoyer le msb sur le portB...

mais bon, sans =E7a, la qualit=E9 n'est pas vraiment au rendez vous...la restitution est m=EAme moins bonne qu'avec un fichier en 8 bits...notamment =E0 cause de la "faible" vitesse de mon PIC (40Mhz) et de la lourdeur de la librairie SPI-FAT-SD...

encore merci =E0 tous pour vos contributions, qui m'ont permis d'y arriver ;O]

bon'soir=E9e, vede ;O]

vede se fendait de cette prose :

Tout ça pour ça... ;)

LeLapin

Bonsoir =E0 tous,

ben oui....je peux rigoler?

en 17xx on m'aurait dit, textuellement : ach=E9te un ane ;O]

vede :O]

re

une autre:

tu fais fuir mes carottes .... LeLapin

;O] vede :O]

une autre:

L'eusses-tu cru, oh homme, que tu fusses là peint ?

Vincent

bon ben une derni=E9re alors:

vincent mit l'=E2ne dans un pr=E9s, et s'en vint dans l'autre...

combien y-a-t-il d'=E2ne(s)

vede ;O]

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required