PIC16F628 Saat Tarih Isı Derece Devresi Pic Basic

| Mayıs 23, 2023 Tarihinde güncellendi
PIC16F628 Saat Tarih Isı Derece Devresi Pic Basic

LCD Göstergeli Saat Tarih Derece Devresinin tüm kaynak dosyaları var

Devre Şeması ve Bitmiş çalışır halinin resimleri
pic16f628-picbasic-lcd_saat picbasic-saat-tarih-derece

Pic Basic Yazılımı

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18.05.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628                      'işlemci 16F628
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

Include "MODEDEFS.BAS"
ON INTERRUPT GoTo Kesme
OPTION_REG=%0000000     
INTCON=%10010000
CMCON=7
OPTION_REG.7=1
'***********LCD Tanımlamaları***********
DEFINE LCD_DREG		PORTB	
DEFINE LCD_DBIT			4		
DEFINE LCD_EREG		PORTB	
DEFINE LCD_EBIT  		1			
DEFINE LCD_RWREG    PORTB	
DEFINE LCD_RWBIT     	2		
DEFINE LCD_RSREG	PORTB	
DEFINE LCD_RSBIT		3				
DEFINE LCD_BITS			4		
DEFINE LCD_LINES		2
'***********Saat İçin Gerekli Port Tanımlamaları***********
RTC_RST     var     PORTA.0
RTC_DTA     var     PORTA.7
RTC_CLK     var     PORTA.6
'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
'***********Port Ayarları***********
TrisA=%00011000
TrisB=%00000001

PortA=0
PortB=0
'***********RTC DS1302 DEĞİŞKENLERİ***********
SN      VAR BYTE
DAK     VAR BYTE
SAAT    VAR BYTE
GUN     VAR BYTE
AY      VAR BYTE
YIL     VAR BYTE
MEM     var byte
SAYI    VAR BYTE
DAY     var byte
ONLAR   VAR BYTE
BIRLER  VAR BYTE
'***********Değişken Tanımlamaları***********
Ayar_D var bit
Sayac var byte
B_Say var byte
'***********Sensör Tanımlamaları***********
Comm_Pin   VAR	PortA.1
Busy        VAR BIT
HAM         VAR	WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD
'***********Buton Tanımlamaları***********
Buton1 var PortB.0
Buton2 var PortA.4
Buton3 var PortA.3
'***********LCD yi Kullanıma Hazır Hale Getir***********
LOW PORTB.2

lcdout $FE,1 
PAUSE 200
lcdout $FE,1 
'***********Değişken Değerleri***********
Ayar_D=0
Sayac=0
B_Say=0 
'***********Program Başlangıcı***********        
Basla:
    if Ayar_D=0 then
        gosub Zaman_Oku
        gosub SENSOROKU
        lcdout $FE,1,dec2 Saat,":",dec2 Dak,":",dec2 Sn," ",Sign,DEC ISI,".",DEC1 (Float),0,"C"
        lcdout $FE,$C0,dec2 Gun,"/",dec2 Ay,"/20",dec2 YIL,"  "
        gosub Gun_Yaz
        pause 500
    else
        select case Sayac 'Cursor Ayarı
            case 1
                lcdout $FE,$0E
                lcdout $FE,$80
            case 2
                lcdout $FE,$0E
                lcdout $FE,$83    
            case 3
                lcdout $FE,$0E
                lcdout $FE,$86
            case 4
                lcdout $FE,$0E
                lcdout $FE,$C0
            case 5
                lcdout $FE,$0E
                lcdout $FE,$C3
            case 6
                lcdout $FE,$0E
                lcdout $FE,$C6
            case 7
                lcdout $FE,$0E
                lcdout $FE,$CC
        end select
        
        gosub Buton_Oku
        lcdout $FE,1,dec2 Saat,":",dec2 Dak,":",dec2 Sn
        lcdout $FE,$C0,dec2 Gun,"/",dec2 Ay,"/20",dec2 YIL,"  "
        gosub Gun_Yaz
        
    
    endif

Goto Basla
'***********Sensör Oku***********
SENSOROKU: 
           
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
    
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10 
       GOTO GEC   
    endif
    TEMP = 625 * (HAM+1)        ' 
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
'***********Buton Oku***********
Buton_Oku:
    
    select case Sayac
        case 1
            if Buton3=0 then saat=saat+1
            if Buton2=0 then saat=saat-1
            pause 200
            if saat>23 then saat=0
        case 2
            if Buton3=0 then dak=dak+1
            if Buton2=0 then dak=dak-1
            pause 200
            if dak>59 then dak=0
        case 3
            if Buton3=0 then sn=sn+1
            if Buton2=0 then sn=sn-1
            pause 200
            if sn>59 then sn=0
        case 4
            if Buton3=0 then Gun=gun+1
            if Buton2=0 then gun=gun-1
            pause 200
            if gun>31 then gun=1
        case 5
            if Buton3=0 then ay=ay+1
            if Buton2=0 then ay=ay-1
            pause 200
            if ay>12 then ay=1
        case 6
            if Buton3=0 then YIL=YIL+1
            if Buton2=0 then YIL=YIL-1
            pause 200
            if YIL>99 then YIL=1
        case 7
            if Buton3=0 then day=day+1
            if Buton2=0 then day=day-1
            pause 200
            if day>7 then day=1
    end select
    
    gosub Ayar
return
'***********Saat Ayarı***********
Ayar:
    if sayac=8 then
        lcdout $FE,$0C
        lcdout $FE,1
        lcdout,$FE,1,"***SAAT/TARiH***"
        lcdout $FE,$C0,"***AYARLANDI***"
        pause 1000
        lcdout $FE,1
        Sayac=0
        Ayar_D=0
        gosub Zaman_Yaz
    endif    
return
'***********Zaman Oku***********
ZAMAN_OKU:

         high RTC_RST
         shiftout RTC_DTA, RTC_CLK, 0, [$BF]
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, day, YIL, MEM] 
         low RTC_RST
         MEM=SN:GOSUB CEVIR:SN=SAYI  
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         MEM=day:GOSUB CEVIR:day=SAYI
        
         return
'***********Zaman Yaz***********
ZAMAN_YAZ:
    MEM=SN:GOSUB TERSCEVIR:SN=SAYI
    MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI
    MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI
    MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI
    MEM=AY:GOSUB TERSCEVIR:AY=SAYI
    MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI

           
    high  RTC_RST 
    SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]
    low RTC_RST:PAUSE 1 
    high RTC_RST          
    SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, day, YIL, 0]  'YAZ
    low RTC_RST 
    PAUSE 10
return
'***********Çevir***********               
CEVIR:
    ONLAR=MEM & %01110000
    ONLAR=ONLAR>>4
    BIRLER=MEM & %00001111
    SAYI=ONLAR*10+BIRLER
RETURN  
'***********Ters Çevir***********
TERSCEVIR:                
    ONLAR=MEM DIG 1
    ONLAR=ONLAR<<4
    BIRLER=MEM DIG 0
    SAYI=ONLAR+BIRLER
RETURN    
'***********Gün Yaz***********
GUN_YAZ:
    SELECT CASE DAY
        CASE 1 
            LCDOUT $FE,$CC,"PZTS" 
        CASE 2 
            LCDOUT $FE,$CC,"SALI"
        CASE 3
            LCDOUT $FE,$CC,"CRSB" 
        CASE 4 
            LCDOUT $FE,$CC,"PERS" 
        CASE 5
            LCDOUT $FE,$CC,"CUMA" 
        CASE 6 
            LCDOUT $FE,$CC,"CMTS"
        CASE 7 
            LCDOUT $FE,$CC,"PAZR"
    END SELECT
return
'***********Kesme***********
return
DISABLE   
Kesme: 	
    if Ayar_D=0 then
        lcdout $FE,1,"SAAT/TARiH AYARI"
        lcdout $FE,$C0,"****************"
        pause 1000
        lcdout $FE,1
    endif
    pause 400
    Ayar_D=1
    Sayac=Sayac+1
    INTCON.1=0
Resume
Enable
end

proteus simülasyon ve ares pcb picbasic .bas ve diğer yazılımlar .hex .asm;

pic16f628-saat-tarih-isi-derece-devresi-pic-basic

Şifre-Pass: 320volt.com

Yayım tarihi: 2008/12/20 Etiketler: , , , , , ,



