Ana Sayfa Forum Web Hesaplamalar Datasheet Yazarlarımız Yazı Gönder İletişim Dikkat

LCD Göstergeli Saat Tarih Derece Devresinin tüm kaynak dosyaları var proteus simülasyon ve ares pcb picbasic .bas ve diğer yazılımlar .hex .asm picbasic-saat-tarih-derece
Devre Şeması ve Bitmiş çalışır halinin resimleri

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
Yazar: gevv Tarih: 20/12/2008 Etiketler: derece, lcd, PIC16F84, picbasic, Saat, tarih 





PCB’de direnç gibi gösterilmiş yerlere hangi malzemeler gelecek.BU yazan nedir ayrıca ?:)
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ş
kullanılan malzemeleri söyleyebilirmisiniz teşekkürler
DS18B20 Yerine NTC kullansak olurmu
Arkadaslar bu devreyi kuranınız var mı?
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
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
İlk yorumda sorulmuş
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
cevabın için tşkler gevv peki bu “BU” yazan eleman reset için bir buton olabilir mi?
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 datasheet dosyasını 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
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
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
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
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.
@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.