Mikro denetleyici kontrollü lcd ekranlı pil şarj devresi

| Mayıs 26, 2023 Tarihinde güncellendi
Mikro denetleyici kontrollü lcd ekranlı pil şarj devresi

Hazırlayan : Kerem Süzgün – Pil şarj devresi pic16f877 ile gerçekleştirilmiş yazılım picbasic pro ile hazırlanmış 2×16 lcd ekran üzerinde şarj durumu gözlenebiliyor isis simulasyon ve kaynak pbp asm hex dosyaları var. Emeği geçen kişilere teşekkürler

Program 0.5 volt arasını 10 kademe olarak pil karakterine yansıtıyor, seviye sıfır olursa karakter bitti anlamında yanıp sönerek ikaz veriyor ayrıca şarj düğmesine basıldığın da farklı bir ekranda şarj durumu yine pil karakterine, hareketli olarak yansıyor isterseniz farklı voltajlara uyarlayabilirsiniz, ADC çevirici olarak ETE hocanın notlarında ki programı taban olarak kullandım, sağolsun program satırlarının yanında gayet açıklayıcı tanımları var,
kendisine teşekkürlerimi sunarım.

Pil şarj devre şeması ve şarj durum görüntüleri
pil-durumu-lcd-gosterge pic16f877-pil-sarj-devresi

Picbasic pro kod

'****************************************************************
'*  Name    : pil.BAS                                           *
'*  Author  : [kerem süzgün]                                    *
'*  Notice  : Copyright (c) 2005 [kerem süzgün]                 *
'*          : All Rights Reserved                               *
'*  Date    : 12.04.09                                          *
'*  Version : 1.0                                               *
'*  Notes   :ETE hocanın notları kalıp olarak kullanılmıştır    *
'*          :                                                   *
'****************************************************************
TRISA=%000000001
TRISB=%000000001
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------
DEFINE LCD_DREG		PORTB	'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT		4		'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG		PORTB	'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT		3		'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT	1		'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES	2		'LCD Kaç sıra yazabiliyor

DEFINE	ADC_BITS	10	    'A/D çevirim sonucu kaç bit olacak
DEFINE	ADC_CLOCK	3	    'Clock kaynağı (3=rc)
DEFINE	ADC_SAMPLEUS	100	'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
'OPTION_REG=0
'-------------------------------------------------------------------------------
HAM    var  word  'ADC den okunan ham digital değer.                                                                        
VOLT   var  word '16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak.
Mvolt  var  byte

BattLevel  var BYTE     ' 0 - 10, 0=bos  10=dolu
Char       var byte
y          var byte
ONLAR      VAR BYTE
TVOLT      VAR WORD
'-------------------------------------------------------------------------------


LCDOut $FE,1	' LCD de CLS yapar
pause 200       ' LCD nin açılması için gerekli süredir.
'------------------------------------------------------------------------------- 

BASLA:
      LCDout $FE,1
      PAUSE 100
      ADCIN 0,HAM  '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
      
BAK:  
     ADCIN 0,HAM  '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
     IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
      
      
      Ham=ham+1 'Hesap kolaylığı açısından Ham değerini bir artırdık
      
'Okunan değer 0-5 volt için 0-1024 olacağından okunacak değer başına volt değeri
' 5/1024 =0,0048828 olacaktır. Sayı çok küçük olduğundan bu değeri 1000 ile 
'çarpmalıyız. Ohalde (Okuma/V)= 4,8828 bu değeri 256 ile çarpar isek 
'4,8875 x 256 = 1250 değerini buluruz. Bu değeri kullanarak 32 bit işlem yapabiliriz.
'1250 değeri (5/1024)*256 değerine karşılık gelmektedir. 
'sonuçta ADC HAM değerini bu sayı ile çarpıp 256'ya bölersek sonucu elde etmiş oluruz.
'ancak sonuç 32 bitlik sınırda olduğundan bu işi 32 bit çarpma ile yapıyoruz ve orta
'baytı aldığımızda ise zaten sayının 256'ya bölünmüş halini aldığımızdan başka bir
'işlem yapmadan sonucu elde etmiş oluruz.

      Volt=(ham */ 1250)/100 'Ham ile 1250 yi 32 bit olarak çarp ve 100'böl
      Mvolt=volt//10

'Burada yeni bir komut veya işlem şekli görüyorsunuz. MOD alma yani (//) kalan bulma
'Bir sayını başka bir sayıya bölünmesinden sonra kalan miktarı bulma işlemine MOD
'alma denir. Örnek W=A//1000 , A'yı 1000'e böl kalanı W değişkenine koy anlamındadır.
'bizde yukarıda Milivolt değerini bulmak için volt (10 ile çarpılmış halini) 10'a 
'bölüp kalanı Mvolt değişkenine yerleştiriyoruz.
      Volt=Volt/10
      
      
      
      LCDout $FE,$80," Pil= ",1
      LCDOUT $FE,$C0," VOLT=",#VOLT,",",# Mvolt
      ONLAR=VOLT*10
      TVOLT=ONLAR+Mvolt
    
    IF TVOLT=0 THEN BattLeveL=0
    IF TVOLT=5 THEN BattLeveL=1    
    IF TVOLT=10 THEN BattLeveL=2 
    IF TVOLT=15 THEN BattLeveL=3   
    IF TVOLT=20 THEN BattLeveL=4 
    IF TVOLT=25 THEN BattLeveL=5  
    IF TVOLT=30 THEN BattLeveL=6 
    IF TVOLT=35 THEN BattLeveL=7  
    IF TVOLT=40 THEN BattLeveL=8 
    IF TVOLT=45 THEN BattLeveL=9  
    IF TVOLT=50 THEN BattLeveL=10 
   
 IF  PORTB.0=1 THEN GOTO  PILSARJ   
  
 

        gosub ShowBattery
       IF BattLeveL=0 THEN LCDout $FE,$80," Pil= "," "
        pause 300
     
goto BAK

ShowBattery:     ' pil seviye göstergesi  0 - 10, 0=boş  10=dolu
        lcdout $FE,$48,$06
        for y = 5 to 1 step - 1
            if BattLevel >= (y *2 - 1) then
                if BattLevel >= (y*2 ) then
                   Char = $0F
                else
                   Char = $0B
                endif
            else
                Char = $09
            endif
            lcdout Char
 
        next y
        lcdout $0F,$00                   
        
   
return


PILSARJ:

LCDout $FE,1,1
LCDout $FE,$C0,"- Pil Doluyor -"

Loop:    
    for BattLevel =10 to 0 step -1 
        gosub Battery
        pause 500
    next BattLevel
IF  PORTB.0=0 THEN GOTO  BASLA
goto Loop


Battery:     ' pil seviye göstergesi  0 - 10, 0=boş  10=dolu
        lcdout $FE,72,6
        'lcdout $FE,$48,$06 orjinal hex kod
     
        for y=5 to 1 step -1 
            if BattLevel >= (y * 2 - 1) then
                if BattLevel >= (y * 2) then
                   Char =15' $0F
                else
                   Char =11' $0B
                endif
            else
                Char =9' $09
                 
            endif
            lcdout Char
        next y
        lcdout $0F,0'$00
return


END 
mikro-denetleyici-kontrollu-lcd-ekranli-pil-sarj-devresi

Şifre-Pass: 320volt.com

Yayım tarihi: 2009/05/06 Etiketler: , , , ,



12 Yorum “Mikro denetleyici kontrollü lcd ekranlı pil şarj devresi

  1. aykutaykut

    hocam bu uygulamanın aynısını yapmak için 1 hafta önce karar aldım devrede farklı gerlilimlerde olcak en çok hoşuma giden ise pil ekranını dolu boş göstergesi bende bu kodu programda kullanırım
    eyvallah

    CEVAPLA
    1. murat hatomurat hato

      batarya besleme voltajını nerden alıyor lm 317 veya başka entegre kullanılmamış devrede pic 16f 877 kontrol ediyor da lcd ekranı calıştıyor pili şarj ediyor gösteriyor da pil sarj voltajını nerden alıyor …kusura bakmayın amatör olarak ugraşıyorum daha önce verilen lcd ekranlı pil sarj devresini yaptım cok güzel calışıyor .

      CEVAPLA
  2. DemirKarahanDemirKarahan

    Selamu Aleyküm

    Ben bu devre ile 12 Volt 7 Amper Kuru tip aküleri şarj edebilirmiyim. Eğer oluyosa bunu nasıl yaparım. Programla ilgili bilgim yetersiz. Hangi kodları değiştirmem gerekecek. yada devrede hangi bölümleri değiştireceğim. Şimdiden iyi çalışmalar. Emeği geçen bütün arkadaşlara teşekkürler.

    CEVAPLA
  3. TutsakTutsak

    devre çok güzel olmuş gerçekten tebrikler bi de şu voltu arttırmamız ne işe yarıyor?

    ben yeni lise 3 e geçtimde daha tam olarak bilimiyorum 😀 şimdiden teşekkürler!

    CEVAPLA
  4. TutsakTutsak

    Bir de bu devre kaç volt ile çalışıyor ? Beslemeyi fişten mi alacağız?. Saygılar

    CEVAPLA
  5. murat hatomurat hato

    LİON PİL sarj edebilirmiyiz bana lcd göstergeli pic li bir devre lazım elinizde varmı

    CEVAPLA
  6. ahmetahmet

    hocam kodunuzu yazıyorum ama ERROR Line 143: LOOP without a matching DO. (535.pbp)
    ERROR Line 149: Syntax error. (535.pbp) ve ERROR Line 143: LOOP without a matching DO. (535.pbp)
    ERROR Line 149: Syntax error. (535.pbp)
    hatası alıyorum nasıl düzelir

    CEVAPLA
    1. gevvgevv Yazar

      PBP2.60 kullanıyorsanız bu versiyonda LOOP ayrılmış bir komutmuş etiketi LOOP1 yapıp deneyin

      CEVAPLA
  7. ereneren

    Merhaba, pil ekranda gösterdiği pil voltajını nerden alıp gösteriyor

    CEVAPLA
  8. ereneren

    Bende sürekli pil voltajını 0 gösteriyor nasıl düzeltebilirim yardımcı olur musunuz

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir