1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » Microchip PIC devreleri bilgiler »

Mikro denetleyici kontrollü lcd ekranlı pil şarj devresi

mikro-denetleyici-pic16f877-pil-sarj

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

Dosyalar : pic16f877-pi-sarj-picbasicpro.rar

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

Yazar: gevv

Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1955 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız;

Elektronik

 
  1. aykut says:

    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

  2. DemirKarahan says:

    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.

  3. Tutsak says:

    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 :D şimdiden teşekkürler!

  4. Tutsak says:

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

  5. gevv says:

    Devre 5 volt dc ile çalışıyor adaptör kullanabilirsiniz

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)

  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.