U

DS1307 kullanımı..

Başlatan umitco, 30 Eylül 2011, 01:52:33

umitco

ete hocam , DS1307 yi set ederken girilen en son parametre ile bu entegrenin 7 nolu pininden her saniyede bir sinyal almak mümkün diye hatırlıyorum. Sizin matrix saat diye bir projenizde DS1307 kullandığınız bilgisine ulaştım ama projeye ulaşamadım. Bu entegreden her saniye (veya saat veya gün) bir sinyal almak mümkünmüdür ?

inventor

7 nolu bacaklardan sn bilgisi alabilirsin. Çıkışı 1 HZ e ayarlaman yeterli. Normalde 1hz-4 khz-8 khz-32 khz yapılabilir diye biliyorum. ETE hocam iyisini bilir.

DS1307 nin registerlararını ayarlarken RS0 ve RS1 pinlerini 0 a çekmen yeterli olacaktır 1 hz için.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

#2
Biraz daha detay vermekte yarar var sanırım.
DS1307 nin 7 nolu bacağından kare dalga sinyal çıkışı almak mümkün. Bu işi kontrol eden ise CONTROL registeridir.  Bu register 8 bitlik tir.
| BIT 7 | BIT 6  | BIT 5  | BIT 4  | BIT 3  | BIT 2  | BIT 1  |  BIT 0 |
|  OUT  |    0     |    0     |SQWE  |    0     |     0    |  RS1   |   RS0  |
Tabloda görüleceği üzere Bit7 , Bit4 ve Bit1 ile Bit0 bu işde etkili olan bitlerdir.
OUT biti , kare dalga çıkışı iptal edilmiş iken Çıkış bacağının seviyesini ayarlar.  Şayet  SQWE=1 ve OUT=1 ise Çıkış pini 1 dir.
Şayet SQWE=0 ve OUT=0 ise Çıkış pinide sıfır dır.

SQWE biti Kare dalga enable biti dir. Bu bit 1 ise RS1 ve RS0 bitlerine bağlı olarak ilgili frekans çıkış bacağından çıkar.

RS1-RS0 bitleri frekans seçme bitleridir.
0       0    ise frekans 1 Hz dir.
0       1    ise frekans 4096  Hz dir.
1       0    ise frekans 8192  Hz dir.   
1       1    ise frekans 32768 Hz dir.

Şimdi şöyle bir düşünürsek çıkış bacağından 1 Hz sinyal alabilmek için yalnızca SQWE pinini set etmek yeterli oluyor. Bunun karşılığı olarak Kontrol Registerine  % 00010000 değerinin yazılması gerekecektir. Kontrol registeri adresi $07 dir. O halde,
I2CWrite SDA,SCL,$D0,$07,[%00010000] komutu bu işi yerine getirecekir.

Bu arada Matrix saat projesini Forum, Projeler kısmına yükledim.

Kolay Gelsin
Ete


est32

sağolun hocam önemli bilgiler ediniyoruz.Benim de timer1'li saat işi yattı,mecburen ds1307'ye çevireceğim.Bir türlü ayar tutmuyor derdi nedir çözemedim hala,ne matematiksel ne de deneme yanılma hiç bir yolla olmuyor.

ete

Kristallerin sıcaklıkla çok fazla değer değiştirdiğini göz ardı etme. Ayar tutturabilmen için devreyi çok satbil sıcaklığı olan bir yere bırakman ve sıkı bir şekilde takip etmen gerekir. Genellikle 1 saatlik takipler sana doru sonucu yakalaman için ip uçları verebilir.

Bana kalırsa en doğrusu frekansını okuyabildiğin bir RTC kullanman. Okuyabildiğin diyorum çünki aynı kristal oradada kullanılacak.  Bir frekansmetre ile 32768 olarak okuduğun frekansa sahip RTC de ileri geri meselesi ortadan kalkmasada en aza indirgenir.

Ete

umitco

ete hocam ve inventor , teşekkürler yardımlarınız için , 1Hz lik sinyali kullanarak istediğim kodlamayı yapabildim.

inventor

Hayırlı olsun inşallah bitirirsin projeni.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

est32

