Bu çalışmamızda Arduino ile kullanılan DS1307 modülünü inceleyip kendimiz bir tane yapmayı deneyeceğiz.

Öncelikle yukarıdaki kart hakkında genel bilgiler olarak; yaklaşık 3cm x 3cm boyutlarındaki kartın bir yüzünde 3V Lityum pil (2032) takabileceğimiz bir pil yuvası bulunuyor. Kartın diğer yüzünde DS1307 entegresi ile birlikte bir eeprom(32 baytlık 24C32 ayarları kaydetmek için), 32768MHz değerinde bir kristal ve smd bileşenler var. Her iki taraftan da bağlantı için delikler açılmış. Pil yuvasının yanında, U1 olarak etiketlenmiş yerde bulunan 3 delik sayesinde bu karta DS18B20 sıcaklık sensörü bağlanabiliyor. böylelikle zaman bilgisi ile birlikte, sıcaklık bilgisi de okunabiliyor. Karttaki bağlantı deliklerinden ‘DS’ ile bu bilgi alınıyor. Ayrıca saatin hassasiyeti sadece kristal ile sağlandığından, ortam sıcaklığı kristalin hassasiyetini etkileyebiliyor (maksimum ayda 5 dakika deniliyor). İşte DS18B20 sıcaklık sensörü ile bazı uygulamalarda bu hassasiyetin iyileştirmesi yapılabiliyor. Kart üzerindeki ‘SQ’ ise karttan alınabilecek kare dalga bağlantısı.
Modülden bahsetmişken benzer iki modül daha var; İlki biraz daha ucuz olan DS1302 (bazı videolarda bağlantı sorunları yaşananılabileceğinden bahsediliyor), ikincisi de biraz daha pahalı ama fiziken daha küçük olan DS3231 gerçek zamanlı saat modülleri. Bunların dışında fiyatı çok daha yüksek olan başka bir çok modül olduğunu da hatırlatayım.
Biz 1307 entegresini inceleyelim. Bunu yaparken yine referans alacığımız kaynak entegrenin veri kağıdı. Veri kağıdına gör bu entegre Gerçek zamanlı saat (Real Time Clock-RTC) olarak üretilmiş saniye, dakika, saat, ay, yıl, ayın kaçıncı günü, haftanın kaçıncı günü gibi bilgileri sayabiliyor. Ayrıca 31 gün ve daha az olan ayları biliyor, artık yıl hesabı da yapabiliyor. İstenirse 12-saat ya da 24-saat olarak da çalışabiliyor. (Bu yüzyılın sonuna kadar!)

8 Bacaklı entegrenin bacak bağlantıları şekildeki gibi verilmiş. Gnd (4) ve Vcc (8) bacakları besleme gerilimi için kullanılıyor. Bu entegre 5 volt ile besleniyor. Ayrıca bu bağlantıda kesilme olursa diye bir Vbat (3) bacağı eklenmiş. Buraya 3 voltluk bir Li-Ion pil bağlanıyor. Besleme gerilimi Vbat bacağındaki gerilimin 1,25 katına kadar düştüğünde entegre kendini korumaya alıyor, mikrodenetleyici ile bağlantısını kesiyor, kendisini korumaya alıyor. Bu durumda iken çekilen akım o kadar küçük oluyor ki (500nA), veri kağıdında 48mAh kapasiteli bir pilin (Vbat’a bağlanan) 10 yıldan dah fazla süre bu entegreyi çalıştırdığı iddia ediliyor. Besleme gerilimi gerilim yükseldiğinde saat aynen çalışmaya devam ediyor.
X1 (1) ve X2 (2) bacakları arasına bir kristal bağlanıyor. bu kristalin değeri 32768kHz. Veri kağıdında bu kristal ile entegre arasındaki bağlantının çok yakın olması öneriliyor. Aslında bu saatin düzgün çalışması en çok bu kristale bağlı. Ayrıca diğer devre elemanları, bağlantı kabloları ve sıcaklık veri kağıdı tarafından doğru çalışmayı etkileyen faktörler arasında sayılıyor.
Bu modüllerin çok tercih edilmelerinin nedeni ucuz olmasıyla birlikte bağlantısının da kolay olması ve Arduino kütüphanelerinin de hazır olması. Seri iletişim kullanan bu devre sadece bir saat (SCL:clock) ve bir veri giriş çıkışının yapıldığı (SDA:Data) iki bağlantıyla Arduino’ya bağlanıyor(I2C bağlantısı). Bu entegrenin SQW/OUT (7) bacağından da istenirse kare dalga çıkış alınabiliyor. Bu bacaktan dört faklı frekansta kare dalga alınabiliyor: 1Hz, 4kHz, 8kHz ve 32kHz.

Yukarıdaki bağlantıdan anlaşılan, mikro denetleyiciye bağlanan pinlerde pull up direnci kullanılmış. Biz bu devrede kare dalga çıkışı ile ilgilenmediğimizden bize sadece SCL ve SDA bağlantılarını pull up dirençlerle Arduionaya bağlamak düşüyor. Bu dirençler için 1k ile 10 k arasında bir değer kullanılabilir.
Gelelim bunu Arduino ile nasıl kullanacağımıza. Bu modul Arduino IDE üzerinde zaten var. Arduino’nun resmi sitesine gittiğimizde, tüm Arduino kartları için bunun zaten yüklü olduğunu, sadece kurmamız gerektiği olduğunu görüyoruz.

Yapmamız gereken Arduino IDE üzerinden “Taslak>kütüphane ekle>kütüphaneleri yönet” üzerinden arama çubuğuna DS1307 yazıp DS1307RTC kurmak.

Sonra “Dosya>Örnekler>DS1307” üzerinden önce “SetTime” sonra da “ReadTest” örneklerini Arduino’ya yüklemek (SetTime yüklerken çift tırnak içerisine Türkçe karakter eklemeden değişiklik yapabileceğimizi hatırlatırım). SetTime programı Arduino üzerinden güncel saat/tarih verilerini modüle yazıyor. Sonra ReadTest üzerinden seri ekranı açmak. Anlaşılacağı gibi bir kez SetTime yüklendikten sonra ReadTime programı DS1307 üzerindeki verileri okuyor. Bu program çalışırken tarih değerlerini seri ekran üzerinden izleyebiliriz. Bu programlar çalışırken bende ‘TimeLib.h‘ kütüphanesini bulamadı Arduino. O yüzden Github üzerinden bu kütüphaneyi zip halinde indirip ekleyince program çalıştı. Programda tırnak içinde yazılan yazılara müdahale edebildiğimizden, bunları (Time yerine Saat, Date yerine Tarih olarak) değiştirebiliriz. Ama burada amaç sistemin nasıl çalıştığını görmek olduğu için müdahale etmedim. Projemizde bunları da değiştirebileceğim sonuçta.

Bu hazır örnekte saat(SCL) bacağını Arduino’nun A5, veri(SDA) bacağını da A4 numaralı analog (UNO ve NANO için) girişlerine bağlamayı unutmuyoruz. Ayrıca beslemeden gelen parazitleri engellemek için 100 nF değerinde bir kapasitör de devreye ekleyebiliriz. Böylece bağlantılarımızın fritzing şeması aşağıdaki gibi oluyor.

Tabi bu şekilde çok anlamsız gibi oldu. Biraz süsleyip LCD ekranda görüntü oluşturursak, devre şeması aşağıdaki şekilde olur ki daha önce LCD bağlantılarını görmüştük. Kodda da aşağıdaki linkteki değişikliği yapmak gerekecek. Bundan sonra büyük ekran ile bir proje yapmaya çalışacağız.

Bir sonraki çalışmamızda görüşebilmek dileği ile sağlıcakla kalın.
Kaynaklar:
Modül Bilgi: https://lastminuteengineers.com/ds1307-rtc-arduino-tutorial/