-
14/06/2008 - 20h14 lukes
Configuration des registres ADCON1 et ADCON2
Bonjour,
J'optimise actuellement un programme pour un robot (aspîrateur ) et j'aimerais mesurer une tension sur les entrées analogiques d'un pic 16F877.
Le problème est que je n'arrive pas a configurer les registres ADCON 1 et 2 pour mesurer une tension sur les entrées AN1, AN2 et AN3.
Ayant déja consulter le datasheet, et j'avoue que je n'ai pas trop compris , pourriez vous me dire comment faire ?
Merci d'avance !
-
Poursuivez votre recherche
-
14/06/2008 - 20h52 Gérard
Re : Configuration des registres ADCON1 et ADCON2
 Envoyé par lukes Bonjour,
J'optimise actuellement un programme pour un robot (aspîrateur  ) et j'aimerais mesurer une tension sur les entrées analogiques d'un pic 16F877.
Le problème est que je n'arrive pas a configurer les registres ADCON 1 et 2 pour mesurer une tension sur les entrées AN1, AN2 et AN3.
Ayant déja consulter le datasheet, et j'avoue que je n'ai pas trop compris  , pourriez vous me dire comment faire ?
Merci d'avance ! Bonjour,
C'est normal, il n'y a pas de registre ADCON2. 
Il n'existe que ADCON0 et ADCON1.
Avec quel langage travailles-tu ?
Si c'est en assembleur, voir les notes d'application chez Microchip.
Si c'est en Basic ou C, il faut voir les exemples fournis avec les compilateurs.
-
14/06/2008 - 21h06 lukes
Re : Configuration des registres ADCON1 et ADCON2
Re-bonjour Gérard
Quelle gaffe ! Je m'étais tromper pour les registres, qui sont en effet ADCON 0et 1.
Je programme ce pic en C et j'utilise le compilateur MikroC de Mikroelektronika.
J'ai bien regardé dans les docs fournies avec le compilateurs, il n'ya rien concerant les registres ADCON. Je suis vraiment dans une impasse alors si vous pourriez me donner un exemple ?
Merci beaucoup pour vos réponses
-
14/06/2008 - 22h07 HULK28
Re : Configuration des registres ADCON1 et ADCON2
Salut,
normal, MikroC utilise des fonctions toutes faites à ce niveau.
Tu peux néanmoins créer toi même ces fonctions (c'est même conseillé), car la macro n'étant pas publique tu ne sais pas comment est géré le convertisseur.
Par exemple rien ne précise si la justification est à droite ou à gauche, quel Tad est utilisé...
Si tu cherches juste à faire une mesure il suffit donc d'appeler directement la fonction du compilateur:
La fonction est prédéfinie ainsi:
unsigned int Adc_Read(unsigned short channel);
Adc_Read retourne un entier (0 à 1023)
il suffit alors d'écrire:
res=Adc_Read(0);
Pour recueillir dans la variable res le résultat de la mesure de l'A/D sur An0.
@+
Dernière modification par HULK28 ; 14/06/2008 à 22h14.
HULK
"Pour la carotte, le lapin est la parfaite incarnation du Mal."
Robert Scheckley. -
14/06/2008 - 22h30 lukes
Re : Configuration des registres ADCON1 et ADCON2
Bonsoir !
Merci pour votre réponse, mais j'aimerais savoir comment on configure les registres ADCON 0 et 1 pour justement mesurer une tension aux entréees analogiques par le biais de ADC_read.
Exemple, une citation de mon programme (donc qui ne marche pas ^^)
ADCON0=0b10000100; //C'est à cet endroit que je bloque
ADCON1=0b10100011; //
valeur=ADC_Read(0);
Voila, le problème c'est quelle valeur faut-il mettre au bits de ADCON0 et 1 ?
Merci beaucoup pour vos réponses a+
-
14/06/2008 - 22h52 HULK28
Re : Configuration des registres ADCON1 et ADCON2
Ah oui pardon, il faut en effet configurer ADCON1, c'est ADCON0 dont tu n'as pas à te soucier (la fonction met elle même les bits du registre en position selon la fréquence du quartz et autres paramètres).
Il faut donc juste indiquer dans le registre ADCON1 quelles sorties tu comptes affecter aux A/D.
Donc les bits 0 à 3 selon le tableau que tu trouves dans la datasheet de la doc de ton PIC, et le bit 5 (ADFM) que tu dois mettre à 0 car mikroC fais une justification à gauche.
Donc tu dois par exemple avoir:
ADCON1=0b00000010;
si tu veux mettre AN0 à AN4 en A/D avec Vref+=VDD et Vref-=Vss
@+
HULK
"Pour la carotte, le lapin est la parfaite incarnation du Mal."
Robert Scheckley. -
14/06/2008 - 22h56 HULK28
Re : Configuration des registres ADCON1 et ADCON2
Donc ton programme doit contenir les lignes suivantes:
void main(){
ADCON1=0x02;
TRISA=0xFF;
res=Adc_Read(0);
.........
}
HULK
"Pour la carotte, le lapin est la parfaite incarnation du Mal."
Robert Scheckley. -
15/06/2008 - 21h09 lukes
Re : Configuration des registres ADCON1 et ADCON2
Merci beaucoup Hulk, tu m'a bien aidé !
-
15/06/2008 - 21h15 lukes
Re : Configuration des registres ADCON1 et ADCON2
Re,
Mais si je met ce programme que tu m'a indiqué, je vais pourvoir lire une tension aux 3 entrées analogiques ?
-
15/06/2008 - 22h29 Gérard
Re : Configuration des registres ADCON1 et ADCON2
 Envoyé par lukes Re,
Mais si je met ce programme que tu m'a indiqué, je vais pourvoir lire une tension aux 3 entrées analogiques ? Bonjour,
Je ne pense pas
avec res=Adc_Read(0), tu vas lire RA0
res= Adc_Read(1) devrait lire RA1
Attention tout de même parce que le résultat sera dans res pour les 2 mesures.
Si tu veux garder les 2 (ou 3) mesures, il faut définir une variable pour chaque valeur que tu veux convertir.
exemple : res0, res1 ...
Il faut aussi définir les entrées RA1 ... en entrées analogiques.
-
18/06/2008 - 11h10 lukes
Re : Configuration des registres ADCON1 et ADCON2
Re
Et comment faire pour définir les entrées RA1 en entrées analogiques ?
Merci de m'aider !
-
18/06/2008 - 23h10 HULK28
Re : Configuration des registres ADCON1 et ADCON2
Bonsoir,
C'est dans ADCON1 que tu vas choisir ta configuration (avec les bits PCFG3~PCFG0) , il faut regarder le tableau de la doc du PIC dans la section 11: Analog to Digital Converter.
Ensuite tu places le registre TRISA en configuration d'entrées selon les affectations que tu as fais dans ADCON1.
Par exemple si tu choisis d'attribuer RA0,RA1,RA3 en entrées de mesures et le reste en sorties digitales:
ADCON1=0b00000100; // soit ADCON1=0x04;
TRISA=0b00001011; // RA0,RA1,RA3 en entrées, le reste en sortie
@+
HULK
"Pour la carotte, le lapin est la parfaite incarnation du Mal."
Robert Scheckley. | | |