Elektronik / Mikrodenetleyici Projeleri/

Lcd göstergeli Nicd Nimh şarj cihazı dijital güç kaynağı

Sponsorlu Bağlantılar

Ni-cd Ni-mh pil şarj cihazı dijital güç kaynağı olarakta kullanılabilir devrede kullanılan mikrodenetleyici pic16f877 kaynak yazılım ve şema dosyası bulunuyor.

Eski bir çalışmam isis dosyası mevcut değil. şemaya göre yeniden hazırlanırsa isiste çalışacaktır. Çıkış gerilimi pot ile ayarlanıyor. Devre pil şarj ederken akım takipçisi olarak çalışıyor. Şöyleki 1 Amper ile şarj seçerseniz 1 adet pilde bağlasanız 5 adet seri pilde bağlasanız. voltaj otomatik ayarlanıyor ve 1 amper şarj akımı sabit kalıyor. Değişik akımları röleler seçiyor.

sarj-devresi-on-panel-lcd


'******************************************************************
'*  Adı     : CHARGERSUPPLY877.BAS                                *
'*  Yazan   : Sertaç EREN                                         *
'*  Tarih   : 10.12.2006                                          *
'*  Sürüm   : 1.0 (MEVCUT SURUM)                                  *
'*  Notlar  : 16F877 Kullanılarak yapılmıştır. NiCd ve NiMH       *
'*          : piller için uygun olup -delta_V sistemi ile çalışır *
'*          : digital güç kaynağı özelliği vardır                 *
'******************************************************************
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
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   8 ' Set number of bits in result
DEFINE   ADC_CLOCK   3 ' Set clock source (3=rc)
DEFINE   ADC_SAMPLEUS 50 ' Set sampling time in uS
'-------------------------------------------------------------------------------

@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_ON
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------
ADCON1=%00000100 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------
PORTA = 0 : TRISA=%00001111 ' a portun 4 giriş A,V, akü ve fan
PORTB = 0 : TRISB=0
PORTC = 0 : TRISC=%00000110 ' C PORTUNDA BTNLAR İÇİN GİRİŞ PİNLERİ AYARI
PORTD = 0 : TRISD=0
PORTE = 0 : TRISE=0
'-------------------------------------------------------------------------------
symbol BUZZER       = PORTD.7
Symbol BTNSET       = PORTC.2
symbol BTNOK        = PORTC.1

symbol FAN          = PORTE.0
symbol CIKISROLESI  = PORTE.1
SYMBOL MODROLESI    = PORTC.3
SYMBOL SARJ         = PORTC.4   'SARJ=1 KAPALI , ŞARJ=0 AÇIK
symbol LEDDESARJ    = PORTC.5
symbol LEDSARJ      = PORTC.6
symbol LEDHAZIR     = PORTC.7

'-------------------------------------------------------------------------------
HAMV        var word
HAMVOLT     VAR WORD
VOLT        var word
Mvolt       var word
HAMA        VAR WORD
AMPER       var word
TOPLAM      var word
TOPLAMA     VAR WORD
TOPLAMI     VAR WORD
VDON        VAR WORD
ADON        VAR WORD
IDON        var word
HAMI        var word
ISI         VAR WORD
HATA        VAR BYTE
ADET        VAR BYTE
SIRA        VAR BYTE
ROLE        VAR BYTE
AKIM        VAR WORD
SURE        VAR WORD
LIMIT       VAR WORD
DESARJ      VAR WORD
PILVOLT     VAR BYTE
SN          VAR WORD
HAM         VAR WORD
OKUNAN      VAR BYTE
HANE        VAR WORD
ESKIVOLT    VAR BYTE
KALAN       VAR BYTE
POZ         VAR BYTE
I           VAR WORD
SAAT        VAR BYTE
DAK         VAR BYTE
SAN         VAR BYTE
DELTA_V     VAR BYTE
TOLERANS    VAR BYTE
ROLE_D      VAR BYTE
'-------------------------------------------------------------------------------
ROLE=0
VOLT=0
LIMIT=0
SURE=0
DESARJ=0
SN=956
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W line Low (W), şemada direkt GND ye bağlanabilir.
LCDOut $FE,1 ' LCD de CLS yapar
pause 200  ' LCD nin açılması için gerekli süredir.
'-------------------------------------------------------------------------------

BASLA:
SOUND BUZZER,[126,30,126,8]
GOSUB ANAEKRAN
PAUSE SN

lcdout $FE,1,    "MOD SECIMI:"
LCDOUT $FE,$C0,  "                 "
lcdout $FE, $94 ,"SET : GUC KAYNAGI"
lcdout $FE, $D4 ,"OK  : SARJ CIHAZI"
SECIM:
IF BTNOK=1 THEN GOTO CHARGER
IF BTNSET=1 THEN GOTO  GUCKAYNAGI
GOTO SECIM

CHARGER:

HIGH SARJ
GOSUB PILSEC
SOUND BUZZER,[126,10,126,10]
PAUSE   500
GOSUB AKIMSET
SOUND BUZZER,[126,10,126,10]
PAUSE   500
GOSUB SURESEC

PAUSE   500
GOSUB DESARJVARMI
SOUND BUZZER,[126,10,126,10]

STANDBY:
CIKISROLESI=0
PILVOLT=15*ADET 'BU ŞARJ SONUNDA ULAŞILACAK VOLTAJDIR
PAUSE SN:GOSUB EKRANCIHAZHAZIR
pause SN:GOSUB VOLTAJOKU
IF volt =< 1 THEN GOTO STANDBY
'  PAUSE sn:gosub ekran:PAUSE SN
IF DESARJ=0  THEN GOTO HAZIRLA
IF DESARJ=1  THEN GOTO DESARJET
GOTO STANDBY

DESARJET:
LEDDESARJ=1
SOUND BUZZER,[126,10,126,10]
SOUND BUZZER,[126,10,126,10]

IF PORTD.1=0 THEN ROLE_D=1:PORTD.1=1' Desarj için müşterek kullanılan en zayıf akım rölesi

for I = 0 to 10800
GOSUB VOLTAJOKU
GOSUB ZAMAN
GOSUB EKRANDESARJ
GOSUB ISIKONTROL
pause sn
IF VOLT<1 THEN

IF ROLE_D=1 THEN PORTD.1=0' Desarj için müşterek kullanılan en zayıf akım rölesi

GOSUB EKRANDESARJSONU
DESARJ=0
LEDDESARJ=0
GOTO HAZIRLA
ENDIF

next

EKRANDESARJ:

'"12345678901234567890"
lcdout $FE,1,    "   DESARJ OLUYOR    "
LCDOUT $FE,$C0,  "      ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN,"  "
lcdout $FE, $94 ,"                    "
lcdout $FE, $D4 ,"PIL VOLT :",#VOLT,",",#MVOLT," V  "
return

EKRANDESARJSONU:

SOUND BUZZER,[126,10,126,10]
SOUND BUZZER,[126,10,126,10]
lcdout $FE,1,    "    DESARJ BITTI    "
LCDOUT $FE,$C0,  "      ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN,"  "
lcdout $FE, $94 ,"                    "
lcdout $FE, $D4 ,"PIL VOLT :",#VOLT,",",#MVOLT," V  "

PAUSE 4000
return

'-------------------------------PİL ŞARJ ÖN HAZIRLIK----------------------------
HAZIRLA:
CIKISROLESI=1
PORTD=PORTD|ROLE
LEDSARJ=1
PORTA=8
LCDOUT $FE,1
'CIKISROLESI=1
FOR I=0 TO 5'240 '4 DK SÜRE 3 DK pili stabilize ediyoruz 1 DK ON SARJ
IF volt =< 1 THEN
PORTD.1=0
PORTD.2=0
PORTD.3=0
PORTD.4=0
PORTD.5=0
LEDSARJ=0
GOTO STANDBY
ENDIF
GOSUB ZAMAN
GOSUB EKRAN1
GOSUB ISIKONTROL
IF I<3 THEN        '10 DEĞİL 180
gosub VOLTAJOKU
PAUSE SN
ELSE

LOW SARJ : PAUSE 200 : HIGH SARJ
PAUSE 500
GOSUB VOLTAJOKU
PAUSE 460
ENDIF
NEXT
SOUND BUZZER,[126,10,126,10]
SOUND BUZZER,[126,10,126,10]
TAMSARJ: '----------------------------------------------------------------------
ESKIVOLT=0
DELTA_V=0
'LIMIT=0
for I = 0 TO 53999

GOSUB ZAMAN

HIGH SARJ
PAUSEus 100
GOSUB VOLTAJOKU
LOW SARJ
GOSUB AMPEROKU
GOSUB EKRAN2
GOSUB ISIKONTROL
PAUSE SN
IF volt =< 1 THEN
PORTD.1=0
PORTD.2=0
PORTD.3=0
PORTD.4=0
PORTD.5=0
LEDSARJ=0
GOTO STANDBY
ENDIF
IF LIMIT =< SAAT THEN GOSUB EKRAN4: SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:GOTO TRIKLE     IF OKUNAN>PILVOLT THEN GOSUB EKRAN3:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:GOTO TRIKLE
IF DELTA_V=1 THEN GOSUB EKRAN3:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:SOUND BUZZER,[126,10,126,10]:GOTO TRIKLE

NEXT

TRIKLE:
LEDSARJ=0
LEDHAZIR=1

HIGH SARJ
PAUSE 960
GOSUB VOLTAJOKU
GOSUB ISIKONTROL
IF volt =< 1 THEN          PORTD.1=0          PORTD.2=0          PORTD.3=0          PORTD.4=0          PORTD.5=0            LEDHAZIR=0          GOTO STANDBY          ENDIF     LOW SARJ     PAUSE 40     GOTO TRIKLE ZAMAN :     SAAT=I/3600     DAK=(I-(SAAT*3600))/60     SAN=I-(SAAT*3600)-(DAK*60)     RETURN EKRAN1:                     '"12345678901234567890"     lcdout $FE,1,    " BATARYA  SARJ ICIN "     LCDOUT $FE,$C0,  "    HAZIRLANIYOR    "     lcdout $FE, $94 ,"      ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN," "     lcdout $FE, $D4 ,"PIL VOLT :",#VOLT,",",#MVOLT," V  "     RETURN EKRAN2:                        '"12345678901234567890"     lcdout $FE,1,    "    SARJ OLUYOR     "     LCDOUT $FE,$C0,  "      ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN,"  "     lcdout $FE, $94 ,"PIL AKIM :" ,dec AKIM,"ma     "     lcdout $FE, $D4 ,"PIL VOLT :",#VOLT,",",#MVOLT," V  "     RETURN EKRAN3:                        '"12345678901234567890"     lcdout $FE,1     lcdout $FE,$C0,    "   BATARYA  DOLDU   "     IF DELTA_V=1 THEN     LCDOUT $FE,$94,  " ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN," (DELTA-V)  "     ELSE     LCDOUT $FE,$94,  " ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN," (VOLTAGE)  "        ENDIF     'Lcdout $FE, $94 ,"      ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN,"  "     'lcdout $FE, $D4 ,"                    "        RETURN     EKRAN4:             '"12345678901234567890"     lcdout $FE,1,    "   SARJ KESILDI     "     LCDOUT $FE,$C0,  "   (SURE DOLDU)     "     lcdout $FE, $94 ,"     ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SAN,"  "     lcdout $FE, $D4 ,"                    "     RETURN EKRANCIHAZHAZIR: '--------------------------------------------------------------        lcdout $FE,1,    "                    "     LCDOUT $FE,$C0,  "    CIHAZ  HAZIR    "     lcdout $FE, $94 ,"  BATARYA BAGLAYIN  "     lcdout $FE, $D4 ,"                    "     RETURN          DESARJVARMI: '------------------------------------------------------------------     'lcdout $FE,1,    "PIL DESARJI : "     SOUND BUZZER,[126,10,126,10]     IF DESARJ=0 THEN GOTO D0     IF DESARJ=1 THEN GOTO D1             D0:     lcdout $FE,1,    "PIL DESARJI : KAPALI"     GOSUB EKRANDUGME DD0:pause 150     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     DESARJ=1     GOTO DESARJVARMI     ENDIF     GOTO DD0 D1:     LCDOUT $FE,$1,  "PIL DESARJI : ACIK "     GOSUB EKRANDUGME DD1:pause 150     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     DESARJ=0     GOTO DESARJVARMI     ENDIF     GOTO DD1    RETURN SURESEC:   '--------------------------------------------------------------------        gosub SUREAL         gosub SUREEKRAN        IF BTNSET=1 then        SOUND BUZZER,[126,10,126,10]          SURE=SURE+1           IF SURE>15 then SURE=0 ' LIMIT=0
GOSUB SUREAL
GOSUB SUREEKRAN
endif
IF BTNOK=1 then
'      GOSUB SIL
'  WHILE BTNOK=1:wend