29 Yorum “PIC16F628 Saat Tarih Isı Derece Devresi Pic Basic

  1. BoSDvDBoSDvD

    PCB’de direnç gibi gösterilmiş yerlere hangi malzemeler gelecek.BU yazan nedir ayrıca ?:)

    CEVAPLA
  2. MesutMesut

    BU diye gösterilen 7905 regölatör entegresi direç gibi gösterilenler direçmiş mesela 3ve2 nolu ayağa bağlı olan dirençler 10k lık direçlermiş similassyon yazan klasör içindeki dns dosyasını açarsan devre açık şekilde belirtilmiş

    CEVAPLA
  3. aliali

    kullanılan malzemeleri söyleyebilirmisiniz teşekkürler

    CEVAPLA
  4. İsmail soranİsmail soran

    Arkadaşım DS18B20 dediğimiz malzeme ile NTC çok farklı.Birisinin temeli direnç birisinin ki tamamen farklı.Bu ds1820 sadece bi işe yaramaz illaki Programda algoritma oluşturulup değerleri hesaplanmaktadır.İstersen biraz araştır bu malzemeyi hem bakarsın ilerde sana da lazım olur.Hadi kolay gelsin.Bu arada devreyi tasarlayan arkadışımıza da teşekkür ederim

    CEVAPLA
  5. fıratfırat

    lcd saat tarih derece devreni %90 yaptım ama o baskı devrede gözüken “BU” elemanı ne birde lcd nin ayaklarında 2 adet direnç var bunların değerlerini de söyler misiniz?
    şimdiden tşkler

    CEVAPLA
    1. gevvgevv Yazar

      İlk yorumda sorulmuş

      Mesut Diyor ki:
      24/12/2008 02:21

      BU diye gösterilen 7905 regölatör entegresi direç gibi gösterilenler direçmiş mesela 3ve2 nolu ayağa bağlı olan dirençler 10k lık direçlermiş similassyon yazan klasör içindeki dns dosyasını açarsan devre açık şekilde belirtilmiş

      Mesut bey evap vermiş ama bende işin içinden çıkamadım 🙂 “BU” 7905 olmaz 2 bacak bağlantısı var 7905 3 baçaklı şimdi bildiğim kadarı ile pic16f628 pin bir giriş yada çıkış olarak ayarlanır büyük ihtimal çıkış olarak ayarlanmıştır “BU” yazan eleman uyarı için buzer olabilir

      lcd ayaklarında sondan 5 ve son ayak arasında ki direnç lcd parlaklık ayarı için diğerini çözemedim araştırmalarım devam ediyor

      CEVAPLA
  6. fıratfırat

    cevabın için tşkler gevv peki bu “BU” yazan eleman reset için bir buton olabilir mi?

    CEVAPLA
    1. gevvgevv Yazar

      Emin olmak için picproje forumlarında işi bilen abilerimize danıştım 🙂 şimdi “BU” elemanı işlev görmüyor kod üzerinde bir tanımlama yok ama tahminimçe buzerli bir uyarı düşünülmüş vaz geçilmiş neyse bu elemanı dikkate almayın

      lcd pdf1.alldatasheet.com/datasheet-pdf/view/146552/HITACHI/LM016L.html incelediğimizde 5 ve son ayak arasında ki direnç lcd parlaklık ayarı için kullanılacak değeri 1k diğer direnç ise lcd beslemesini sınırlamak için kullanılmiş lcd 5 volt ile çalışıyor fakat beslemesi 7805 girişinden alınmış giriş voltajı normalde 7..8..9 volt lcdyi korumak için direnç ile sınırlamalı bence lcd beslemesinide 7805 çıkışdan alın

      CEVAPLA
  7. hdrgkbrnhdrgkbrn

    ben bu devreyi kurdum ama lcd nin alt satırında yazması gereken takvim bilgisi ve gün gözükmüyo saat ve sıcaklık lcd nin üst satırında var çalışıyor ama alt satır boş yardımcı olurdanız sevinirim sorun acaba nerede

    CEVAPLA
    1. kaankaan

      lcd ye gerilim yetersiz kalıyor lcd nin beslemesini ayrı bi kaynaktan direk lcd ye bağlarsan sorun çözülür ben öyle yaptım ve alt satır geldi

      CEVAPLA
  8. antivir-USantivir-US

    hdrgkbrn
    arkadaşım bu devreyi ben de yaptım gayet güzel bir devre,ancak dediğin sorun bende de var ve bu sorunu ancak devrenin enerjisini arka arkaya hızlıca kesip vererek aşıyorum,birkaç kez elektriği verip bırakınca kendine geliyor ve alt satır da okunabiliyor.Bu sorun ise tamamen LCD ile alakalı,devre veya programla alakalı değil(programla şöyle olabilir;lcd yi birkaç kez bir şekilde resetler/açar kapar ise olabilir).ben böyle düşünüyorum

    CEVAPLA
  9. virüsvirüs

    Gerçek zaman saati Ds1302 mi ?

    dallas firmasına ait DS18B20 mi ?

    ayrıca arkadaşlar isiste lcd de sıcaklık kısmında +65535 yazıyor onu nasıl düzeltebilirim ..increase decrease yapınca değişiklik olmuyor

    CEVAPLA
  10. ismailismail

    Arkadaşlar ben bu devreyi yaptım fakat şöyle bi problem var. Diyelimki saat;

    14:11:29

    olsun. Burada 14saat,11 dakika,29 un ise saniye olması gerekir. Fakat bende saniye dakikada bir atıyor. dakika olması gereken yer ise atmıyor. Belki saat olabilir.O zaman saat olması gereken yer ne :))

    biraz karışık oldu ama. Yardımcı olursanız sevinirim.

    CEVAPLA
  11. ismailismail

    @virüs
    Arkadaşım isiste absürt değer göstermesi normal.Çünkü isis bir simülasyon programı.Ancak devrede DS18B20 nin değeriyle oynarsan LCD gösterilen değerinde düzeldiğini göreceksin.

    CEVAPLA
  12. omuromur

    arkadaşlar bu devreyi 16f877 ye uyarlaya bilirmiyim. ASM kodları verebilirmisiniz?

    CEVAPLA
  13. erol ayvazerol ayvaz

    selam bu devreyi bir okul projesi için bende yapmaya calısıyorum tek farklılık olarak sonuç olarak aldığımız değerleri (saat tarih sıcaklık) değerlerini hafıza kartına aktarmak istiyorum. bir başka devde bu olayı cözdüm ama bundaki devrede nasıl yapacağımı bilemiyorum yardımcı oluabilirseniz çok sevinirim bu arada devre çizim ve kodlarını zip olarak atmışsınız ellerinize sağlık 😉

    CEVAPLA
  14. isoiso

    arkadaşlar! ben bu devreyi yapmaya çalıştım fakat bir sorun var! herşey tamam ama zamanı ayarladıktan sonra tekrar kendini resetliyor. yani saniye kısmı hiç hareket vermiyor. neden olabilir? yardımcı olursanız çok sevinirim…

    CEVAPLA
  15. CihanCihan

    Merhaba arkadaşlar ben pice yeni merak sardım. Bu devreyi yapmaya çalışanlardanım. Her şeyi yaptım(öyle zannediyorum) 12V pili bağladım hiç bir tepki alamadım. Birde baskı devre ile İSİS teki devreyi tam uyuşturamıyorum. LCD ayaklarından bazıları boşa çıktı. Acaba LCD yimi yanlış bağladım. Yoksa 12V diye Karaköyden küçük bir pil aldım o mu yetersiz geliyor. Ne olur yardımcı olun pic serüvenin başlamadan sona ermesin. Birde LCD ayaklarında ki direnç gösteren yerleri kısa devre yaptım.

    CEVAPLA
  16. ali enverali enver

    arkdaşlar ben 18 nolu bacağın bağlandığı elemanı anlayamadım yeniyim yardımcı olursanız sevinirim.

    CEVAPLA
  17. emrecanemrecan

    arkadaşlar bu devrede trimpotu nereye koyacağız acaba ?

    CEVAPLA
  18. serdarserdar

    bu devreye kayan yazıda eklenme şansı varmı acaba?

    CEVAPLA
  19. OzgunOzgun

    bu kodların picbasic de değil de (source file) c dilinde yazılmış olanı lazım .

    CEVAPLA
  20. Hüseyin Alperen CanbazoğluHüseyin Alperen Canbazoğlu

    PCB DOSYASINDA DİRENÇLERİN DEĞERLERİ YAZMIYOR NEDİR ACABA DİRENÇLERİN DEĞERİ

    CEVAPLA
  21. CenkCenk

    Merhaba Arkadaşlar devreyi proje ödevi olarak aldım.
    Fakat devrede birkaç sorunla karşılaştım.
    1) DS18B20 ısı sensörün 3 nolu bacağındaki direnç değeri nedir?
    2) DS1302 saat entegresinin 2 ve 3 nolu bacağındaki kondansötürün malzeme değeri nedir?
    3) 2×16 Lcd’nin soketinde bağlı 2 direnç değerleri nelerdir?
    4) 7805 regüle entegresinin 1 ve 3 nolu bağlı devre elemanı nedir?
    5) Lcd nin pin adları nelerdir?
    6) Pic16F628A entegresinin 2 ve 3 nolu bacağındaki direnç değerleri nelerdir?
    7) Devredeki BU elemanı nedir?

    Şimdiden teşekkürler.

    CEVAPLA
  22. CenkCenk

    Merhaba Arkadaşlar devreyi proje ödevi olarak aldım.
    Fakat devrede birkaç sorunla karşılaştım.
    1) DS18B20 ısı sensörün 3 nolu bacağındaki direnç değeri nedir?
    2) DS1302 saat entegresinin 2 ve 3 nolu bacağındaki kondansötürün malzeme değeri nedir?
    3) 2×16 Lcd’nin soketinde bağlı 2 direnç değerleri nelerdir?
    4) 7805 regüle entegresinin 1 ve 3 nolu bağlı devre elemanı nedir?
    5) Lcd nin pin adları nelerdir?
    6) Pic16F628A entegresinin 2 ve 3 nolu bacağındaki direnç değerleri nelerdir?
    7) Devredeki BU elemanı nedir?

    CEVAPLA
  23. barış Alikabarış Alika

    devrede şöyle bir hata var:saniye -dk.normal bir şekilde sayarken bazı zamanlarda 2 atlıyarak gidiyor(örnek 44 den 46.saniyeye atlıyor).buda saatin bir süre sonra ileri gitmesine neden oluyor.sorun yazılımsalmıdır?bunun dışında bir sıkıntı yok

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir