Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: teketek - 15 Mayıs 2006, 19:14:04

Başlık: DS1302 kullanılan saat bilgilerini değiştirmek
Gönderen: teketek - 15 Mayıs 2006, 19:14:04
Merhaba,

Şekildeki devre ile ds1302 den saat bilgisini alıyor ve ekrana verebiliyorum.Ancak bunu kullanırken saati ayarlamam gerekebilir(Mesela hersene saatler ileri ve geri alınıyor). Bu ayarı yapmak için saat-dakika kısmında sağ-sol tuşları ile kursörü gezdirip aşağı-yukarı tuşları ile artırma eksiltme yapmayı düşünüyorum.


   .
   .
   .
   POZ=113
   LCDOUT $FE,1
   LCDOUT $FE,$84, HEX2 SAAT,":",HEX2 DAKIKA
   
   IF POZ=113 AND SOL=0 THEN GERI
   IF POZ=113 AND YUKARI=0 THEN SAAT=SAAT+1
   IF POZ=113 AND ASAGI=0 THEN SAAT=-1  
   GOSUB GETTIME    
     
   IF SAAT>24 THEN SAAT=00
   IF SAAT<00 THEN SAAT=24    
   .
   .
   .


böyle bir kod yazdım olmadı.Sizce ne yapmam gerekiyor?


Devrenin Şekli:
(http://img506.imageshack.us/img506/359/saatayar1jp.th.jpg) (http://img506.imageshack.us/my.php?image=saatayar1jp.jpg)
Başlık: DS1302 kullanılan saat bilgilerini değiştirmek
Gönderen: ete - 15 Mayıs 2006, 21:15:56
Bazı hataların var,
Birincisi
IF SAAT>24 THEN SAAT=00 yerine
IF SAAT=24 then SAAT=0   demen gerekir.

İkincisi,    IF SAAT<00 THEN SAAT=24   yerine
IF SAAT=255 then saat=23 demen gerekir

Sen hiç saatlerin 24:32 şeklinde gösterdiğini gördünmü?
Bunun yerine 00:32 şeklinde gösterir.
Tam ve eksi sayıların olmadığı bir sistemde sayılar sıfırdan küçük olamaz. Bu nedenle saat<00 ifadeside yanlış. Birde neden çift sıfır koyuyorsun onuda anlamadım. Teki yeterli. Bir sayıyı sürekli azaltırsan önce sıfıra ulaşır ardındanda 255 'e dönersin. Tabiiki değişkenin BYTE cinsinden ise. Word cinsinden ise 65535'e dönersin.
Aynı şekilde BYTE cinsinden bir sayıyı sürekli artırırsan önce 255'e ardından 0 rı bulursun.

Saat ayarının nasıl yapıldığı konusunda bir çalışmayı aşağıdaki linke koymuş idim. Oradan bak.

http://www.hemenpaylas.com/download/466454/SAAT_AYAR.bas.html

Ete
Başlık: DS1302 kullanılan saat bilgilerini değiştirmek
Gönderen: teketek - 21 Mayıs 2006, 13:53:11
ete hocam çok sağol(http://img151.imageshack.us/img151/9500/dilimdilim2ge7ak5.jpg) (http://imageshack.us) un,
şöyle bir kod yazdım ve çalıştırdım:


.
.
.
SAATAYAR:
   WHILE SEC=0
   WEND
LCDOUT $FE,1
   GOSUB EKRAN


DD: POZ=111    
   'LCDOUT $FE,$C1
IF POZ=111 AND SEC=0 THEN S_AYAR
IF POZ=111 AND SOL=0 THEN MENU2_1
GOTO DD

EKRAN:
   GOSUB GETTIME
   LCDOUT $FE,$80,"SAAT AYAR"
LCDOUT $FE,$C0,HEX2 SAAT,":", HEX2 DAKIKA :RETURN

EKRAN0:
   LCDOUT $FE,$C0,HEX2 SAAT,":", HEX2 DAKIKA :RETURN

EKRAN1:
   GOSUB SETTIME
   LCDOUT $FE,$80,"TARiH AYAR"
E11:LCDOUT $FE,$C0,HEX2 GUN,"/", HEX2 AY,"/", HEX2 YIL:RETURN

S_AYAR:
   LCDOUT $FE,$C1
LCDOUT $FE,$0E 'ÇİZGİLİ KURSOR AÇIK
PP: POZ=112    
PAUSE 250
GOSUB EKRAN0
IF POZ=112 AND SAG=0    THEN D_AYAR
IF POZ=112 AND YUKARI=0 THEN SAR
IF POZ=112 AND ASAGI=0 THEN SAZ
IF POZ=112 AND SOL=0 THEN MENU2_1
GOTO S_AYAR

SAR:SAAT=SAAT+1
   IF SAAT>23 THEN
       SAAT=0
       ENDIF
   GOTO S_AYAR
   
SAZ:SAAT=SAAT-1
   IF SAAT=0 THEN
       SAAT=23
       ENDIF
   GOTO S_AYAR
   
D_AYAR:
   LCDOUT $FE,$0C
   LCDOUT $FE,$C4
   LCDOUT $FE,$0E 'ÇİZGİLİ KURSOR AÇIK
POZ=113
PAUSE 250
   GOSUB EKRAN0
   IF POZ=113 AND SOL=0    THEN S_AYAR
   IF POZ=113 AND YUKARI=0 THEN DAR
   IF POZ=113 AND ASAGI=0 THEN DAZ
   GOTO D_AYAR


DAR:DAKIKA=DAKIKA+1
   IF DAKIKA>59 THEN
       DAKIKA=0
       ENDIF    
GOTO D_AYAR

DAZ:DAKIKA=DAKIKA-1
   IF DAKIKA<0 THEN
       DAKIKA=59
       ENDIF
   GOTO D_AYAR
.
.
.


ancak saati ayarlarken (mesela saati 1 artırdığımda) ekran bilgisini şöyle güncelliyorum:


E11:LCDOUT $FE,$C0,HEX2 GUN,"/", HEX2 AY,"/", HEX2 YIL:RETURN


burdaki hex2 yerine dec2 yazmam lazım biliyorum ama dec2 yazdığımda saat bilgisi eger "10" sa kendiliğinden hex karşılığı olan 16 ya dönüşüyor.kullandığım ds1302 rutini şu şekilde:


SETTIME:
       high RST  
       SHIFTOUT IO, SCLK, LSBFIRST, [$8E, 0]
       SHIFTOUT IO, SCLK, LSBFIRST, [$BE, SANIYE, DAKIKA, SAAT,GUN , AY, GUNADI, YIL, 0]
       low RST
       PAUSE 100


GETTIME:
       High RST
       SHIFTOUT IO, SCLK, LSBFIRST, [$BF ]  
       SHIFTIN IO, SCLK, LSBPRE, [SANIYE, DAKIKA, SAAT,GUN , AY, GUNADI, YIL, CONTROL]
       LOW RST        ' RESET RTC
       RETURN


acaba kullandığım bu rutinle ilgili bir değişiklik mi yapmam gerekiyor ?
Başlık: DS1302 kullanılan saat bilgilerini değiştirmek
Gönderen: ete - 21 Mayıs 2006, 20:11:11
@teketek,
DS1302 nin data sheetini hiç okumadığın belli oluyor. Yada lisan sorunu nedeni okuyamıyorsun sanırım. Sorularının tamamının cevabı orada var aslında.
Herneyse , DS1302nin 8 bitlik registerleri genelde 4'er bitlik iki ayrı bilgi halinde kullanılmaktadır. Bu nedenle desimal olarak bu bilgilerin çevrilmesi gerekir. Konuyla ilgili olarak bayağı detaylı bir açıklama verdim bu forumda . Başlığı hatırlamıyorum. Burasıda olabilir. Araştırırsan bulursun sanırım. Benda arayacağım.

Ete
Başlık: DS1302 kullanılan saat bilgilerini değiştirmek
Gönderen: teketek - 29 Mayıs 2006, 15:48:37
nerde hata yaptığımı bulabildim sonunda.SETTIME rutini şu şekilde olmalıymış:


SETTIME:
       high RST  
       SHIFTOUT IO, SCLK, LSBFIRST, [$8E, 0]
       LOW RST
       HIGH RST
       SHIFTOUT IO, SCLK, LSBFIRST, [$BE, SANIYE, DAKIKA, SAAT,GUN , AY, GUNADI, YIL, 0]
       low RST
       PAUSE 100
       RETURN


aynı sorunla karşılaşabilecek arkadaşlara kolaylık olsun diye yazdım.iyi çalışmalar herkeze.