PIC 16F88 CNA

PIC 16F88 CNA - Electronique, domotique, DIY

Marsh Posté le 29-11-2020 à 18:33:21    

bonjour,
Une personne me propose de déplacer ce sujet ici.  
je veux utiliser le PIC 16F88 avec son convertisseur Analogique-Numérique, horloge interne 4 MHz,entrée à convertir sur RA0 et RA1,2 sorties LED sur RA6 et RB7,affichage voltage sur LCD RB0->5. Le problème est lorsque j'affiche le voltage sur LCD REEL sur platine,les nombres affichés sont totalement différents que ceux mesurés sur voltmètre (ex. 0V,8V,3.54V,...). De plus la LED sur RA6 ne s'allume pas même en la forçant. J'utilise MikroC 6.6 et je n'ai pas trouvé dans l'aide ni sur le WEB comment implémenter CONFIG1. Je mesure le voltage d'un potentiomètre et du LM35 (température). J'utilise une référence formée de 2 résistances de 330 ohm en série et point central dirigé sur RA3 pour précision pour LM35 avec extrémité sur +5V et -0V.
Est-ce quelqu'un pourrait m'aider concrètement? Merci d'avance.
ci-joint mon programme et ne vois pas comment insérer  1 copie du dessin fait sur PROTEUS ISIS
 
#define sortie   RA6_bit     //pin 15
#define sortie1  RB7_bit      //pin 13
 
float volt,volt1,temp;   //résultat du voltage sur RA1 et RA0
float radc;   //mesure du t° sur RA1     pin 18
float radc0;   //mesure tension sur RA0    pin 17
char text[]="Voltage(V):";
char text1[6];
 
 // Pattes du LCD connectés sur port B
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
 
// direction des Pattes du LCD vers port B
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
 
void main()
{
 // le PIC 16F88 a 7 convertisseurs Analogique-Numérique sur A0-A1-A2-A3-A4-
 // RB6-RB7
 // ATTENTION RA0 et RA1 sont des ENTREEs   RA6 et RB7 sont des SORTIEs
 //entrée RA0 et 1  Vref+=A3 et RA5=MCLR
 TRISA=0b00000011;
 TRISB=0b00000000;
 PORTA=0b00000000;
 PORTB=0b00000000;
 
 INTCON=0;  //pas d'interruption
 OSCCON=0b01101100;    //4 MHz horloge interne
 //bit 6-4:110=4 MHz
 //bit 3:1 horloge système primaire
 //bit 2:1 fréquence stable
 //bit1-0:00 mode oscillateur
        // utilisation du convertisseur CNA (ADCON0 et 1)
 //le CNA doit avoir 1 référence de voltage qui est sélectionné par configu-
 //ration de programmation (et formée par 2 résistences de 330 ohm en série
 //avec une prise centrale entre les 2 et dirigée sur RA3 pour 1 ref=+2.5V)
 ADCON1=0b10100000;   //VRef+=RA3 et VRef-=Vss   affichage droite
 //ADCON1.ADFM=1;   //formatation du résultat de la conversion à droite
 //ADCON1.ADCS2=0;  //horloge interne divisée par 2 inactif ****** -> INFLUENCE
 //le bit 7-6 de ADCON0  !!!!
 //ADCON1.VCFG1=1;   // + volt= RA3    pin 2
 //ADCON1.VCFG0=0;   // - volt= masse    pin 5
 //utilise RA1 et RA2 pour entrée de donnée -> utilisation du CNA en analogique
 // et le reste des E/S en numérique
 ANSEL=0b00000011;   //canaux de conversion RA0-RA1
 CMCON=0b00000111;  //désactivation des comparateurs
 //CONFIG1_REG=0b11111100110000;    //configuration du PIC    PROBLEME!!!
 //CONFIG1.FOSC2=1    horloge interne et RA6 et RB7 sont en E/S numérique
 //       .FOSC1 et 0 = 0     !!! RA5 et RA7 sont des Entrées   RA6 une Sortie
 //       .MCLRE=1   RA5 est le MCLR et pas une E/S    pin 4
 
 sortie=0; sortie1=0;    //initialisation
 Lcd_Init();
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Cmd(_LCD_CURSOR_OFF);
 ADC_Init();
 //Le convertisseur permet d'avoir une résolution de 10 bits soit un nbre de
 //1024 (0 à 1023) pas pour chaque donnée
 while(1)
 {
  ANSEL=0b00000001;
  ADCON0=0b01001000;   //b=01(Fosc/8)   001(RA1)
  radc=ADC_Read(1);
  ANSEL=0b00000010;
  ADCON0=0b01000000;   //b=01(Fosc/8)   000(RA0)
  radc0=ADC_Read(0);
    ADCON0.ADON=1;      //convertisseur activé
  Delay_us(40);      //temps de conversion
  ADCON0.GO_DONE=1;  //conversion autorisée
    debut:
  if(ADCON0.GO_DONE==0)     //si fin de conversion ?
  {
   volt=(long)radc*(2500/1023); //mesure voltage(mV) température  LM35
   temp=volt/10;  //avec 10 mV/°C
   volt1=(long)radc0*4.88/1000;  //mesure voltage potentiomètre
   
   FloatToStr(volt1,text1);
   Lcd_Out(2,1,text);
   Lcd_Out(2,12,text1);
   FloatToStr(temp,text1);
   Lcd_Out(1,1,"tempera(C):" );
   Lcd_Out(1,12,text1);
  }
    else  {  Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); goto debut; }
  if(volt1 > 1)  { sortie=1; sortie1=1; }   //RA6 ne fonctionne pas!!!!
    else   { sortie=0; sortie1=0; }
  Delay_ms(100);  //temps d'attente pour 1 nouvelle conversion et visualisation
 }
}  

