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

#11 Message par cyril13110 » ven. 22 avr. 2022 23:12

paulfjujo a écrit :bonsoir
]

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



Bonsoir,

Je viens de regarder il ny a pas de date sur les batteries du coup je ne pourrais pas te répondre.
je vais faire le test avec deja un timer sur interruption le temps de voir pour le faire avec un RTC et je vous dirais.

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

#12 Message par cyril13110 » mer. 27 avr. 2022 21:36

Bonsoir à tous,

Je viens de modifier le code de la puce et j'ai intégré un timer de 1s par interruption réglé et contrôlé par oscilloscope.
A chaque interruption il est activé la mesure et le calcul de puissance.
Le resultat est sans appel, en mesure de puissance j'obtiens une belle différence plus de 100mAh de plus et ce pour le moment sur 3 batteries différentes.

Voila la derniere mise à jour de code.

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]
dim   seconde as bit
' 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
    sortie_direction as sbit at TRISC2_bit
    Trans as sbit at Portc.0

sub procedure Interrupt
()
  if (TMR0IF_bit) then
    TMR0IF_bit 
= 0
    TMR0H         
= 0x0A
    TMR0L         
= 0xF0
    
'Enter your code here
     seconde = 1
     Portc.2 = not Portc.2
  end if
end sub

 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_PILE) then
    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 électrons. Elle 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

  
   
'  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,8,"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,9,"A")
    
 '
   FloatToStr(quantiteElectriciteTotale, txt)
    IntToStr(quantiteElectriciteTotale, txt)
    Lcd_Out(4,1,"Q=")
 '   Lcd_Chr(4,3,txt[0])
 '
   Lcd_Chr(4,4,txt[1])
    Lcd_Chr(4,3,txt[2])
    Lcd_Chr(4,4,txt[3])
    Lcd_Chr(4,5,txt[4])
    Lcd_Chr(4,6,txt[5])
    Lcd_Out(4,7,"mAh")
  
end sub

main
:
'   Main program 

    OSCCON = $7F
    ADCON1 = $0D
    ADCON2 = $BC
    
 '
  RA0 Entrée ANA, RA1 Entrée ANA
 
 
'Init timer 0
   T0CON         = 0x84
    TMR0H         = 0x0A
    TMR0L         = 0xF0
  GIE_bit         = 1
  TMR0IE_bit         = 1
 
 '
 RCO Sortie commande transistor, RC1 entrée TOR BP marche
 Trans_direction 
= 0
 
' Port B commande afficheur
 sortie_direction = 0
 
     ADC_Init ()
    Lcd_Init()
    seuilBasBatterieAtteint = 0
    quantiteElectriciteTotale=0
    seconde =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 (seconde = 1) then
              seconde =0
             if   (seuilBasBatterieAtteint = 0) then
                  mesureQuantiteElectricite()
                  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, txt)
             Lcd_Chr(3,3,txt[0])
             Lcd_Chr(4,4,txt[1])
             Lcd_Chr(3,5,txt[2])
             Lcd_Chr(3,6,txt[3])
             Lcd_Chr(3,7,txt[4])
             Lcd_Chr(3,8,txt[5])
             Lcd_Out(4,1," mAh")
             Delay_ms(1000)
          end if
    
          end if
    
    Wend
end.


Prochaine étage, je change du pic pour intégrer la gestion de 5 batteries en même temps. Ca sera un 18F46J50.
Je croise les doigts que les nouvelles cartes que j'ai redemandé au chinois cette fois ci soit dans le bon sens sans effet miroir.

D'ici la bonne soiré à tous et la suite au prochain episode


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

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