Devre oda sıcaklığında bekliyor,odamın sıcaklığı 22-25 aralığını geçmiyor.Bu kadar küçük aralıkta bile bu kadar sorun yaşatabiliyorsa baştan ofsayta düşmüşüm.Daha bunu smd malzemelerle kol saatine dönüştürmeyi düşünüyordum,o zaman vay halime.Gerçi denediğim kristal elektronikçiden aldığım kalitesiz bişeydi.

Dün bir kaç saatçi dolaştım ellerinde kaliteli çıkma veya yeni kristal olup olmadığını sordum,karınları tok olunca yok dediler.Evde bozuk kol saati olacaktı bir iki tane,onlara dadanma vakti gelmiş maalesef.

umitco;
amaç sadece 1Hz çıkış almaksa ds1307'ye para ödemeye gerek yok.Masa saatlerinde 1Hz üreten bobinin lehimli olduğu osilatör devresi var.Onun çıkışı da 1Hz dir.Çıkış transistör ile yükseltilip pic'e kesme verecek şekilde kullanılabilir.Ben daha önce tasarladığım bir duvar saatimde bunu kullandım ve ufak tefek ileri gitme geri kalma(yine de stabil sayılır) dışında sorun yaşamıyorum ve hala memnuniyetle kullanıyorum.Hem o devre üzerinde alarm da var,alarm pinine şase ulaşınca alarm ötmeye başlıyor.Alarmlı bir saat olacaksa işlemci belleğini de fazla doldurmadan yapılabilir.Kullandığım devrem burada;
http://postimage.org/image/6nh9884/
http://postimage.org/image/7nv2v38/

inventor

#8
Sanırım seçmiş olduğun kristal öylesine bir kristal. Senin ihtiyacın olan 32.768 lik kristali FC kristal diye sorarsan aradığın parçayı bulmuş olursun. Bu neyin kısaltılması bilmiyorum ama bildiğim şey ; tamir ettiğim, zaman konulu  bir çok üründe bu kristallerin kullanılmış olması.Sıcaklık değerine göre çalışma bandları çok geniş. Hatta bir seferinde zaman ayarından şüphe ettiğim bir cihazın FC kristalini 1 saat boyunca 50 derecenin üstünde ısıtmıştım ve şaşırmamıştı.
Burası okul gibi oldu.  :) Ete hocam FC kristal hakkında biraz araştırma yapıp bizi de aydınlatır mısın? Yabancı dilin çoğumuzdan iyidir sanırım.

Selam
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

est32

doğrusu FC kristal diye bişeyi ben de ilk kez duyuyorum :D
Bunu elektronik malzeme satan bir dükkan çalışanının duyma ihtimalini %1 üzerine bile çıkarmıyorum :D dediğin gibi FC kısaltması stabilitesi artırılmış ısıdan etkilenmeyen bir malzemenin ya da kelimelerin kısaltması olabilir.

Yani bu durumda başka yollar aramak zorundayım.Ama böyle iyi bir kristali sanırım bilgisayar anakartlarından bulabilirim.Hem anakartlar ısınan soğuyan bişey olduklarından üzerlerindeki malzeme de uygun olacaktır.

Dur dur dur aklıma ne geldi.Eski cep telefonlarının içinde smd tip 32.768 kristal var,şimdi geldi aklıma.Sanırım o da iş görür.hem bulması da zor olmasa gerek.
http://img.mosup.com/7993/7993044847434153606_1.jpg
Herkese teşekkür ettim...

ete

FC nin kelime anlamı kristal ile birlikte kullanılınca Fine Crystal anlamına geliyor.
Fine kelimesi bir sürü Türkçe karşılığı olan bir kelime. genellikle asıl anlam yaninda yer alan kelimelerle belirleniyor.
Buradaki anlamı bence katıksız saf ve iyi kaliteli, hassas (kristal) anlamınadır.
Bizim piyasada FC kristal olarak satılan mal varmıdır bilemem ama araştırınca dışarıda olduğu görülüyor.

Ete

umitco

  est32 , ilgin için teşekkürler , 1307 yi saat entegresi olarak kullanıyorum , 1Hz çıkış istememdeki sebep bu sinyali ile PORTB INT kesmesi oluşturmak ve zaman işlemlerini gerçekleştirmek , yeni zaman değerini ekrana vermek, kronometre veya geri sayıcıyı ayarlamak v.b