Reply

Marsh Posté le 29-11-2020 à 18:33:21   

Reply

Marsh Posté le 29-11-2020 à 19:30:50    

L'image sur https://img.super-h.fr/ et tu mets le lien.
Et le code entre balises.


Message édité par rat de combat le 29-11-2020 à 19:31:34
Reply

Marsh Posté le 29-11-2020 à 19:38:43    

Et pour répondre à ta question, tu n'as visiblement pas (bien) cherché sur le net:

Citation :

All config bits can be set in edit Project window.
Fosc3:Fosc0 can be set under Oscillator Selection field in Edit Project window.


https://forum.mikroe.com/viewtopic.php?f=13&t=49864


Message édité par rat de combat le 29-11-2020 à 19:38:58
Reply

Marsh Posté le 30-11-2020 à 09:23:08    

slmh1 a écrit :

bonjour,
Une personne me propose de déplacer ce sujet ici.  
je veux utiliser le PIC 16F88 avec son convertisseur Analogique-Numérique, horloge interne 4 MHz,entrée à convertir sur RA0 et RA1,2 sorties LED sur RA6 et RB7,affichage voltage sur LCD RB0->5. Le problème est lorsque j'affiche le voltage sur LCD REEL sur platine,les nombres affichés sont totalement différents que ceux mesurés sur voltmètre (ex. 0V,8V,3.54V,...). De plus la LED sur RA6 ne s'allume pas même en la forçant. J'utilise MikroC 6.6 et je n'ai pas trouvé dans l'aide ni sur le WEB comment implémenter CONFIG1. Je mesure le voltage d'un potentiomètre et du LM35 (température). J'utilise une référence formée de 2 résistances de 330 ohm en série et point central dirigé sur RA3 pour précision pour LM35 avec extrémité sur +5V et -0V.
Est-ce quelqu'un pourrait m'aider concrètement? Merci d'avance.
ci-joint mon programme et ne vois pas comment insérer  1 copie du dessin fait sur PROTEUS ISIS
 
#define sortie   RA6_bit     //pin 15
#define sortie1  RB7_bit      //pin 13
 
float volt,volt1,temp;   //résultat du voltage sur RA1 et RA0
float radc;   //mesure du t° sur RA1     pin 18
float radc0;   //mesure tension sur RA0    pin 17
char text[]="Voltage(V):";
char text1[6];
 
 // Pattes du LCD connectés sur port B
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
 
// direction des Pattes du LCD vers port B
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
 
void main()
{
 // le PIC 16F88 a 7 convertisseurs Analogique-Numérique sur A0-A1-A2-A3-A4-
 // RB6-RB7
 // ATTENTION RA0 et RA1 sont des ENTREEs   RA6 et RB7 sont des SORTIEs
 //entrée RA0 et 1  Vref+=A3 et RA5=MCLR
 TRISA=0b00000011;
 TRISB=0b00000000;
 PORTA=0b00000000;
 PORTB=0b00000000;
 
 INTCON=0;  //pas d'interruption
 OSCCON=0b01101100;    //4 MHz horloge interne
 //bit 6-4:110=4 MHz
 //bit 3:1 horloge système primaire
 //bit 2:1 fréquence stable
 //bit1-0:00 mode oscillateur
        // utilisation du convertisseur CNA (ADCON0 et 1)
 //le CNA doit avoir 1 référence de voltage qui est sélectionné par configu-
 //ration de programmation (et formée par 2 résistences de 330 ohm en série
 //avec une prise centrale entre les 2 et dirigée sur RA3 pour 1 ref=+2.5V)
 ADCON1=0b10100000;   //VRef+=RA3 et VRef-=Vss   affichage droite
 //ADCON1.ADFM=1;   //formatation du résultat de la conversion à droite
 //ADCON1.ADCS2=0;  //horloge interne divisée par 2 inactif ****** -> INFLUENCE
 //le bit 7-6 de ADCON0  !!!!
 //ADCON1.VCFG1=1;   // + volt= RA3    pin 2
 //ADCON1.VCFG0=0;   // - volt= masse    pin 5
 //utilise RA1 et RA2 pour entrée de donnée -> utilisation du CNA en analogique
 // et le reste des E/S en numérique
 ANSEL=0b00000011;   //canaux de conversion RA0-RA1
 CMCON=0b00000111;  //désactivation des comparateurs
 //CONFIG1_REG=0b11111100110000;    //configuration du PIC    PROBLEME!!!
 //CONFIG1.FOSC2=1    horloge interne et RA6 et RB7 sont en E/S numérique
 //       .FOSC1 et 0 = 0     !!! RA5 et RA7 sont des Entrées   RA6 une Sortie
 //       .MCLRE=1   RA5 est le MCLR et pas une E/S    pin 4
 
 sortie=0; sortie1=0;    //initialisation
 Lcd_Init();
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Cmd(_LCD_CURSOR_OFF);
 ADC_Init();
 //Le convertisseur permet d'avoir une résolution de 10 bits soit un nbre de
 //1024 (0 à 1023) pas pour chaque donnée
 while(1)
 {
  ANSEL=0b00000001;
  ADCON0=0b01001000;   //b=01(Fosc/8)   001(RA1)
  radc=ADC_Read(1);
  ANSEL=0b00000010;
  ADCON0=0b01000000;   //b=01(Fosc/8)   000(RA0)
  radc0=ADC_Read(0);
    ADCON0.ADON=1;      //convertisseur activé
  Delay_us(40);      //temps de conversion
  ADCON0.GO_DONE=1;  //conversion autorisée
    debut:
  if(ADCON0.GO_DONE==0)     //si fin de conversion ?
  {
   volt=(long)radc*(2500/1023); //mesure voltage(mV) température  LM35
   temp=volt/10;  //avec 10 mV/°C
   volt1=(long)radc0*4.88/1000;  //mesure voltage potentiomètre
   
   FloatToStr(volt1,text1);
   Lcd_Out(2,1,text);
   Lcd_Out(2,12,text1);
   FloatToStr(temp,text1);
   Lcd_Out(1,1,"tempera(C):" );
   Lcd_Out(1,12,text1);
  }
    else  {  Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); goto debut; }
  if(volt1 > 1)  { sortie=1; sortie1=1; }   //RA6 ne fonctionne pas!!!!
    else   { sortie=0; sortie1=0; }
  Delay_ms(100);  //temps d'attente pour 1 nouvelle conversion et visualisation
 }
}  


Reply

Marsh Posté le 30-11-2020 à 09:29:23    

Bonjour Rat de Combat,
Je n'ai pu répondre hier soir car j'ai eu une rupture de faiseau internet.
Merci pour le site pour la configuration. Pour l'image je ne suis pas favorable de passer par un intermédiaire et encore s'enregistrer pour ouvrir un compte.

Reply

Marsh Posté le 30-11-2020 à 09:30:10    

Bonjour Rat de Combat,
Je n'ai pu répondre hier soir car j'ai eu une rupture de faiseau internet.
Merci pour le site pour la configuration. Pour l'image je ne suis pas favorable de passer par un intermédiaire et encore s'enregistrer pour ouvrir un compte.

Reply

Marsh Posté le 30-11-2020 à 18:17:40    

Faut pas s'enregister sur le site que je t'ai donné... Tout en haut vers la droite il y a le bouton pour téléverser une image.

Reply

Marsh Posté le 01-12-2020 à 10:37:02    

slmh1 a écrit :

bonjour,
Une personne me propose de déplacer ce sujet ici.  
je veux utiliser le PIC 16F88 avec son convertisseur Analogique-Numérique, horloge interne 4 MHz,entrée à convertir sur RA0 et RA1,2 sorties LED sur RA6 et RB7,affichage voltage sur LCD RB0->5. Le problème est lorsque j'affiche le voltage sur LCD REEL sur platine,les nombres affichés sont totalement différents que ceux mesurés sur voltmètre (ex. 0V,8V,3.54V,...). De plus la LED sur RA6 ne s'allume pas même en la forçant. J'utilise MikroC 6.6 et je n'ai pas trouvé dans l'aide ni sur le WEB comment implémenter CONFIG1. Je mesure le voltage d'un potentiomètre et du LM35 (température). J'utilise une référence formée de 2 résistances de 330 ohm en série et point central dirigé sur RA3 pour précision pour LM35 avec extrémité sur +5V et -0V.
Est-ce quelqu'un pourrait m'aider concrètement? Merci d'avance.
ci-joint mon programme et ne vois pas comment insérer  1 copie du dessin fait sur PROTEUS ISIS
 

Code :
  1. #define sortie   RA6_bit     //pin 15
  2. #define sortie1  RB7_bit      //pin 13
  3. float volt,volt1,temp;   //résultat du voltage sur RA1 et RA0
  4. float radc;   //mesure du t° sur RA1     pin 18
  5. float radc0;   //mesure tension sur RA0    pin 17
  6. char text[]="Voltage(V):";
  7. char text1[6];
  8. // Pattes du LCD connectés sur port B
  9. sbit LCD_RS at RB0_bit;
  10. sbit LCD_EN at RB1_bit;
  11. sbit LCD_D4 at RB2_bit;
  12. sbit LCD_D5 at RB3_bit;
  13. sbit LCD_D6 at RB4_bit;
  14. sbit LCD_D7 at RB5_bit;
  15. // direction des Pattes du LCD vers port B
  16. sbit LCD_RS_Direction at TRISB0_bit;
  17. sbit LCD_EN_Direction at TRISB1_bit;
  18. sbit LCD_D4_Direction at TRISB2_bit;
  19. sbit LCD_D5_Direction at TRISB3_bit;
  20. sbit LCD_D6_Direction at TRISB4_bit;
  21. sbit LCD_D7_Direction at TRISB5_bit;
  22. void main()
  23. {
  24. // le PIC 16F88 a 7 convertisseurs Analogique-Numérique sur A0-A1-A2-A3-A4-
  25. // RB6-RB7
  26. // ATTENTION RA0 et RA1 sont des ENTREEs   RA6 et RB7 sont des SORTIEs
  27. //entrée RA0 et 1  Vref+=A3 et RA5=MCLR
  28. TRISA=0b00000011;
  29. TRISB=0b00000000;
  30. PORTA=0b00000000;
  31. PORTB=0b00000000;
  32. INTCON=0;  //pas d'interruption
  33. OSCCON=0b01101100;    //4 MHz horloge interne
  34. //bit 6-4:110=4 MHz
  35. //bit 3:1 horloge système primaire
  36. //bit 2:1 fréquence stable
  37. //bit1-0:00 mode oscillateur
  38.         // utilisation du convertisseur CNA (ADCON0 et 1)
  39. //le CNA doit avoir 1 référence de voltage qui est sélectionné par configu-
  40. //ration de programmation (et formée par 2 résistences de 330 ohm en série
  41. //avec une prise centrale entre les 2 et dirigée sur RA3 pour 1 ref=+2.5V)
  42. ADCON1=0b10100000;   //VRef+=RA3 et VRef-=Vss   affichage droite
  43. //ADCON1.ADFM=1;   //formatation du résultat de la conversion à droite
  44. //ADCON1.ADCS2=0;  //horloge interne divisée par 2 inactif ****** -> INFLUENCE
  45. //le bit 7-6 de ADCON0  !!!!
  46. //ADCON1.VCFG1=1;   // + volt= RA3    pin 2
  47. //ADCON1.VCFG0=0;   // - volt= masse    pin 5
  48. //utilise RA1 et RA2 pour entrée de donnée -> utilisation du CNA en analogique
  49. // et le reste des E/S en numérique
  50. ANSEL=0b00000011;   //canaux de conversion RA0-RA1
  51. CMCON=0b00000111;  //désactivation des comparateurs
  52. //CONFIG1_REG=0b11111100110000;    //configuration du PIC    PROBLEME!!!
  53. //CONFIG1.FOSC2=1    horloge interne et RA6 et RB7 sont en E/S numérique
  54. //       .FOSC1 et 0 = 0     !!! RA5 et RA7 sont des Entrées   RA6 une Sortie
  55. //       .MCLRE=1   RA5 est le MCLR et pas une E/S    pin 4
  56. sortie=0; sortie1=0;    //initialisation
  57. Lcd_Init();
  58. Lcd_Cmd(_LCD_CLEAR);
  59. Lcd_Cmd(_LCD_CURSOR_OFF);
  60. ADC_Init();
  61. //Le convertisseur permet d'avoir une résolution de 10 bits soit un nbre de
  62. //1024 (0 à 1023) pas pour chaque donnée
  63. while(1)
  64. {
  65.   ANSEL=0b00000001;
  66.   ADCON0=0b01001000;   //b=01(Fosc/8)   001(RA1)
  67.   radc=ADC_Read(1);
  68.   ANSEL=0b00000010;
  69.   ADCON0=0b01000000;   //b=01(Fosc/8)   000(RA0)
  70.   radc0=ADC_Read(0);
  71.     ADCON0.ADON=1;      //convertisseur activé
  72.   Delay_us(40);      //temps de conversion
  73.   ADCON0.GO_DONE=1;  //conversion autorisée
  74.     debut:
  75.   if(ADCON0.GO_DONE==0)     //si fin de conversion ?
  76.   {
  77.    volt=(long)radc*(2500/1023); //mesure voltage(mV) température  LM35
  78.    temp=volt/10;  //avec 10 mV/°C
  79.    volt1=(long)radc0*4.88/1000;  //mesure voltage potentiomètre
  80.  
  81.    FloatToStr(volt1,text1);
  82.    Lcd_Out(2,1,text);
  83.    Lcd_Out(2,12,text1);
  84.    FloatToStr(temp,text1);
  85.    Lcd_Out(1,1,"tempera(C):" );
  86.    Lcd_Out(1,12,text1);
  87.   }
  88.     else  {  Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); goto debut; }
  89.   if(volt1 > 1)  { sortie=1; sortie1=1; }   //RA6 ne fonctionne pas!!!!
  90.     else   { sortie=0; sortie1=0; }
  91.   Delay_ms(100);  //temps d'attente pour 1 nouvelle conversion et visualisation
  92. }
  93. }




C'est mieux comme ça :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed