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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Configuration ADC avec un Vref 2.48 V
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#31 Message par HULK28 » sam. 7 janv. 2017 11:26

L'exemple que je te donne est avec une référence externe, il faut que tu regardes la doc de ton PIC pour déclarer la ref interne.
Quand j'aurai un peu de temps je me pencherai sur la question, mais tu as le principe que tu peux rapprocher de la DS pour affiner.
@+
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Configuration ADC avec un Vref 2.48 V
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#32 Message par Jérémy » sam. 7 janv. 2017 11:50

Vraiment sympa !

Il me faut le temps que je digère et décortique ton code , car c'est un niveau au dessus quand même . :sifflotte:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration ADC avec un Vref 2.48 V
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#33 Message par Guest » sam. 7 janv. 2017 20:08

Tu ne veux pas faire un essai avec ca. Sans multiplication et addition
passé sous XC8

Code : Tout sélectionner

void Lecture_T2(){
   int Tension = 0;

   while(1){
           
           ADCON0
.B1 = 1;     // On démarre la conversion
           while (ADCON0.B1); // J'attends que le bit soit effacer à la fin de la conversion
           
    
//       Tension = (ADRESH<<8) + ADRESL; // j'enregistre les registres en valeur
         #asm      
          MOVF  ADRESL,W
          MOVWF _Tension
          MOVF  ADRESH
,W
          MOVWF _Tension
+1
        
#endasm                  
       
            if 
(Tension >= 1010){
                Rouge = 1;
               }
             else if (Tension >= 990){
                Orange = 1;
               }
              else if (Tension >= 970){
                Jaune = 1;
               }
             else if (Tension < 970){
                Vert = 1;
               }
             delay_ms(300);
             Rouge = Orange = Jaune = Vert = 0;
             delay_ms(100);
      }
}


sinon c'est pas grave encore :bravo:

A+

Configuration ADC avec un Vref 2.48 V
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#34 Message par Guest » sam. 7 janv. 2017 22:35

Nous avons entamé, il y a un petit moment, une discussion (CAN) sur comment sortie du décimal à partir d'un pas quantitatif précis et d'un rapport d'un pont diviseur.
C’était avec une VREF de 5.12V pas de 0,005, ou en sortie du CAN j'avais par EXEMPLE 475, ce qui correspondait en entrée du pont a 4.75VOLTS . tu es dans la même configuration, mais avec un pas de 0.002 à toi de bien positionner le rapport de ton pont diviseur pour ne pas utiliser de FLOTTANT c'est toujours cela de gagné, ne pas oublier que tu es avec un 16F

A+

Configuration ADC avec un Vref 2.48 V
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#35 Message par Jérémy » dim. 8 janv. 2017 08:20

Bonjour maï et tout le monde ,

Désolé je te réponds un peu tard, car j'étais en train d'ecrire un petit Tuto sur l’utilité et le réglage d'une tension Fixe de référence (FVR).

Je viens d'essayer ton code après modification pour MikroC .
Il a fallu que je mettre la variable int Tension = 0; en variable global , car il ne la reconnaissait pas en locale

Code : Tout sélectionner

asm {
               
MOVF  ADRESL,W
               MOVWF _Tension
               MOVF  ADRESH
,W
               MOVWF _Tension
+1
            


La led verte reste allumé en permanence ?? :sifflotte: . ça ne fonctionne pas !

tu es dans la même configuration, mais avec un pas de 0.002 à toi de bien positionner le rapport de ton pont diviseur pour ne pas utiliser de FLOTTANT c'est toujours cela de gagné, ne pas oublier que tu es avec un 16F


Tu as complétement raison, c'est pourquoi je ne vais pas utiliser de Flottant. :-D P
car je ne suis pas très à l'aise avec !
Par ce que l'estimation de la lecture analogique reste une estimation et je n'ai nullement besoin d'une précision ;
Je vais seulement faire un tableau avec 10 valeurs qui correspondront au pourcentage de la batterie !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration ADC avec un Vref 2.48 V
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#36 Message par Jérémy » dim. 8 janv. 2017 08:38

@HULK28:

Code : Tout sélectionner

  for (= 0; i < 30; i++)  // Sample & Hold acquisition time
    Nop();

Est-ce que ceci est une pause entre deux mesures ? Si oui existe-t-il une valeur "préconisée" ? Peut etre dépendante so on a mis une capa ou autre ?

je ne comprends pas cette ligne

Code : Tout sélectionner

  adc_value = res.Tr;        // résultat total  


Comment fait tu le total ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration ADC avec un Vref 2.48 V
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#37 Message par Guest » dim. 8 janv. 2017 09:06

bonjour

un bout de code de PAUL

Code : Tout sélectionner

  _asm {
       CLRF  _Get_RsByte,1
//special pour routine d'attente bit 9600 Bauds  =>1000000/9600=104µS
//  3+ 67*3*3=207cycles  at 8Mhz =>  203* 0.5µS => 103.5 µS
// en fait on se retouve ensuit bien à l'interieur d'un bit , vu qu'on depasse le delai global Start Bit
// avec le traitement sauvegarde contexte et d'entree interruption front descendant RB0
// --- delai Start Bit -----------------
      MOVLW           67           ; .67 pour 9600 bauds  et 4Mhz   ou  9600bds at 8Mhz
      MOVWF           _Count1      
;  1000000/9600=104µS
delay10
:
       DECFSZ          _Count1,F     ; 1 cycle si pas de saut
       GOTO            delay10        
;          // $-1        =>2cycles
       NOP
       NOP
//  --------
        MOVLW 8
        MOVWF  _Count2
 PAS0
:                              ; on pousse le bit adequate à droite dans le registre
        BCF STATUS
,C                ; RAZ Carry
        BTFSC    RB0_bit
,0
        BSF STATUS
,C                ;Set Carry


il faut mettre un tiret devant ASM pour ton compil

ici viewtopic.php?f=10&t=346

A+

PS :
-Pour la precision, TU AS de la precision. Je ne vois pas tres bien pourquoi tu dis cela ????
- De même si c'est juste une estimation, pourquoi faire une moyenne. Prévoir un temps échantillonnage régulier AMHA doit suffire

Configuration ADC avec un Vref 2.48 V
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#38 Message par Jérémy » dim. 8 janv. 2017 12:02

Sorry maï , mais toujours pas . La LED verte clignote en permanence !

Code : Tout sélectionner

//------------------------------------------------------------------------
void Lecture_T2(){

   
Envoi_tension 1// Alumage du pont diviseur
   
delay_ms(100);     // Stabilisation de la Tension sur la PIN

   
while(1){
   
         
Tension 0;

             
ADCON0.B1 1;     // On démarre la conversion
             
while (ADCON0.B1); // J'attends que le bit soit effacer à la fin de la conversion

          
_asm {
               
MOVF  ADRESL,W
               MOVWF _Tension
               MOVF  ADRESH
,W
               MOVWF _Tension
+1
              
}

            if (
Tension >= 1010){
                
Rouge 1;
               }
             else if (
Tension >= 990){
                
Orange 1;
               }
              else if (
Tension >= 970){
                
Jaune 1;
               }
             else if (
Tension 970){
                
Vert 1;
               }
             
delay_ms(300);
             
Rouge Orange Jaune Vert 0;
             
delay_ms(100);
      }
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Configuration ADC avec un Vref 2.48 V
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#39 Message par Guest » dim. 8 janv. 2017 12:38

Comme j'ai pas microC, c'est pas grave tu as fait l'essai c'est bien.
finit bien ton projet et A+

Configuration ADC avec un Vref 2.48 V
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#40 Message par Jérémy » dim. 8 janv. 2017 13:57

Voici ma fonction lecture de tension.

- "j'allume" le pont diviseur
- Je récupère 8 valeurs de lecture .
- Je fais la moyenne .
- Je fais une mise à l’échelle pour avoir un %
Je stock la valeur dans un tableau pour envoi par SMS.

Pour la mise à l’échelle je suis partis sur ce principe !

batterie pleine 4.2V
batterie vide 3.3V
référence de tension interne à 2.048

Ceci me fait un pas de 0.002V ( 2.048/1024=0.002).
Je ferais un pont diviseur par 2 avec les deux mêmes résistances ( lots).

3.3 / 2 = 1.65V sur la pin de lecture . 1.65/0.002 = 825 valeur minimun lue , je prends 8330 par sécurité et la valeur max ben c'est 1023.
J'ai donc 1023-830 = 193 de delta.

Et avec un petit produits en crois j'obtiens mon % ???

Pour la precision, TU AS de la precision. Je ne vois pas tres bien pourquoi tu dis cela ????

C'est plus sur la courbe de d&charge de la batterie et son taux de décharge que je dis cela ,avec la T°, le moement de la prise etc ...
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 37 invités