Fakat bir sorunum var,bu entegreyi set ederken daha önce serout2 komutuyla set ediyordum, serout2 komutu seri olarak aldığı sayıyı hexe dönüitürebiliyor  fakat şimdi tuş takımı kullanmam gerekiyor,dolayısıyla tuş takımından girilen saat ve dak bilgisini hex yapmalıyım. PicBasic de desimal sayıyı hex yapmanın bir yöntemi veya kodu varmı ?

ete

Sayı (yada değişken) başına yerleştirdiğin işaret ile sayı tabanı seçer. Yine örnekle açıklayayım.
A=255 olsun (desimal)
Şayet hiç bir işaret kullanmaz isen sayı desimaldir. "A" hali.
Başında $ işareti kullanırsan sayı Hex dir. $A şeklinde
Başında % işareti kullanırsan sayı binary dir. "%A" şeklinde.
Ancak her türlü hesaplama desimal ile yapılır (aslında işlemcide binary yapılıyor) ama bir yerlerde gösteriken yukarıda açıkladığımız formatları kullanırız. Ekranda gösterme formatlarıda benzer olarak;
LCDOUT $Fe,$80,"SAYI-Desimal=",DEC A
LCDOUT $Fe,$80,"SAYI-Hex=",HEX A
LCDOUT $Fe,$80,"SAYI-Binary=",BIN A
şeklinde kullanılır.
Yukarıda yer alan  DEC , HEX , BIN ifadelerinin yanına rakam  koyarsan o kadar haneyi ekrana yazar.
DEC3 sana sayı kaç hane olursa olsun sana 3 hane yazar olmayan haneler yerine sıfır koyulur.
HEX2 sana 2 hane hex satı yazar.
BIN8 sana 8 bitlik sayıyı yazar.

Serout komutu sayı formatı değiştirmez. Aslında sayı hep aynıdır çünki değeri değişmez ama başına koyduğun format işareti nedeni ile sayı taban değiştirir.

Tuş takımından girilen sayıyı desimal girip nerede kullanacaksan direk Hex yapabilirsin. AMa altıncı hissim senin bu konuda yanıldığını söylüyor. Neden olduğunu izah edeyim.
Hemen hemen bütün RTC lerde Zaman bilgisi 4 bitlik formata göre tutuluyor. Saniye bilgisini ele alalım.
Saniye=45 olsun. Bu değer DS 1307 de şu şekilde tutuluyor.
45 sayısının birler basamağı olan 5 sayısı (%00000101)  , %0101 şeklinde SN hafızasının ilk 4 bitini oluşturuyor.
45 sayısının Onlar basamağı olan 4 sayısı ise (%00000100), %0100 şeklinde SN hafızasının sondaki 4 bitini oluşturuyor.
Toparlarsak SN=45 sayısı DS1307 de %0100 0101 şeklinde yer alıyor.  Norml okumaya bakarsan bu sayı 8 bitlik bir normal sayıdır ve karşılığı 64+4+1=69 sayısına karşılık gelir. Peki bu sayının hex karşılığına bakalım nasıl görünecek?;
Bu sayının Hex karşılığı $45 şeklinde görülür. Gördünmü aslında desimal 45 olan sayı DS1307 nin hafızasında Hex45 olarak yer alıyor. Bu seni aldatmasın sayımızın asıl değeri desimal olarak 45 dir. Ancak DS1307 de bu sayı desimal olarak 64 değeri ile yer almaktadır.
Şİmdi sana gelelim sen Tuş takımından 45 sayısını gireceksin ve sayıyı Hex formatına çevireceksin gibi bir anlam çıkardım sözlerinden sırf bu sayıyı DS1307 ye yazmak için öyle değilmi ?.  Şayet düşündüğüm doğru ise tuttuğun yol yanlış demektir. O halde ne yapman lazım? sayıyı Hex formatına değil DS1307 nin kayıt formatına çevirmen gerekiyor. Nasılmı?
Önce sayının birler hanesini al ve bir değişkene yerleştir. Yani şöyle yap;
BIRLER=SN DIG 0
Sonra Onlar hanesini al ONLAR=SN DIG 1  (ONLAR=%00000100 şeklinde olacaktır.)
Şimdi Onlar hanesini 4 hane sola kaydır ONLAR=ONLAR <<4  (ONLAR=01000000 şeklini alacaktır)
Şimdi ikisini bir araya topla  SANIYE=ONLAR+BIRLER   (SANIYE=%0100 0101  şeklini alacaktır bu ise 64 sayısıdır)
Şimdi götür bu sayıyı DS1307 ye yaz. Hepsi bu kadar. Umarım yapmak istediğin budur.

