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
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
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/05/06 Etiketler: adc kullanımı, microchip pic projeleri, pic16f877 pil şarj, picbasic pro, şarj devresi
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
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 .
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.
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!
Bir de bu devre kaç volt ile çalışıyor ? Beslemeyi fişten mi alacağız?. Saygılar
Devre 5 volt dc ile çalışıyor adaptör kullanabilirsiniz
LİON PİL sarj edebilirmiyiz bana lcd göstergeli pic li bir devre lazım elinizde varmı
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
PBP2.60 kullanıyorsanız bu versiyonda LOOP ayrılmış bir komutmuş etiketi LOOP1 yapıp deneyin
Merhaba, pil ekranda gösterdiği pil voltajını nerden alıp gösteriyor
Merhaba, pile bağlı potun orta ucundan pic16f877 2 numaralı pini
Bende sürekli pil voltajını 0 gösteriyor nasıl düzeltebilirim yardımcı olur musunuz