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
}
}