Bir başka konuya daha değineyim , DS1307 den okunan değerleri normal şartlarda gerçek desimale çevirmen gerekmez. Pek çok programda DS1307 den (veya DS1302 den) okunan değerleri HEX formatında ekrana yazdırırlar. Sayıları (SN dak veya saat bilgileri) DS1307 den okuduktan sonra direk ekrana HEX formatında yazdırırsan direk görmen gereken zaman değerlerini ekranda görebilirsin. Ama saat ayarlarken mutlaka format çevirimi yapman gerekir.

Ete

umitco

dakika=(dakika dig 1<<4)+dakika dig 0
saat= (saat dig 1<<4)+saat dig 0
I2CWrite PORTA.1,PORTA.0,$D0,$01,[dakika,saat]

Sonuş olarak böyle bir formül çıktı,yine detaylı ve gayet anlaşılır, güzel bir ETE anlatımı , tekrar teşekkürler hocam.


Mucit23

Merhabalar Ete hocam. Başka bir saat projenizden Ds1307 okuma programınıza bakarak ds1307'den saniye,dak,saat, gün,ay,yıl, ve hafta içerisindeki gün bilgilerini okumak istiyorum. Aslında okuma yapabiliyorum ama okuduğum değeri doğru düzgün dönüştürmesini yapamadım.

hocam denemelerimi protonda yapıyorum. Basicdeki I2CRead komutunun işlevini protonda Busin komutu yerine getiriyor. Okuma yapabiliyorum. Saniye değeride değişiyor. Yanlız değerler düzgün olarak dönüştüremedim.
okuma veya yazma programı aşağıdaki gibi

ZAMANOKU:
        BusIn $D0,$00,[SN,DAK,SAAT,HAFTA,GUN,AY,YIL]
        SN=((SN>>4) & $35)*10+(SN & 35)
        DAK=((DAK>>4) & 35)*10+(DAK & 35)
        SAAT=((SAAT>>4) & 35)*10+(SAAT & 35)
        HAFTA=((HAFTA>>4) & 35)*10+(HAFTA & 35)
        GUN=((GUN>>4) & 35)*10+(GUN & 35)
        AY=((AY>>4) & 35)*10+(AY & 35)
        YIL=((YIL>>4) & 35)*10+(YIL & 35)
return         
ZAMANYAZ:
        SN =(SN Dig 1)<<4+SN Dig 0
        DAK =(DAK Dig 1)<<4+DAK Dig 0
        SAAT=(SAAT Dig 1)<<4+SAAT Dig 0
        HAFTA =(HAFTA Dig 1)<<4+HAFTA Dig 0
        GUN =(GUN Dig 1)<<4+GUN Dig 0
        AY =(AY Dig 1)<<4+AY Dig 0
        YIL =(YIL Dig 1)<<4+YIL Dig 0
        BusOut $D0,$00,[SN,DAK,SAAT,HAFTA,GUN,AY,YIL]
return


Hocam bazı uygulamalarınızda saat okunurken en sonda control registerinin okunduğunu gördüm. Ben bunu eklemedim. Bir sorun yaratırmı.
Örnek vereyim. Bu dotmatrix saat uygulamanızda gördüm bunu,
ZAMANOKU:
        I2CRead SDA,SCL,$D0,$00,[SN,DAK,SAAT]',HAFGUN,GUN,AY,YIL,TEMP]
        temp=saat
        SAAT=(temp>>4) & $03
        saat=saat*10+(temp & $0F)
        dak=((dak>>4) & $0F)*10+(dak & $0F)
        sn=((sn>>4) & $0F)*10+(sn & $0F)
        RETURN

Yıl dan sonra temp diye bir veri ekleyip bunu hesaba katmışsınız. Ama yukarıda temp okuması yapılmıyor. Okuduğum değerleri düzgün bir şekilde dönüştürmem için ne yapmam gerekiyor.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal