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 en BASIC et PASCAL !

Modérateur : Gérard

Carte pour mesurer la capacité des batterie NIMH
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#1 Message par cyril13110 » lun. 28 mars 2022 22:13

Bonsoir à tous,

Je reviens avec un nouveau montage qui va me permettre de mesurer la capacité restantes de mes batteries NIMH de taille AA et AAA que j'ai a la maison.
J'ai pas encore fait de schéma , mais il est trés simple. une resistance de 10 ohm en serie avec une batterie AA et un transistor MOS pour couper dés que la pile arriver à 0.8V.

Le schéma est trés simple
montage.png


Voila mon code test, pour le moment je suis sur une seule batterie et je suis avec un 18F2550.

Code : Tout sélectionner


program mesure_cap_NIMH1

' Declarations section 

Valeur de la resistance de decharge
const Res =  10.0

' Seuil bas de la tension d'une pile Ni-MH
const SEUIL_BAS_TENSION_PILE 0.80

' Détection de seuil bas de la tension de la pile
   dim seuilBasBatterieAtteint as bit

'  
Heure de début de la mesure
dim  initTime 
as longword

'  Quantité d'électricité générée par la pile lors
'  de la dernière seconde
dim  quantiteElectricite as float

'  
Quantité d'électricité totale générée par la pile
'  
depuis le lancement du programme
dim  quantiteElectriciteTotale 
as float
dim  quantiteElectriciteTotale_I 
as word

dim   U0 
as float
dim   U0_I 
as word
dim   U0_calc 
as float
dim   U1 
as float
dim   tensionResistance 
as float
dim   courant 
as float
dim   courant_I 
as word
dim   courant_calc 
as float
dim   txt 
as string[6]
' Lcd module connections
dim
  LCD_RS as sbit at RB4_bit
  LCD_EN as sbit at RB5_bit
  LCD_D7 as sbit at RB3_bit
  LCD_D6 as sbit at RB2_bit
  LCD_D5 as sbit at RB1_bit
  LCD_D4 as sbit at RB0_bit

dim
  LCD_RS_Direction as sbit at TRISB4_bit
  LCD_EN_Direction as sbit at TRISB5_bit
  LCD_D7_Direction as sbit at TRISB3_bit
  LCD_D6_Direction as sbit at TRISB2_bit
  LCD_D5_Direction as sbit at TRISB1_bit
  LCD_D4_Direction as sbit at TRISB0_bit
End Lcd module connections
dim U0_direction 
as sbit at TRISA0_bit
    U1_direction 
as sbit at TRISA1_bit
    Trans_direction 
as sbit at TRISC0_bit
    Trans 
as sbit at Portc.0
 
 sub procedure mesureQuantiteElectricite
()
 
   
'  Lit la tension aux bornes de la pile et aux bornes de la résistance
  U0 = ADC_Read(0)*5/1024
  U1 = ADC_Read(1)*5/1024
  tensionResistance = U0-U1

  ' 
Verifie que la tension de la pile n'est
  ' 
pas inferieure à son seuil bas afin de ne pas
  
' l'endommager
  
if (U0 SEUIL_BAS_TENSION_PILEthen
    seuilBasBatterieAtteint 
1
  end 
if
  
  
' Calcul du courant qui circule dans la résistance
  courant = (U0-U1)/Res

  '  
La quantité d'électricité est la quantité de charges électriques
  '  
déplacées par les électronsElle est égale à l'intensité
  '  
multipliée par le temps (1 seconde ici).
  
'  Afin d'avoir la quantité d'électricité en mAh, il faut
  '  
utiliser le facteur 1000/3600
  quantiteElectricite 
courant/3.6

  
'  On additionne cette quantité d'électricité aux précédentes
  
'  afin de connaître la quantité totale d'électricité
  
'  à la fin de la mesure
  quantiteElectriciteTotale = quantiteElectriciteTotale+quantiteElectricite
  quantiteElectriciteTotale_I = quantiteElectriciteTotale
  
   '  
Affichage sur l'afficheur OLED de la tension de la pile,
  '  
du courant débité ainsi que de la quantité d'électricité débitée
  '  
par la pile depuis le lancement du programme
    Lcd_Out
(1,1,"Test mesure")
    
FloatToStr(U0txt)
    
Lcd_Out(2,1,"U=")
    
Lcd_Out(2,3,txt)
    
Lcd_Out(2,15,"V")
    
    
FloatToStr(couranttxt)
    
Lcd_Out(3,1,"A=")
    
Lcd_Out(3,3,txt)
    
Lcd_Out(3,15,"A")
    
 
'   FloatToStr(quantiteElectriciteTotale, txt)
    IntToStr(quantiteElectriciteTotale_I, txt)
    Lcd_Out(4,1,"Q=")
    Lcd_Out(4,3,txt)
    Lcd_Out(4,12,"mAh")
  
end sub



main:
'   
Main program 

    OSCCON 
= $7F
    ADCON1 
= $0D
    ADCON2 
= $21
    
 
'  RA0 Entrée ANA, RA1 Entrée ANA
 
 ' 
RCO Sortie commande transistorRC1 entrée TOR BP marche
 Trans_direction 
0
 
' Port B commande afficheur
 
     ADC_Init ()
    Lcd_Init()
    seuilBasBatterieAtteint = 0
    quantiteElectriciteTotale=0
    
    Trans = 1
    While (TRUE)
          '  
Mesure de la quantité d'électricité débitée toutes les
          '  
secondes jusqu'à ce que la tension de la pile soit inférieure
          '  
à son seuil bas afin de ne pas l'endommager.
          if   (seuilBasBatterieAtteint = 0) then
               mesureQuantiteElectricite()
               Delay_ms(1000)
          else
          '  
Une fois que le seule bas de la pile est atteint,
          
'  on positionne le transistor en mode bloqué afin
          '  
d'arrêter la décharge de la pile
             Trans = 0
             Lcd_Out(1,1,"                    ")
             Lcd_Out(2,1,"                    ")
             Lcd_Out(3,1,"                    ")
             Lcd_Out(4,1,"                    ")
             
             Lcd_Out(1,1,"Fin Decharge")
             Lcd_Out(2,1,"Capacite pile=")
             IntToStr(quantiteElectriciteTotale_I, txt)
             Lcd_Out(3,3,txt)
             Lcd_Out(4,1," mAh")
             Delay_ms(1000)
          end if
    
    
    
    Wend
end.


Voila le resultat sur afficheur LCD
IMG_20220328_220305.jpg


Par contre je bloque une une chose, je souhaiterais n'avoir que 2 chiffre aprés la virgule pour la tension (1.21V) et 3 chiffre aprés la virgule pour le courant (0.125mA) mais je ne sais pas comment mi prendre

J'ai tenté de passer par des changement de format mais sans grand résulat.
Auriez vous une idée pour reduire le nombre de chiffres aprés la virgules?

Le but final est une carte avec 5 batteries avec la possibilité de mettre des AA et des AAA et le pic final sera un 18F46J50.

Voila pour le moment
bonne soiré à tous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Carte pour mesurer la capacité des batterie NIMH
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#2 Message par cyril13110 » lun. 28 mars 2022 22:53

oups je me suis trompé de coins pour poster mon montage :lol: :lol: :lol: :lol: :lol: :lol:

Carte pour mesurer la capacité des batterie NIMH
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » mar. 29 mars 2022 02:04

Bonjour cyril13110, et tout le forum,

cyril13110 a écrit :Source du message Par contre je bloque une une chose, je souhaiterais n'avoir que 2 chiffre aprés la virgule pour la tension (1.21V) et 3 chiffre aprés la virgule pour le courant (0.125mA) mais je ne sais pas comment mi prendre


Je peux t'aider, mais que en ASM, je sais le faire,

Autre chose, tu as intérêt à mettre un suiveur Rail-to-Rail entrée, sortie, sur l'entrée analogique, avec pont diviseurs, et avoir une bonne référence de tension comme des MCP1501, de plus ta résistance de 10 Ohms doit être très précis pour une bonne mesure(Ampérage)


Montage très intéressant, et instructive, je suis à peux près sur la même chose que toi, j'en reparlerai plus tard en section ASM :langue:


Ps : :sifflotte: Bon... je sais... ça a rien à voir, mais en langage RapidQ, qui est du basic pour ordinateur, voici une Function que j'ai écrit, je l'utilise très souvent.

Code : Tout sélectionner



Function Arrondir
(decimal as Double,Apres as Single)as Double

  if instr
(trim(str$(decimal)),".") = 0 then 
     Arrondir 
= decimal
     exit function
  end if
 
 Arrondir 
= val(mid$(trim(str$(decimal)),1, instr(trim(str$(decimal)),".") + Apres))

end function



A+
Modifié en dernier par Temps-x le mar. 29 mars 2022 19:59, modifié 4 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Carte pour mesurer la capacité des batterie NIMH
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#4 Message par satinas » mar. 29 mars 2022 15:00

Bonjour

C'est quel Basic ?
Il doit y avoir des fonctions de manipulations de strings, qui permettent d'afficher un extrait de la chaîne txt. Il faudrait aussi prévoir un arrondi sur la 2ème décimale.
Est-ce que les float sont vraiment nécessaires ?
en faisant U0 = (ADC_Read(0)*5*1000)/1024 tu obtiens directement un entier 1210, qui permet d'arrondir à 1,21.

Carte pour mesurer la capacité des batterie NIMH
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » mar. 29 mars 2022 15:06

bonjour,


en C , je ferais comme cela
l'indice commence à 0 en C

mais à 1 en basic ?

01234
1.21\0

txt[4]=0;
ou
*(txt+4)=0

car un zero indique fin de string ...

sic Satinas
en faisant U0 = (ADC_Read(0)*5*1000)/1024 tu obtiens directement un entier 1210, qui permet d'arrondir à 1,21.


sinon tu utilises comme reference + ADC FVR=4.096V au lieu de +Vdd
et tu as une lecture directe en faisant
ADC lecture <<2
ou ADC Lecture * 4
apres , il y juste à positionner le . decimal
Aide toi, le ciel ou FantasPic t'aidera

Carte pour mesurer la capacité des batterie NIMH
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#6 Message par cyril13110 » mar. 29 mars 2022 23:01

Bonsoir tous le monde,


Temps-x a écrit :Autre chose, tu as intérêt à mettre un suiveur Rail-to-Rail entrée, sortie, sur l'entrée analogique, avec pont diviseurs, et avoir une bonne référence de tension comme des MCP1501, de plus ta résistance de 10 Ohms doit être très précis pour une bonne mesure(Ampérage)


Heu j'en voie pas vraiment la nécessité vue que la mesure est plutôt stable.
De ce qui est des résistances, je l'ai ai toute contrôlé via multimètre, elles sont toute pile à 10 ohm du coup nickel de ce coté là.
J'ai fais une petite modif de code, j'ai mis le temps max pour la temps de travail du CAN.


satinas a écrit :C'est quel Basic ?
Il doit y avoir des fonctions de manipulations de strings, qui permettent d'afficher un extrait de la chaîne txt. Il faudrait aussi prévoir un arrondi sur la 2ème décimale.
Est-ce que les float sont vraiment nécessaires ?
en faisant U0 = (ADC_Read(0)*5*1000)/1024 tu obtiens directement un entier 1210, qui permet d'arrondir à 1,21.


Je suis avec MIKROBASIC PRO V7.6.0.
Ok merci pour ton conseil je vais tester.
Bon en revenant à la valeur que je souhaite ca fait carnage.

Par contre je viens de faire un test qui me vas bien en voila le bout de code (merci paulfjujo car je me suis en partie inspiré de ton bout de code):
J'ai tous simplement fait caractère par caractère.

Code : Tout sélectionner


   
'  Affichage sur l'afficheur OLED de la tension de la pile,
  '  du courant débité ainsi que de la quantité d'électricité débitée
  
'  par la pile depuis le lancement du programme
    Lcd_Out(1,1,"Test mesure")
    FloatToStr(U0, txt)
    Lcd_Out(2,1,"U=")
    Lcd_Chr(2,3,txt[0])
    Lcd_Chr(2,4,txt[1])
    Lcd_Chr(2,5,txt[2])
    Lcd_Chr(2,6,txt[3])
    Lcd_Out(2,15,"V")
    
    FloatToStr(courant, txt)
    Lcd_Out(3,1,"A=")
    Lcd_Chr(3,3,txt[0])
    Lcd_Chr(3,4,txt[1])
    Lcd_Chr(3,5,txt[2])
    Lcd_Chr(3,6,txt[3])
    Lcd_Chr(3,7,txt[4])
    Lcd_Out(3,15,"A")
    
 '
   FloatToStr(quantiteElectriciteTotale, txt)
    IntToStr(quantiteElectriciteTotale_I, txt)
    Lcd_Out(4,1,"Q=")
    Lcd_Out(4,3,txt)
    Lcd_Out(4,12,"mAh")



Le résultat est des plus satisfaisant car la tension est en concordance avec le courant.
IMG_20220329_225846.jpg


Bonne soiré à tous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Carte pour mesurer la capacité des batterie NIMH
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#7 Message par cyril13110 » mer. 20 avr. 2022 22:07

Bonsoir à tous,

Je me pose une question existentiel sur mon code.
J'ai fait le test avec des batteries AAA neuve de noté 900mA/h et mon montage m'a indiqué 600mA/h, ce qui fait un sacré décalage.
Soit les batteries ne sont pas à la puissance indiqué (mais 300mA/h de décalage je trouve ca énorme), soit il y a un problème de timing dans mon code.
Pour le moment le top calcul est effectué via une tempo toute simple de 1seconde mais je pense voir si je passe par une interruption pour le timing si ca donnerais pas mieux. car au final je ne suis pas sur 1 seconde pile mais un poile plus vue qu'il y a tous de même 2 lectures ana, des calculs et la gestion de l'affichage.
Si on analyse l'ensemble, si on prends qu'un seul échantillon de quelques secondes ca doit faire un décalages de quelques milliseconde mais sur une durée plus longue j'ai bien peur de fausser ma mesure.
Je vais voir pour modifier mon code et inclure un calcul de seconde via interruption afin de voir si les résultats changent ou pas.

Bonne soirée à tous

Carte pour mesurer la capacité des batterie NIMH
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » jeu. 21 avr. 2022 20:14

bonsoir,

cyril13110 a écrit :
Je me pose une question existentiel sur mon code.
J'ai fait le test avec des batteries AAA neuve de noté 900mA/h et mon montage m'a indiqué 600mA/h, ce qui fait un sacré décalage.
Soit les batteries ne sont pas à la puissance indiqué (mais 300mA/h de décalage je trouve ca énorme), soit il y a un problème de timing dans mon code.
Pour le moment le top calcul est effectué via une tempo toute simple de 1seconde mais je pense voir si je passe par une interruption pour le timing si ca donnerais pas mieux. car au final je ne suis pas sur 1 seconde pile mais un poile plus vue qu'il y a tous de même 2 lectures ana, des calculs et la gestion de l'affichage.
Si on analyse l'ensemble, si on prends qu'un seul échantillon de quelques secondes ca doit faire un décalages de quelques milliseconde mais sur une durée plus longue j'ai bien peur de fausser ma mesure.
Je vais voir pour modifier mon code et inclure un calcul de seconde via interruption afin de voir si les résultats changent ou pas.s



quelle est la date fraicheur de tes piles ?
à quel valeur de courant de decharge mesures-tu la capacité ?
quelle est la valeur finale de tension apres 900mAH ? et la donnéee constructeur ?
tu ne peux pas rajouter une RTC .. top 1Hz => interrupt RB0 à 1 seconde tres precise ?
et duree Ecoulée globale via le temps HH MM SS de la RTC
Aide toi, le ciel ou FantasPic t'aidera

Carte pour mesurer la capacité des batterie NIMH
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#9 Message par cyril13110 » ven. 22 avr. 2022 11:34

Bonjour paulfjujo et bonjour tous le monde,

paulfjujo a écrit :bonsoir,

quelle est la date fraicheur de tes piles ?
à quel valeur de courant de decharge mesures-tu la capacité ?
quelle est la valeur finale de tension apres 900mAH ? et la donnéee constructeur ?
tu ne peux pas rajouter une RTC .. top 1Hz => interrupt RB0 à 1 seconde tres precise ?
et duree Ecoulée globale via le temps HH MM SS de la RTC


Elles sont neuves les batteries, je lai ai commandé en debut d'année et sortie de leurs carton la pour l'essai.
elles n'ont encore jamais été utilisé.
ce sont des Duracell AAA 900mAh qui ont ete mesuré a 600mAh.
Oui aussi je pourrais voir pour un RTC mais du coup va falloir que je commande ou peut etre pas mais il ne me semble pas en avoir.
Clairement le calcul semble etre ok cest le timing que je remets en cause.
je vais voir ce que je peux bricoler.

Carte pour mesurer la capacité des batterie NIMH
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » ven. 22 avr. 2022 20:53

bonsoir

elles sont neuves les batteries, je lai ai commandé en debut d'année et sortie de leurs carton la pour l'essai.
elles n'ont encore jamais été utilisé.


oui, mais quelle date fraicheur ?
j'ai des DuraCuir plus de type AA .. date fraicheur 03/2031 !

quand à savoir la réelle capacité .. aucune données techniques sur DURACELL
voir normes IEC 2015
payantes ..
ou *.pdf avec extraits limités ...
5.5 Designation, nominal voltage, dimensions, discharge conditions, minimum average
duration and application for these batteries which fall into the same group are summarized in
one table.


pile_tableau.jpg



avant on avait " comme le PORT SALUT ...... c'est écrit dessus ! "

maintenant on met 2031 ..pour une pile !.. sur que le jouet ou le recepteur sera mort avant ! obsolescence oblige
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

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