Votre question

Conversion A/D PIC 18F4520

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
14 Mai 2008 17:27:47

Bonjour à vous !


Je voudrai réaliser un programme permettant une conversion analogique numerique avec un PIC 18F4520. J'utilise le logiciel et une carte de test MPLAB V8 avec MCC18.
Il faudrait donc un programme avec une initialisation de l'adc ainsi que le programme de conversion.

J'ai essayé l'initialisation ce qui donne ceci (Mon probleme est que j'ai très peu de base en langage C :'(  ) :


  1. #include <p18f4520.h>
  2. #include <adc.h>
  3.  
  4. void main(void)
  5.  
  6. {
  7.  
  8. TRISA=1; // PORTA en Entrée
  9. PORTA=1; // PORTA a 1
  10.  
  11. ADCON0bits.ADON = 1 ; // A/D convert ON
  12. ADCON0bits.CHS0 = 0 ; // Choisir la voie a convertir => AN0
  13. ADCON0bits.CHS1 = 0 ; // Choisir la voie a convertir => AN0
  14. ADCON0bits.CHS2 = 0 ; // Choisir la voie a convertir => AN0
  15. ADCON0bits.CHS3 = 0 ; // Choisir la voie a convertir => AN0
  16.  
  17. ADCON1bits.PCFG0 = 1 ; // Configuration des ports A/D = AN1 et AN0
  18. ADCON1bits.PCFG1 = 0 ; // Configuration des ports A/D = AN1 et AN0
  19. ADCON1bits.PCFG2 = 1 ; // Configuration des ports A/D = AN1 et AN0
  20. ADCON1bits.PCFG3 = 1 ; // Configuration des ports A/D = AN1 et AN0
  21. ADCON1bits.VCFG0 = 0 ; // references de tension a utiliser par le CAN => Vref+ = Vdd
  22. ADCON1bits.VCFG1 = 0 ; // references de tension a utiliser par le CAN => Vref- = Vss
  23.  
  24. ADCON2bits.ADCS0 = 0 ; // configurer horloge selection
  25. ADCON2bits.ADCS1 = 0 ; // configurer horloge selection
  26. ADCON2bits.ADCS2 = 1 ; // configurer horloge selection
  27. ADCON2bits.ACQT0 = 0 ; // configurer un temps d'acquisition
  28. ADCON2bits.ACQT1 = 0 ; // configurer un temps d'acquisition
  29. ADCON2bits.ACQT2 = 0 ; // configurer un temps d'acquisition
  30. ADCON2bits.ADFM = 1 ; // justification a droite
  31.  
  32. ADRESH=0x00 ; // Mise à zero du registre ADRESH
  33.  
  34. ADCON0bits.GO_DONE = 1; // A/D conversion in progress (Start Of Conversion)
  35.  
  36. while(ADCON0bits.GO_DONE); // Attente de l'EOC
  37.  
  38. {
  39.  
  40. ADCON0bits.GO_DONE=0; // EOC
  41. X=ADRESH;
  42. X<<=8;
  43. X|=ADRESL;
  44.  
  45. }


Pourriez vous me dire ce qui ne va pas dans le bout de programme ci-dessus ? les choses à modifier ect ...

Pour la suite (conversion), je ne sais pas du tout comment faire ...

Autres pages sur : conversion pic 18f4520

Anonyme
14 Mai 2008 19:58:59

Salut, c'est un poil trop technique ton topic :) 
mais en regardant ton code on peut déjà remarquer deux choses
while(ADCON0bits.GO_DONE);
-->pas de ; à la fin pour ce type d'intruction, par contre pour un do/while il yen aurait un.
Moins grave, le main retourne un int et non void, il faudrait remplacer
void main(void) par int main(int argc, char **argv), pour le reste je peux pas aider
a b L Programmation
14 Mai 2008 23:04:30

Oui, il y a un while(1); qui bloque le programme :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS