PIC 16F88 CNA

PIC 16F88 CNA - Processeur - Hardware

Marsh Posté le 29-11-2020 à 15:28:01    

bonjour,
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 à 15:28:01   

Reply

Marsh Posté le 29-11-2020 à 15:52:11    

Hello. Je pense que tu aurais intérêt à déplacer ton sujet en l'editant vers une section adaptée de 'électronique'.

 

La on est sur du hardware 'PC' disons.


---------------
Guide OC x58 - Guide d'achat de config - ALIMS:qui fait quoi? - RKO - Radiooooo
Reply

Marsh Posté le 30-11-2020 à 09:31:55    

Merci

Reply

Sujets relatifs:

Leave a Replay

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