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. Projeyi hazırlayan Sertaç EREN emeği geçen hazırlayan kişilere teşekkürler.
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.
'****************************************************************** '* 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
lcd-gostergeli-nicd-nimh-sarj-cihazi-dijital-guc-kaynagi
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/07/01 Etiketler: microchip pic projeleri, pic16f877 proje, pic16f877 şarj, pil şarj devresi
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ı: https://320volt.com/wp-content/uploads/2010/07/smst1210_ARGE.zip
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