4 Satır LCD li Şarj cihazı ve güç kaynağı.

Başlatan Franisto, 27 Haziran 2010, 21:41:07

Franisto

'******************************************************************
'*  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


şeması :  http://rapidshare.com/files/403319474/SEMA.EMF.html

Eski bir çalışmam isis dosyası mevcut değil. şemaya göre yeniden hazırlanırsa isiste çalışacaktır. Gerçekleştirme aşamasında iki adet fotoğraf...

[IMG]http://img64.imageshack.us/img64/5085/hpim0696.jpg[/img]

[IMG]http://img17.imageshack.us/img17/4773/hpim0706s.jpg[/img]

Uploaded with ImageShack.us

Elektroemre

Cihazın ön panel tasarımını hangi programla yaptınız? Çok şık olmuş.

Saygılar...

Franisto

#2
Ön paneli Autocad ile hazırlamıştım.

Rölelerin Çıkış gerilimi ile Doğrudan alakası yok. Çıkış gerilimi pot ile ayarlanıyor. Ağırlık şarj cihazı bölüminde aslında. Güç kaynağı kısmını hadi olsun diyerek ekledim. 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.

Teşekkürler.

bzirapli