Bonjour
j'aimerais savoir comment implanter le CAN ( le convertisseur A/D ) avec le compilateur CC5X ( mon programme est en C )
Merci
-----
Bonjour
j'aimerais savoir comment implanter le CAN ( le convertisseur A/D ) avec le compilateur CC5X ( mon programme est en C )
Merci
Salut, je te copie ici le code source de la partie CAN de mon programme sous cc5X,
la fonction init A2D initialite le convertisseur (reférence toi au datasheet pour les pin que tu souhaite mettre en entrée, dans mon cas c'est RA0)
La fonction convertion effectue la convertion et retourne la valeur du registre ADRESL ( je ne sais pas si le delay de 1ms est optimal a toi de voir j'ai pas encore trop regarder l'effet de cette tempo)
void init_A2D(void){
//Configure l'horloge pour la converstion
ADCON1 = 0b01010000;
// Bit de justification à droite
//ADFM = 1;
// Registres de mise en place des pin en mode Entrée Analogique
ANSEL = 0b00000001;
//ANSELH = 0b00000000;
// Registe de controle pour justification, voltage reference et channel ou effectuer la convertion.
ADCON0 = 0b10000001;
}
uns16 Convertion (void){
delay_ms(1);
ADCON0.1=1;
while (ADCON0.1 == 1){
}
return ADRESL;
}
Merci de ta réponse
pourrais tu juste m'expliquer ton programme ? à part la configuration des 3 registres, je comprends pas le reste. ( enfin la configuration des registres, je sais pas car on a pas le même pic )
et que fais tu de ADRESH ?
Merci
Mon programme reprend les consigne du datasheet
tu place le bit ADCON0.1 à 1 pour demmarer la conversion
quand elle est fini le bit repasse automatiquement à zéro.
A partir de la soit tu met en place une interruption soit tu fait une boucle qui attend que le bit soit revenu à 0 (ce que je fait dans mon cas).
ADRESH soit tu le récupere dans une variable quand tu apelle la fonction soit tu l'envoi par le port série c'est comme tu veut, dans ton programme principal tu peut faire
uns16 converted = Convertion();
et tu récupère la conversion dans la variable converted
pour les registres de configuration la seule chose qui puisse t'aider c'est le datasheet, mon programme ne fait qu'adapter le datasheet à mon cas.
J'espere que j'ai répondu à tes questions, si jamais n'hesite pas
ce que je veux faire : je vais utiliser Vdd comme valeur de référence, et si je dis pas de bêtises, GP1 en entrée pour la tension à relever.
Donc disons que je veux comparer par rapport à 530 points ... comment pourrais je mettre ça en place dans le programme ? Dois je utiliser ADRESH et ADRESL pour ça, ou y a-t-il plus simple ?
Merci
Vous ne parlez pas du même PIC.
Le 12F675 n'a pas de registre ANSELH.
Marc, as-tu regardé le cours de Bigo sur le 876 ? Il parle du CAN.
ah oué, c'est pas aussi simple
Bon, c'est de l'assembleur, pas du C malheureusement ( bigonoff n'utilise pas ADRESH et ADRESL !? bizarre
ANSELH est commenté
sinon, bigonoff ne donne pas d'exemple sur adresh et adresl :s donc ca m'avance pas trop là :s
Je viens de feuilleter la révision 15 du cours 2 de Bigo.
Tu vas voir à partir de la page 203, il parle de la conversion.
Paragraphe "19.16 L'utilisation pratique du convertisseur" devrait t'aider.
La chapitre sur le CAN va jusqu'à la page 248, de quoi occuper un dimanche AM.
j'ai trouvé ici un exemple d'utilisation du CAN avec cc5x : http://www.aix-mrs.iufm.fr/formation...0en%20main.pdf
ah bah c'est pas vraiment un exemple en fait :s
bon, dis moi : si on justifie a gauche, est ce que ça suffit dans ce cas d'utiliser ADRESH et pas ADRESL ? Par exemple 531 points représente en binaire 1000010011
Donc comme ADRESH contient le bit de poids le plus fort ( si j'ai bien compris ), arrivé à 531 points, ADRESH sera égale à 10000100 ( sans le 11 ) c'est ça ? ( ou j'ai rien compris a l'histoire des poids fort/faible ? ) donc ADRESL contiendrait 11 ( mais elle ne serait pas utilisée)
Merci
En justifiant à gauche, c'est comme si tu faisais une conversion sur 8 bit si tu ne tiens pas compte de ADRESL.
mais alors ça peut pas marcher ?
et je fais comment alors ? donc si je fais une "conversion sur 8bits", Vdd ne sera pas = 1023 points mais = 255 points c'est ça et donc le produit en croix devra etre fait par rapport à 255, c'est ça ?
mais c'est bien de faire ça ? je perdrais pas en précision ou ... ( car ADRESL ne sera pas relevé )
Soit tu fais une conversion sur 10 et tu utilises les 2 registres ADRESL et H, soit tu fais une conversion sur 8 bit, tu justifies à gauche et tu utilises ADRESH.
De toute façon, il faut lire Bigo.
oui j'ai lu, bon faut que je lise encore ^^
sinon, mon raisonnement est juste ou faux ?
Si tu travailles sur 8 bit, la précision sera forcément moindre.
ah ok ... mais je vois pas comment faire pour l'écrire en C, il est la le problème.
y a-t-il un moyen de "convertir" une variable binaire en hexa ou décimale ? Je veux dire, les variables ADRESH et ADRESL sont des variables en binaire. T'es d'accord ?
car il me refuse lebon c'est normalCode:if ((ADRESH==0b10000100).(ADRESL==0b11000000))
Mais je vois pas comment faire ... si je déclare 2 variables : char adresh; et char adresl; et que je mets ADRESH=adresh; et ADRESL=adresl; ca pourrait marcher ? J'aurais alors une valeur en décimale n'est ce pas ?
Aucune idée, désolé.
Variables déclarées :Code:For I = 0 To 3 ;acquisition de 4 valeurs TabTemp [I] = ADIn 0 ;mesure LM335 DelayMS 50 Next
TabTemp : tableau de 4 variables de type word (16 bit)
i : octet
ADIn 0 : instruction permettant d'acquérir la tension présente sur AN0.
mais tu te sers pas de ces 2 variables :s ce qui corse ma tâche :s
je suis en train de me dire si je vais pas mettre le comparateur plutôt que le CAN ^^' ( dommage )
Je ne m'en sers pas parce que le compilateur se débrouille.
Il lance la conversion et écrit le résultat où je lui dis de le mettre.
Ton C me semble léger, heureusement que le Basic existe !
Bonjour marc2009,
Si je comprends ta question, il te faut définir une variable 16 bits :
uns16 tmp;
Puis faire cette affectation :
tmp.high8 = ADRESH;
tmp.low8 = ADRESL;
La variable tmp contient alors le résultat de la conversion ...
Bonne journée, mictour.
Bonjour mictour
merci pour ta réponse. Alors si j'ai bien compris, avec ce que tu m'as écrit, j'aurai le résultat de la conversion dans la variable 16bits tmp, c'est ça ? Mais le résultat sera-t-il en binaire ou en décimale ?