'LIMIT=LIMIT
RETURN
endif
goto SURESEC
SUREAL:
lookup2 SURE,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],LIMIT 'akım değerleri buradan değiştirilecektir.
return

SUREEKRAN:
LCDOUT $FE,2,    "MAX. SARJ SURESI :"
LCDOUT $FE,$c0  ,dec LIMIT," SAAT  "
GOSUB EKRANDUGME
pause 100
return

AKIMSET:   '--------------------------------------------------------------------
gosub AKIMAL
gosub AKIMEKRAN
IF BTNSET=1 then
SOUND BUZZER,[126,10,126,10]
ROLE=ROLE+1
IF ROLE>4 then ROLE=0
GOSUB AKIMAL
GOSUB AKIMEKRAN
endif
IF BTNOK=1 then
'      GOSUB SIL
' WHILE BTNOK=1:wend
ROLE=1<<(ROLE+1)                    RETURN        endif        goto AKIMSET AKIMEKRAN:        LCDOUT $FE,2,  "SARJ AKIMI: ",dec AKIM,"ma     "       LCDOUT $FE,$c0, "                    "        GOSUB EKRANDUGME        pause 100             return         AKIMAL: lookup2 ROLE,[200,450,800,1200,2200],AKIM 'akım değerleri buradan değiştirilecektir.             return    PILSEC: '----------------------------------------------------------------------- PAUSE 300 SOUND BUZZER,[126,10,126,10] IF SIRA=0 THEN GOTO PIL1 IF SIRA=1 THEN GOTO PIL2 IF SIRA=2 THEN GOTO PIL3 IF SIRA=3 THEN GOTO PIL4 IF SIRA=4 THEN GOTO PIL5 PIL1:     PAUSE 100     lcdout $FE,2,    " 7,2 V BATTERY PACK "     LCDOUT $FE,$C0,  "      (6 CELL)      "       GOSUB EKRANDUGME     ADET=6 P1:     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     SIRA=1     GOTO PILSEC     ENDIF     GOTO P1 PIL2:     PAUSE 100     lcdout $FE,2,    " 8,4 V BATTERY PACK "     LCDOUT $FE,$C0,  "      (7 CELL)      "     GOSUB EKRANDUGME     ADET=7 P2:     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     SIRA=2     GOTO PILSEC     ENDIF     GOTO P2 PIL3:     lcdout $FE,2,    " 9,6 V BATTERY PACK "     LCDOUT $FE,$C0,  "      (8 CELL)      "     GOSUB EKRANDUGME     ADET=8 P3:     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     SIRA=3     GOTO PILSEC     ENDIF      GOTO P3     PIL4:     lcdout $FE,2,    " 2,4 V BATTERY PACK "     LCDOUT $FE,$C0,  "      (2 CELL)      "     GOSUB EKRANDUGME     ADET=2 P4:     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     SIRA=4     GOTO PILSEC     ENDIF     GOTO P4 PIL5:     lcdout $FE,2,    " 4,8 V BATTERY PACK "     LCDOUT $FE,$C0,  "      (4 CELL)      "     GOSUB EKRANDUGME     ADET=4 P5:     IF BTNOK = 1 THEN RETURN     IF BTNSET = 1 THEN     SIRA=0     GOTO PILSEC     ENDIF     GOTO P5 EKRANDUGME:  '------------------------------------------------------------------     lcdout $FE, $94 ,"OK  : ONAYLA        "     lcdout $FE, $D4 ,"SET : DEGISTIR      "     PAUSE 100        RETURN '------------------------------------------------------------------------------- GUCKAYNAGI:     SOUND BUZZER,[126,10,126,10]     GGG:     GOSUB ISIKONTROL     GOSUB AMPEROKU     GOSUB VOLTAJOKU     GOSUB EKRANSUPPLY     GOTO GGG ANAEKRAN:     lcdout $FE,1,    "     SMST 1210"     LCDOUT $FE,$C0,  "    NI-CD/NI-MH"     lcdout $FE, $94 ,"  BATTERY CHARGER"     lcdout $FE, $D4 ,"DIGITAL POWER SUPPLY"     RETURN EKRANSUPPLY:     lcdout $FE,2,    "    GUC KAYNAGI"     MODROLESI = 1     CIKISROLESI = 1        PAUSE 100     lcdout $FE, $94 ,"VOLT   :            "     lcdout $FE, $94 ,"VOLT   :"  ,#VOLT,",",# MVOLT,"V "     lcdout $FE, $D4 ,"AMPER  :            "     lcdout $FE, $D4 ,"AMPER  :"  ,#amper,"mA"     PAUSE 100     RETURN AMPEROKU:      'RETURN     TOPLAMA=0          FOR ADON = 1 TO 10     ADCIN 1,HAMA '0 nolu kanaldan Analog değeri oku ve HAM değişkenine aktar.     BAKkK:   IF ADCON0.2=1 THEN BAKkK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.     TOPLAMA = TOPLAMA + HAMA     NEXT ADON     HAMA= TOPLAMA/10         AMPER = (hamA)*20     'IF AMPER>2100 THEN HATA=2 :GOSUB KORUMA
RETURN

VOLTAJOKU:

TOPLAM=0
FOR VDON =1 TO 10
ADCIN 0,HAMV '0 nolu kanaldan Analog değeri oku ve HAM değişkenine aktar.
BAK:   IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
TOPLAM=TOPLAM+HAMV
NEXT
VOLT = (TOPLAM/10) '25 DEĞERİ 25 VOLTA KADAR ÖLÇÜM DEMEK

MVOLT = (VOLT//10)
OKUNAN = VOLT
volt = volt/10

IF ESKIVOLT>(OKUNAN+2) THEN DELTA_V=1

IF OKUNAN>ESKIVOLT THEN ESKIVOLT=OKUNAN

RETURN

ISIKONTROL:
' RETURN
TOPLAM=0
FOR IDON = 1 TO 10
ADCIN 3,HAMI '3 nolu kanaldan Analog değeri oku ve HAM değişkenine aktar.
TOPLAM = TOPLAM + HAMI
NEXT IDON
HAMI= TOPLAM/10
BAKK:   IF ADCON0.2=1 THEN BAKK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
ISI = ((HAMI)*3)/10
IF ISI >40 THEN FAN = 1
IF ISI <38 THEN FAN = 0     'IF ISI >60 THEN HATA=1 :GOSUB KORUMA
RETURN

Projeyi hazırlayan Sertaç EREN emeği geçen hazırlayan kişilere teşekkürler. Kod ve şema dosyası: Lcd göstergeli Nicd Nimh şarj cihazı dijital güç kaynağı

Dosya indirme LINK listesi (TXT formatında) link-10708.zip şifre-pass: 320volt.com

  • indüktans

    dostum, bize hex dosyasınıda verseydin. pbp da zor bela derleyebildim ama aşağıdaki gibi uyarı veriyor. senin çalıştırdığın dosyayı kullanmamız daha garanti olurdu.

    Warn CHARGE ~ 1.ASM 1122: [102] code crosses boundary @ 800h
    Warn CHARGE ~ 1.ASM 2031: [102] code crosses boundary @ 1000h

    • @indüktans

      hex dosyası: http://320volt.com/wp-content/uploads/2010/07/smst1210_ARGE.zip

  • hawke

    TEBRİKLER Devreniz fevkalade güzel bir proje ve prof bir sarj aleti ama paylaşım yapılırken sadece kodları ve semasının yanında pcb sinide verseydiniz daha iyi olacaktı sakın işin kolayına kacmayın kendiniz yapmaya çalısın diye düşünebilirsiniz doğal olarak ama buna tek taraflı bakmayalım lütfen birçok öğrenciler var mağdur ve nice öğretmenler var biraz anlayıssız o yüzden kolaylık için pcbde yanında verebilseydiniz emin olun bir çok kişinin hayır duasını alırdınız tekrar TESEKKÜRLER saygılarımla

    Halit ARSLAN