Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Tout ce qui n'a pas de catégorie !
Contrôle de la température avec sonde PT100, PT1000, Thermocouple, MAX31865 .....
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1377
Enregistré en : juillet 2016
Localisation : Terre

#21 Message par Temps-x » ven. 19 juil. 2019 02:41

Bonsoir paulfjujo, et tout le forum,

Un grand Merci ! à toi, je vais décortiquer tout ça, et mettrais le code ici, si ça la tension de référence fonctionne.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Contrôle de la température avec sonde PT100, PT1000, Thermocouple, MAX31865 .....
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1503
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#22 Message par paulfjujo » ven. 19 juil. 2019 09:32

bonjour Tempx et à tous,

j'ai retrouvé dans mes notes MikroC
un test particulier sur la partie analogique 18F26K22
pour avoir une mesure zoomée pour tension de batterie 12V ( projet arrosage jardin , Solar Panel + Batterie)
en utilisant -Vref et +Vref
et la biblio ADC MikroC, à l'epoque, était deficiente .. je n'ai pas retesté avec la version MikroC 7.50

ça s'approche plus de l'ASM , vu que j'utilise seulement les registres du MCU

Code : Tout sélectionner


   ANALOG 18F26K22
   
   
Test choix de channel ADC
 
for (i=0;i<4;i++)
  {
   
ADCON0= (i<<2);
   
ADCON0=ADCON0 0x01;
   
UART1_Write_CText("Channel=");
   
WordToStr(i,CRam1);
   
UART1_Write_Text(CRam1);
  
UART1_Write_CText(" ADCON0=");
   
ByteToStr(ADCON0,CRam1);
   
UART1_Write_Text(CRam1);
   
CRLF();
  }
/* results
Channel=    0 ADCON0=  1
Channel=    1 ADCON0=  5
Channel=    2 ADCON0=  9
Channel=    3 ADCON0= 13
*/
*******************************************************
   
Usage de Vrefsur RA2 input Vcc/2

void My_Init_ADC
(void);
unsigned int My_Lecture_ADC(unsigned char ch);


void My_Init_ADC()
 {
 
//config lecture ADC 10 bits 18F26K22  DS41412F-page 304
 
ADCON0=0;          // clean register
 
ADCON0.ADON=1;     // ADC enabled
 //bit 6-2 CHS<4:0>: Analog Channel Select bits 
 // select RA0 = analog input
 
ADCON0.CHS4=0;
  
ADCON0.CHS3=0;
   
ADCON0.CHS2=0;
    
ADCON0.CHS1=0;
     
ADCON0.CHS0=0;   // 0= RA0 selectionné   1 =RA1 selectionné
 
ADCON1.TRIGSEL=// trigger from CCP5
 
ADCON1.PVCFG1=0;   // +Vref = +5V AVdd
 
ADCON1.PVCFG0=0;
 
// bit 1-0 NVCFG<1:0>: Negative Voltage Reference Configuration bits
  
ADCON1.NVCFG0=0;
  
ADCON1.NVCFG1=0;     // -Vref = Gnd AVss
 //  ADCON1.NVCFG0=1;  //-Vref = RA2 input
  //bit 7 ADFM: A/D Conversion Result Format Select bit
 
ADCON2.ADFM=1;     // right justified
 // ADC Clock period (TAD)  = 2µS at 16Mhz
 //bit 2-0 ADCS<2:0>: A/D Conversion Clock Select bits   see 17.3 page 306
 //  ADCS<2:0>  010=Fosc/32      101=FOSC/16
 
ADCON2.ADCS1=0;
  
ADCON2.ADCS2=1;
   
ADCON2.ADCS0=0;
 
//  bit 5-3 ACQT<2:0>: A/D Acquisition time select bits. 
 // Acquisition time is the duration that the A/D charge
 // holding capacitor remains connected to A/D channel from the instant the GO/DONE bit is set
 // until conversions begins.
  // TACQT Cycles  ACQT<2:0>
  // TACQ=  8 xTAD = 16µS at 16Mhz
 
ADCON2.ACQT2=1;
  
ADCON2.ACQT1=0;
   
ADCON2.ACQT0=0;    // 8 TAD

 
}

 
  
unsigned int My_Lecture_ADC(unsigned char ch)
 {
  
unsigned int k;
  
char Dr;
  
ADCON0= (ch<<2);
  
ADCON0=ADCON0 0x01;
  
Delay_ms(50);
  if (
GIE_bit==1Dr=1;
  
GIE_bit=0;
  
ADCON0.GO=1;
  
_asm nop
  _asm nop
  
while( ADCON0.GO==1);
   
_asm nop;
   
k=ADRESH<<8;
   
k=ADRESL;
   if(
Dr==1GIE_bit=1;
  return (
k);
 }
 
 ......
 
//preselection conditions de mesure EA0 (Amps)
   // pour avoir un maximum de temps de stabilisation
   // conditions :  ADC Vref+ interne  = +5V   ADC Vref- interne = VSS=0V
   
ADCON1.NVCFG1=0;
   
ADCON1.NVCFG0=0;
   
ADCON1.PVCFG1=0//00 = A/D VREF+ connected to internal signal, AVDD
   
ADCON1.PVCFG0=0;
   
ADCON0.CHS1=0;
   
ADCON0.CHS0=0;   // selec chanel  0
   
UART1_Write('.');
   
EA0=My_Lecture_ADC(0); 
   
SEA0=SEA0+EA0;  //   accumulation pour calcul moyenne
 
  
   // Mesure U battery with zoom effect
 // la tension de battery 15V maximum passe par un diviseur de 1/3 => 5V maxi pour 15V
 // et donc 2,5 V pour mini=7,5V
 // nota : pas de mesure Ubat possible entre 0V et 7,5V   ! normal pour une batterie de 12V
 // qui doit etre declarée HS si Ubat<10,5V
 // conditions :  ADC Vref+ = +5V   ADC Vref- = RA2 input=+2,5V
 // Battery Maxi=15V  diviseur par 3 sur EA1 => 5V pour 15V Ubat
 // Maxi 5V   , mesure EA1  de 2,5V à 5,00 V   pour 0 à 1024 pts
 // soit EA1=5V pour Ubat=15V  et 1024 pts
 // soit EA1=2,5V pour Ubat = 7,5V  et 000 pts
 // prepare aiguillage mesure EA1 , et Vre- sur RA2
 /*
  ADCON0.CHS1=0;
  ADCON0.CHS0=1;   // preselect EA1
  ADCON1.PVCFG1=0; //00 = A/D VREF+ connected to internal signal, AVDD
  ADCON1.PVCFG0=0;
  ADCON1.NVCFG1=0;  //01 = A/D VREF- connected to external pin, VREF-
  ADCON1.NVCFG0=1; // internal Vref- = EA2 = +2,5V  => for Range 2,5  to 5V
  Delay_ms(20);    //  1234567890123456
  CRam1[0]=0;
  EA1= My_Lecture_ADC(1);
  // *Nota:    ADC_Get_Sample(1); ne fonctionne pas OK avec refernce externe ...RA2=EA2=VREF- de +2,5V
 
Aides toi, le ciel ou Fantastpic t'aideras

Contrôle de la température avec sonde PT100, PT1000, Thermocouple, MAX31865 .....
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1377
Enregistré en : juillet 2016
Localisation : Terre

#23 Message par Temps-x » sam. 20 juil. 2019 01:05

Bonsoir paulfjujo, et tout le forum,

C'est encore mieux comme ça, je me souvient de ce projet (arrosage jardin , Solar Panel + Batterie) qui son un bien pour notre belle planète. :wink:

Je vais très souvent sur ton site, pour y voir les méthodes, et astuce, que tu utilises dans tes montages électroniques

J'ai vu sur ton site que tu avais fait un programme en rapidQ sur : Variante 1 sonde DS18B20, avec Appli PC en basic RapidQ ICI

J'en profite pour te dire que tu peux déclarer ton icône autrement, tu fais actuellement ceci

Code : Tout sélectionner



Create Temper_BT as QForm

      Icon 
= "D:\RapidQ\icon\mylogo.ico"


Alors qu'il suffit de faire ceci

Code : Tout sélectionner


Sub Temper_BTShow
(Sender as QForm)

      Chemin  = left$(command$(0), rinstr(command$(0), "\"))

      Temper_BT.Icon = Chemin + "
icon\mylogo.ico"


ça te permets de déplacer ton dossier sans devoirs remettre un chemin pour ton icône. :wink:

Merci ! pour tous

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité