DS1307 RTC Modülü ile Arduino
DS1307 RTC yongası
Modülün merkezinde Maxim - DS1307'den düşük maliyetli, oldukça hassas bir RTC çipi bulunuyor . Tüm zaman işleyişi işlevlerini yönetir ve seçtiğiniz herhangi bir mikro denetleyici ile kolayca arayüzlenebilen basit bir iki kablolu I2C arabirimine sahiptir.
Çip saniye, dakika, saat, gün, tarih, ay ve yıl bilgilerini saklar. Ayın sonundaki tarih, artık yıl düzeltmeleri dahil (2100'e kadar geçerli) 31 günden daha az olan aylar için otomatik olarak ayarlanır. Saat, AM / PM göstergesiyle 24 saat veya 12 saat biçiminde çalışır.
Bu kartın diğer harika özelliği, 1Hz, 4kHz, 8kHz veya 32kHz dört kare dalga frekansından birini veren ve programlı olarak etkinleştirilebilen SQW pini ile birlikte gelir.DS1307, zaman tutmak için harici bir 32kHz kristal ile birlikte gelir. Bu kristallerle ilgili sorun, dış sıcaklığın salınım frekanslarını etkileyebilmesidir. Sıklıktaki bu değişiklik önemsizdir, ancak kesinlikle artar.
Bu bir sorun gibi görünebilir, ama değil. Aslında bu, saatin ayda yaklaşık beş dakika kadar kapalı kalmasıyla sonuçlanır.
Yedek batarya
DS1307, bir pil girişi içerir ve cihazın ana gücü kesildiğinde doğru zaman işleyişi sağlar.
Yerleşik güç algılama devresi, güç kesintilerini tespit etmek için VCC'nin durumunu sürekli olarak izler ve otomatik olarak yedek kaynağa geçer. Dolayısıyla, elektrik kesintileri konusunda endişelenmenize gerek yok, MCU'nuz yine de zamanı takip edebilir.
Kartın alt tarafında 20mm 3V lityum çakmaklar için bir pil tutucu bulunur. Herhangi bir CR2032 pil uygun olabilir.
47mAh kapasiteli tam şarjlı bir CR2032 pil kullanıldığını ve çipin minimum 300nA tükettiğini varsayarsak, pil harici bir 5V güç kaynağı olmadan RTC'nin minimum 17.87 yıl çalışmasını sağlayabilir.
47mAh / 300nA = 156666.67 saat = 6527.78 gün = 17.87 yıl
Yerleşik 24C32 EEPROM
DS1307 RTC modülü, sınırlı okuma-yazma döngülerine sahip Atmel'in 32 baytlık 24C32 EEPROM yongasıyla birlikte gelir. Ayarları veya gerçekten herhangi bir şeyi kaydetmek için kullanılabilir.
24C32 EEPROM, iletişim için I2C arayüzünü kullanır ve DS1307 ile aynı I2C veriyolunu paylaşır.
Yerleşik 24C32 EEPROM, kablolu bir I2C adresine sahiptir ve 0x50 HEX olarak ayarlanmıştır.
DS18B20'yi kurduğunuzda, DS pininden sıcaklık okumaları alabileceksiniz . Bu okumalar ayrıca koddaki sıcaklık temelli zaman kaymasını telafi etmek için kullanılabilir.
DS18B20'yi lehimlemek için ipek ekranı takip edin. Ayrıca VCC ve DS arasında bir 4.7K dirence ihtiyacınız olabilir.
DS1307 RTC Modülü Pinout
DS1307 RTC modülü, kendisini dış dünyaya arayüzleyen toplam 7 pime sahiptir. Bağlantılar aşağıdaki gibidir:
SQW pin, 1Hz, 4kHz, 8kHz veya 32kHz dört kare dalga frekansından birini çıkarır ve programlı olarak etkinleştirilebilir.
DS Modülünüzde pil tutucusunun hemen yanında (U1 olarak etiketlenen) bir DS18B20 sıcaklık sensörü takılıysa, pinin çıkış sıcaklığı okumaları olduğu varsayılır.
SCL I2C arayüzü için saat girişidir ve seri arayüzde veri hareketini senkronize etmek için kullanılır.
SDA I2C seri arabirimi için veri girişi / çıkışıdır.
VCCpin, modül için güç sağlar. 3.3V ile 5.5V arasında herhangi bir yerde olabilir.
GND bir toprak pimidir.
BAT cihaza giden ana güç kesildiğinde doğru zaman işleyişi sağlamak için herhangi bir standart 3V lityum hücre veya diğer enerji kaynağı için bir yedek besleme girişidir.
DS1307 RTC modülü
RTC'yi Arduino'ya bağlayalım.
Bağlantılar oldukça basit. VCC pinini Arduino'daki 5V çıkışına bağlayarak başlayın ve GND'yi toprağa bağlayın.
Şimdi I2C iletişimi için kullanılan pinlerde kaldık. Her Arduino Board'un uygun şekilde bağlanması gereken farklı I2C pinlerine sahip olduğunu unutmayın. R3 düzenine sahip Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı), AREF pinine yakın pin başlıkları üzerindedir. A5 (SCL) ve A4 (SDA) olarak da bilinirler.
Bir Mega'nız varsa, iğneler farklıdır! Dijital 21 (SCL) ve 20 (SDA) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.
Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.
Aramanızı ' rtclib ' yazarak filtreleyin . Birkaç giriş olmalı. Adafruit by RTClib'i arayın. Bu girişe tıklayın ve ardından Yükle'yi seçin.
Arduino Kodu - Tarih ve Saat Okuma
Aşağıdaki taslak, DS1307 RTC modülünde tarih ve saati nasıl ayarlayacağınız / okuyacağınız konusunda size tam bir anlayış verecektir ve daha pratik deneyler ve projeler için temel oluşturabilir.
Seri monitörde çıkışın nasıl göründüğü aşağıda açıklanmıştır.
Kod Açıklaması:
Taslak, modülle iletişim kurmak için wire.h & RTClib.h kitaplıklarını dahil ederek başlar. Daha sonra bir RTClib kitaplığı nesnesi oluşturuyoruz ve daysOfTheWeek
gün bilgilerini depolamak için 2D karakter dizisi tanımlıyoruz .
Kodun kurulum ve döngü bölümlerinde, RTC modülüyle etkileşim kurmak için aşağıdaki işlevleri kullanırız.
begin () işlevi, RTC modülünün bağlı olmasını sağlar.
isrunning () işlevi, çipin zaman izini kaybedip kaybetmediğini kontrol etmek için DS1307'nin dahili I2C kayıtlarını okur. İşlev yanlış döndürürse, tarih ve saati ayarlayabiliriz.
Adjust () işlevi tarih ve saati ayarlar. Bu aşırı yüklenmiş bir işlevdir.
- Aşırı yüklenmiş bir yöntem
DateTime(F(__DATE__), F(__TIME__))
, eskizin derlendiği tarih ve saati ayarlar. - İkinci aşırı yüklenmiş yöntem
DateTime(YYYY, M, D, H, M, s)
, RTC'yi kesin bir tarih ve saatle ayarlar. Örneğin, 27 Ocak 2017'yi saat 12: 56'ya ayarlamak için şunları arayabilirsiniz:rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
now () işlevi geçerli tarih ve saati döndürür. Dönüş değeri genellikle veri türü DateTime değişkeninde saklanır.
year () işlevi geçerli yılı döndürür.
month () işlevi geçerli ayı döndürür.
day () işlevi geçerli günü döndürür.
dayOfTheWeek () işlevi haftanın geçerli gününü döndürür. Bu işlev genellikle yukarıdaki programda tanımlandığı gibi gün bilgilerini depolayan bir 2D karakter dizisinin dizini olarak kullanılır.daysOfTheWeek
hour () işlevi mevcut saati döndürür.
dakika () işlevi geçerli dakikayı döndürür.
second () işlevi geçerli saniyeyi döndürür.
unixtime () işlevi saniye cinsinden unix zamanını döndürür. Unix zamanı, zamandaki bir noktayı tanımlamak için kullanılan bir sistemdir. 00: 00: 00'dan beri geçen saniye sayısıdır (Koordineli Evrensel Saat olarak bilinir - 1 Ocak 1970 Perşembe).
TimeSpan () işlevi, geçerli saate / zamandan zaman eklemek / çıkarmak için kullanılır. Gün, saat, dakika ve saniye ekleyebilir / çıkarabilirsiniz. Aynı zamanda aşırı yüklenmiş bir işlevdir.
now() + TimeSpan(seconds)
geçerli saate eklenen saniye ile gelecekteki zamanı döndürür.now() - TimeSpan(days,hours, minutes, seconds)
geçmiş zamanı döndürür.
Arduino Kodu - 24C32 EEPROM'da Okuma / Yazma
DS1307 RTC modülü ile bonus olarak 32 bayt Elektrikle Silinebilir ROM elde edersiniz. Cihazın ana gücü kesilse bile içeriği silinmeyecektir.
Aşağıdaki program 24C32 EEPROM'dan bir mesaj yazar ve sonra okur. Bu programı ayarları veya şifreleri veya herhangi bir şeyi kaydetmek için kullanabilirsiniz.
Seri monitörde çıkışın nasıl göründüğü aşağıda açıklanmıştır.