DS3231 modülündeki saati bilgisayarla senkronize ediyoruz. DS3231 gerçek zamanlı saat ve basit bir program için bağlantı şeması
". DS3231 gerçek zamanlı saat modülünü tanıyalım. Makale, DS ailesinden modülleri Arduino'ya bağlamanın video talimatlarını, program listelerini, amacını ve yöntemlerini içerir.
DS3231 Gerçek Zamanlı Saat Modülü
DS3231 Gerçek Zamanlı Saat Modülü Nedir?
Gerçek zamanlı saat modülü- kronometrik verileri (güncel saat, tarih, haftanın günü vb.) kaydetmek için tasarlanmış bir elektronik devre olup, otonom bir güç kaynağı ve bir kayıt cihazından oluşan bir sistemdir.
DS3231 modülü Aslında sıradan bir saat. Arduino kartlarında zaten yerleşik bir zaman sensörü var Milliler ancak yalnızca karta güç uygulandığında çalışır. Arduino'yu kapatıp açarsanız Millis zamanı sıfırlanacaktır. Ve DS3231'de, Arduino kartının bağlantısı kesildiğinde bile modüle "güç sağlamaya" devam eden ve zamanı ölçmesine olanak tanıyan bir pil bulunur.
Modül, Arduino kartlarına dayalı olarak saat veya alarm saati olarak kullanılabilir. Veya Akıllı Ev gibi çeşitli sistemler için bir uyarı olarak.
DS3231 Özellikleri:
- modül saatleri, dakikaları, saniyeleri, tarihleri, ayları, yılları hesaplar (artık yıllar 2100'e kadar dikkate alınır);
- Çeşitli cihazlara bağlanmak için saat bir I2C arayüzü aracılığıyla bağlanır.
32 bin— Çıkış >12V harici güç sağlamak üzere tasarlanmıştır.
S.Q.W.— Programlanabilir Kare Dalga sinyal çıkışı.
SCL– Bu pin aracılığıyla I2C arayüzü üzerinden saat ile veri alışverişi yapılır.
S.D.A.– Saatten gelen veriler bu pin üzerinden iletilir.
VCC– Gerçek zamanlı saat için güç kaynağı, 5 volt gereklidir. Bu pine voltaj gelmezse saat uyku moduna geçer.
GND- Toprak.
DS3231 gerçek zamanlı saat ve basit bir program için bağlantı şeması
Farklı Arduino kartlarındaki SDA ve SCL pinleri:
S.D.A. | SCL | |
UNO | A4 | A5 |
Mini | A4 | A5 |
nano | A4 | A5 |
Mega2560 | 20 | 21 |
Leonardo | 2 | 3 |
Gerçek zamanlı saat modülünü Arduino UNO'ya bağlayalım. SDA - pim A4, SCL - pim A5.
Aşağıdaki program modelin çalışması için uygundur (programı Arduino IDE'ye kopyalamanız yeterlidir):
#katmak
geçersiz kurulum() (
gecikme(300);
Seri.begin(9600);
time.begin();
}
geçersiz döngü ()
}
}
Bu çizimde zaman basitçe geri sayılıyor.
Her şeyden önce, sktech'te kütüphaneyi bağlayın iarduino_RTC.h.
Orada, modülünüzün doğru şekilde çalışması için tam adını belirtin.
Sonuç olarak DS3231 modülünden port monitöre zaman çıkışını alıyoruz. Saat, dakika, saniye görüntülenir.
Bir sonraki çizimde bir fonksiyon ekleyeceğiz ayarlanan zaman, ilk geri sayım süresini ayarlamanıza olanak tanır.
#katmak
iarduino_RTC zamanı(RTC_DS3231);
geçersiz kurulum() (
gecikme(300);
Seri.begin(9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 sn, 0 dk, 18 saat, 24 Nisan 2017, Pazartesi
}
geçersiz döngü ()
if(millis()%1000==0)( // eğer 1 saniye geçtiyse
Serial.println(time.gettime("g-m-Y, H:i:s, D")); // zamanı gösterme
gecikme(1); // 1 ms'de zamanın birkaç kez görüntülenmemesi için 1 ms duraklatın
}
}
Örnekte süre, 24 Nisan 2017 Pazartesi günü saat 0 saniye, 0 dakika, saat 18'den itibaren sayılmaya başlar.
Ders gönderileri:
- İlk ders: .
- İkinci ders: .
- Üçüncü ders: .
- Dördüncü ders: .
- Beşinci ders: .
- Altıncı ders: .
- Yedinci ders: .
- Sekizinci ders: .
- Dokuzuncu ders:
Tanım
Bağımsız güç kaynağına sahip gerçek zamanlı saat modülü. Arduino/Genuino kontrolörlerinde yerleşik bir gerçek zamanlı saat yoktur. Zamanla çalışmak için millis() işlevi vardır. Ancak saat ve tarih gerektiren projelerde bu fonksiyonun yetenekleri yeterli olmuyor ve gerçek zamanlı bir saat imdada yetişiyor.
DS3231 modülü, TCXO sıcaklık telafisine sahip, düşük maliyetli, doğru, I2C gerçek zamanlı bir saattir. Cihazda CR2032 pil için bir konektör bulunur ve cihazın gücü kesildiğinde doğru zaman işleyişini korur. Saat, saniye, dakika, saat, gün, ay ve yıl hakkındaki bilgileri destekler. Ay sonu tarihi, artık yıl ayarlaması da dahil olmak üzere, 31 günden daha az gün içeren aylar için otomatik olarak ayarlanır. Modlardan birinde çalışırlar: 24 veya 12 saatlik format (AM/PM göstergeli). Programlanabilir iki alarmı vardır.
Saatin ana özellikleri:
Saniyeleri, dakikaları, saatleri, günü, ayı ve yılı sayan gerçek zamanlı saat (2100'e kadar artık yıllar dahil tarih ayarlamalarıyla)
Seyahat hatası: Yılda ±2 dakika
±3°С hataya sahip sıcaklık sensörü
İki alarm saati
Özellikler
Çalışma sıcaklığı: -40°С - +85°С
Besleme gerilimi: 2,3 - 5,5 V
Akü besleme voltajı: 2,3 - 5,5 V
Maksimum akım tüketimi: 650 nA
Fiziksel Boyutlar
Modül (U x G x Y): 45 x 23 x 15 mm
Kullanım artıları
Yüksek saat doğruluğu
Kesme işlevine sahip iki alarm saati vardır
Geniş çalışma sıcaklığı aralığı
Kullanım dezavantajları
Bazı analoglardan daha pahalı
Modülle çalışmak için kütüphane
Bağlantı ve kullanım örnekleri
Örnek 1:Örnek, bir saat modülünün denetleyiciye bağlanmasını, saat üzerinde saat ve tarihin ayarlanmasını, saatin, tarihin ve haftanın gününün Seri port monitörüne gönderilmesini ve ayrıca mevcut modülden sıcaklığın alınmasını gösterir. (Örnekler Smart UNO kontrol cihazında test edilmiştir)
Bağlantı şeması:
İndirilecek taslak:
//Kütüphaneleri bağlama#katmakBugün mükemmel gerçek zamanlı saat (RTC) çipi arayışımıza devam edeceğiz. . Ekran, geliştirme için daha uygun olacaktır - ayarlar dışındaki tüm bilgileri aynı anda görüntüleyen bir LCD ekran. Bu formda saatin masaüstü seçeneği olarak kullanılması uygundur.
Öyleyse DS3231 yongasının kendisine bakalım. DS3231, sıcaklık dengelemeli yerleşik kuvars rezonatörü sayesinde son derece hassas hareketlere sahip (üreticiler bu kelimeyi seçti) gerçek zamanlı bir saattir. Veri aktarım arayüzü I 2 C'dir. Bu mikro devre ayrıca yedek akü voltajı için bir girişe sahiptir, ana güç kapatıldığında mikro devre otomatik olarak yedek aküden çalışmaya geçer, yedek aküden çalışmanın doğruluğu değişmez etkilendi. Çok sevindirici değil mi? DS3231 saniyeleri, dakikaları, saatleri, ayın günlerini (tarih), haftanın günlerini, ayları ve yılları (aylar için artık yıl dahil) saymayı destekler. 12 ve 24 saatlik formatta çalışmayı destekler. Bunları yapılandırma ve durumlarını izleme yeteneğine sahip 2 alarm saati vardır. Sıcaklık telafisi doğruluğunun ayarlanması. Ve ayrıca iki çıkış - 32 kHz'de (çıkış 32,768 kHz'dir) ve 1 Hz'den 8,192 kHz'e kadar programlanabilir bir çıkış. Ayrıca bir sıfırlama pimi de vardır - RST. Gerçek zamanlı saat çipi SO-16 paketinde mevcuttur. Kasa oldukça büyük, ancak içeride zaten kuvars olduğunu ve aynı zamanda sıcaklığın da dengelendiğini düşünürseniz, bana öyle geliyor ki boyutlarda her şey yolunda. DS3231'in DS3232 şeklinde bir ikizi vardır ancak onun 2 bacağı daha vardır. Bütün bunlar NXP ürünlerini çok anımsatıyor - PCA2129 ve PCF2129 saat çipleri. Benzer sıcaklık dengelemeli yerleşik kuvars rezonatör, her ikisi de yalnızca farklı sayıda n.c. ile aynı ikizlerdir. Zaman işleyişine ek olarak DS3231'e göre pinler ve benzer işlevler.
RTC DS3231, gerekli kablolamaya sahip modüller şeklinde ve çoğu zaman ihtiyaç duyulmayan bir EEPROM yongasıyla birlikte satışa sunulmaktadır, yalnızca ağırlık katar:
Gerekli parçalara ek olarak modül kartı üzerinde, işlevi terminallere güç bağlantısını göstermek olan bir LED de bulunmaktadır. Muhtemelen güzellik olsun diye teslim ettiler.
Böyle bir gerçek zamanlı saat çipiyle çalışırken bilmeniz gereken önemli şey, ondan nasıl veri çıkarılacağı veya oraya nasıl yazılacağıdır. Saatin bir I 2 C arayüzü vardır.Veri yazmak için (ve bu, verileri okumak için de gereklidir), başlatma koşulunu geçmeniz gerekir (bu komutlar, I 2 C donanım veya yazılımı kullanılarak gerçekleştirilir). mikrodenetleyici), daha sonra bit kaydı ile çipin adresini iletin, ardından erişeceğimiz kaydın adresini iletin ve ardından bir bayt veriyi bu kayda aktarın, daha sonra başka bir bayt veri aktarırsanız, bir sonraki kayda yazılır vb. Bitirdiğinizde durma koşulunu geçmeniz gerekir. Yukarıdakilerin şekilde grafiksel gösterimi:
Veri kaydı, ilk kurulum ve güncel saatin ayarlanması için gereklidir. Daha sonra sürekli olarak güncel saat ve tarihle ilgili verileri almamız gerekiyor. Bunu yapmak için bu bilgiyi saklayan kayıtlardan okumak gerekir. Okuma iki prosedürden oluşur - istenen kayda bir işaretçi koymak ve onu okumak. İstenilen kayda bir işaretçi ayarlamak için, başlangıç koşulunu geçmeniz, ardından yazma biti ile çipin adresini ve kayıt adresiyle birlikte bir baytı iletmeniz gerekir. Sonraki ya bir durdurma koşulu ve ardından bir başlangıç koşulu ya da yalnızca yeniden başlatmadır. Şimdi ikinci prosedür doğrudan kayıtlardan okumaktır. Başlatma iletilir, ardından mikro devrenin adresini bir okuma biti ile göndermeniz ve ardından gerekli sayıdaki kayıtları okumanız ve tamamlandığında durdurma koşulunu iletmeniz gerekir. Kayıttan bilgi okunmuşsa, işaretçi, mikro denetleyicinin (aygıt yöneticisi) gereksiz eylemlerine gerek kalmadan otomatik olarak bir sonraki kayda geçer. Şekil, I 2 C arayüzünü kullanarak kayıtların okunmasıyla ilgili yukarıda söylenen her şeyi göstermektedir:
Çip adresi:
- kayıt için - 0b11010000
- okumak için - 0b11010001
C kodu şöyle görünecek:
// saatli fonksiyonlar ============================================== =============== ==================================== ================== ======== // başlangıç ayarları başlatılıyor void RTC_init(void)( i2c_start_cond(); // i2c başlatılıyor i2c_send_byte(RTC_adr_write); // cihaz adresini aktarma, kayıt modu i2c_send_byte(0x0E); // bellek adresini aktarma i2c_send_byte(0b00100000); // sıcaklık dönüşümünü başlat ve 1 Hz'de çıkış i2c_send_byte(0b00001000); // 32 kHz çıkışını etkinleştir i2c_stop_cond(); // i2c'yi durdur ) // saati ve tarihi al void RTC_read_time(void)( i2c_start_cond() ; // i2c'yi başlat i2c_send_byte(RTC_adr_write); // cihaz adresini aktar, yazma modu i2c_send_byte(0x00); // hafıza adresini aktar i2c_stop_cond(); // i2c'yi durdurun i2c_start_cond(); // i2c'yi başlatın i2c_send_byte(RTC_adr_read); // cihaz adresi gönderiliyor, okuma modu sec = bcd(i2c_get_byte(0)); // saniye okunuyor, ACK min = bcd(i2c_get_byte) (0)); // okuma dakikaları, ACK saati = bcd(i2c_get_byte(0)); / / okuma saati, ACK wday = bcd(i2c_get_byte(0)); // haftanın gününü okuyoruz, ACK günü = bcd(i2c_get_byte(0)); // sayıyı okuyoruz, ACK ayı = bcd(i2c_get_byte(0)); // okuma ayı, ACK yılı = bcd(i2c_get_byte(1)); // yılı okuma, NACK i2c_stop_cond(); // i2c'yi durdur ) // zamanı ayarla void RTC_write_time(unsigned char hour1, unsigned char min1, unsigned char sec1)( i2c_start_cond(); // i2c'yi başlat i2c_send_byte(RTC_adr_write); // cihaz adresini aktar, kayıt modu i2c_send_byte( 0x00) ; // bellek adresinin aktarımı i2c_send_byte(bin(sec1)); // 0x00 saniye (saniyelerin de belirtilmesi tavsiye edilir mi?) i2c_send_byte(bin(min1)); // 0x01 dakika i2c_send_byte(bin(saat1)) ; // 0x02 saat i2c_stop_cond(); // i2c'yi durdur ) // tarihi ayarla void RTC_write_date(unsigned char wday, unsigned char day, unsigned char ay, unsigned char yıl)( i2c_start_cond(); // i2c'yi başlat i2c_send_byte(RTC_adr_write) ); // cihaz adreslerini aktarın, kayıt modu i2c_send_byte(0x03); // hafıza adresini aktarın i2c_send_byte(bin(wday)); // 0x03 haftanın günü (Pazar - 1, Pazartesi 2, Salı 3, Çarşamba 4, 5 Per, 6 Cum, 7 Cumartesi ) i2c_send_byte(bin(gün)); // 0x04 gün ay i2c_send_byte(bin(ay)); // 0x05 ay i2c_send_byte(bin(yıl)); // 0x06 yıl i2c_stop_cond(); // i2c'yi durdurun ) // sıcaklığı okuyun void RTC_read_temper(void)( i2c_start_cond(); // i2c'yi başlatın i2c_send_byte(RTC_adr_write); // cihaz adresini aktarın, yazma modu i2c_send_byte(0x11); // hafıza adresini aktarın i2c_stop_cond (); // i2c'yi durdur i2c_start_cond(); // i2c'yi başlat i2c_send_byte(RTC_adr_read); // cihaz adresini ilet, okuma modu t1 = i2c_get_byte(0); // MSB sıcaklığını oku t2 = i2c_get_byte(1); // oku LSB sıcaklığı i2c_stop_cond (); // i2c'yi durdur t2=(t2/128); // 6 birim kaydırma - hassasiyet 0,25 (2 bit) // 7 birim kaydırma - hassasiyet 0,5 (1 bit) t2=t2*5; )
Mikro devreyle çalışmak için kullanılan tüm kaynak kodu budur; saat birkaç gün içinde bir saniye bile kaybetmediği için saat hızının ayarlanması etkilenmedi.
Evet - harika bir özellik DS3231, aynı çipin bir termometrenin işlevlerini (aksi takdirde sıcaklık telafisi nasıl yapılır) ve mevcut sıcaklığı okuma yeteneğini yerine getirmesidir. Maksimum sıcaklık çözünürlüğü 0,25 santigrat derecedir. Ayrıca sıcaklık güncelleme süresi oldukça uzundur - yaklaşık 1 dakika. Evet, hızlı bir şekilde güncellememize gerek yok.
Tüm saat yapısının şeması şuna benzer:
Mikrodenetleyici, yaygın bulunabilirliği ve düşük fiyatı nedeniyle Atmega8 tarafından seçildi. Bu mikrodenetleyici hem DIP-28 paketinde hem de TQFP-32 paketindeki SMD versiyonunda kullanılabilir. PC6 pininde rastgele gürültü oluşması durumunda mikro denetleyicinin kendiliğinden yeniden başlatılmasını önlemek için direnç R3 gereklidir. Direnç R3, artı gücü bu pime çekerek, bunun üzerinde güvenilir bir potansiyel oluşturur. Görüntüleme için sıvı kristal ekran (LCD) kullanılır. Ben 2004A ekranını kullandım - 20 karakterlik 4 satır güzellik açısından daha fazladır, bu nedenle daha tanıdık bir ekran kullanabilirsiniz - 16 karakterlik 2 satır. LCD ekran, dört bitlik bir sistem kullanılarak mikro denetleyiciye bağlanır. Ekrandaki karakterlerin kontrastını ayarlamak için değişken direnç R2 gereklidir. Bu direncin kaydırıcısını döndürerek bizim için ekrandaki en net okumaları elde ediyoruz. LCD ekranın arka aydınlatması, ekran kartındaki “A” ve “K” pinleri aracılığıyla düzenlenir. Arka ışık, akım sınırlayıcı bir direnç - R1 aracılığıyla açılır. Değer ne kadar yüksek olursa ekranın arka aydınlatması da o kadar sönük olur. Ancak arka ışığın zarar görmemesi için bu direncin ihmal edilmemesi gerekir. S1 - S4 düğmeleri saat ayarlarını kontrol eder. LED alarmın çaldığını gösterir. LED bir çeşit ses devresiyle değiştirilebilir. R5 - R8 dirençleri yukarı çekilir ve saat çipinin terminallerinde dikdörtgen darbelerin oluşması için gereklidir. Bu aynı zamanda I2C protokolünün doğru çalışması için de gereklidir. Devreye güç sağlamak için L7805 doğrusal stabilizatör yongası kullanılır; beş voltluk doğrusal dengeleyici KR142EN5A'nın yerli bir analogu ile değiştirilebilir veya devredeki bağlantısına göre başka bir voltaj dengeleyici yongası kullanabilirsiniz (örneğin, LM317 veya anahtarlama stabilizatörleri LM2576, LM2596, MC34063 vb.). Daha sonra, 5 volt başka bir mikro devre - AMS1117 tarafından 3,3 volt çıkış sağlayan bir versiyonda stabilize edilir. Veri sayfasına göre saat çipi 3,3 voltluk bir voltajla çalışıyor. Ancak maksimum voltaj 5,5 volttur. Bu nedenle, bu dengeleyici sizin takdirinize bağlı olarak kullanılabilir veya kullanılmayabilir. AMS1117 voltaj dengeleyici aynı zamanda ADJ versiyonu (AMS1117ADJ) ile de değiştirilebilir - yani ayarlanabilir bir versiyon, bu seçimle gerekli voltajı ayarlamanız gerekecektir.veri sayfasına uygun olarak mikro devreye bağlı iki direnç kullanarak.
Devre, ATmega8 mikrokontrolcüsü için bir geliştirme kartı kullanılarak monte edildi ve hata ayıklaması yapıldı:
Düğmelerin amacı:
- S1 - alarm sinyalini kapatır veya herhangi bir ayar menüsünden ana menüye çıkar
- S2- mikrodenetleyici sıfırlama
- S3 - ayarlar menüsünde saati veya tarihi değiştirir
- S4 - ayarlar menüsüne girin ve menüde ilerleyin
32 kHz pin kristal frekansını kontrol etmek için kullanılabilir. Bu pin'e bir frekans ölçer veya osiloskop bağlayıp frekansı kontrol ediyoruz:
Osilogramın ekran görüntüsünden görülebileceği gibi, frekans yaklaşık olarak 32.768 kHz'e karşılık gelir (yaklaşık olarak frekans ölçümlerinin çözünürlüğündeki sınırlamalar nedeniyle ve "gözle" bu kadar doğru bir şekilde belirlenmesi zordur).
Sonuç olarak aşağıdaki özelliklere sahip bir saat ortaya çıktı:
- zaman göstergesi
- tarih ekranı
- haftanın günü göstergesi
- çalar saat etkinlik göstergesi
- Mikrodenetleyiciden sinyal çıkışı olan 1 alarm saati
- ortam sıcaklığı göstergesi (yazılımda yalnızca pozitif sıcaklık uygulanır; negatif sıcaklığın bize faydası olmadığını düşünüyorum)
- alarm ayarları
- zaman Ayarları
- tarih ayarları
- Arkadan aydınlatmalı LCD ekran
- ayarları kaydetme ve ana güç kapatıldığında saatin devam ettirilmesi
Özetleyelim. DS3231 gerçek zamanlı saat çipi mükemmel bir çözümdür. Doğruluk bazı DS1307 veya üstüyle karşılaştırılabilir ancak PCA/PCF2129 yine de onunla rekabet edebilir. İncelediğim gerçek zamanlı saat çipleri arasında bu örnek şu anda işlevsellik ve doğruluk açısından ilk sırada yer alıyor.
Atmega8 mikrokontrolcüyü programlamak için sigorta bitlerinin konfigürasyonunu bilmeniz gerekir (programda alınan ekran görüntüsü):
Makaleye Atmega8 mikrodenetleyici için ürün yazılımı, programdaki devre tasarımı ve saatin çalışmasını gösteren bir video eşlik ediyor (en başta alarm çalacak - LED yanacak).
Radyo elemanlarının listesi
Tanım | Tip | Mezhep | Miktar | Not | Mağaza | not defterim |
---|---|---|---|---|---|---|
IC1 | MK AVR 8 bit | ATmega8 | 1 | Not defterine | ||
IC2 | Gerçek Zamanlı Saat (RTC) | DS3231 | 1 | Not defterine | ||
VR1 | Doğrusal regülatör | L7805AB | 1 | Not defterine | ||
VR2 | Doğrusal regülatör | AMS1117-3.3 | 1 | Not defterine | ||
VD1 | Doğrultucu diyot | 1N4148 | 1 | Not defterine | ||
C1 | 470 µF | 1 | Not defterine | |||
C2, C3, C5, C7 | Kapasitör | 100 nF | 4 | Not defterine | ||
C4 | Elektrolitik kondansatör | 220 uF | 1 | Not defterine | ||
C6, C8 | Elektrolitik kondansatör | 10 uF | 2 | Not defterine | ||
R1 | Direnç | 22Ohm | 1 | Not defterine | ||
R2 | Düzeltici direnci | 10 kOhm | 1 | 3296W-1-103LF |
DS3231 yongası, yerleşik sıcaklık dengelemeli kuvars osilatörüne sahip, yüksek hassasiyetli bir RTC gerçek zamanlı saattir ve yılda yalnızca ±2 dakikalık zaman kaymasına neden olur. Ek olarak bir alarm fonksiyonu uygulanmıştır ve ayrıca bir kesme çıkışı da mevcuttur. Saat, bağlama elemanları ve pil bölmesiyle birlikte hazır bir Arduino modülü olarak satın alınabilir.
Modülü buradan sipariş ettim. Diyagram aşağıdaki resimde gösterilmektedir:
Mikro devre yaygın olarak kullanılanı kullanır. Standart (100 kHz) ve yüksek (400 kHz) veri hızlarını destekler. I2C veriyolundaki mikro devre adresi (7 bit) 1101000'dir. Ek olarak modülde şemada gösterilmeyen I2C belleği (24C32) bulunur.
Güç Modları
Mikro devrenin besleme voltajı 2,3...5,5V aralığında olabilir, harici bir kaynak (Vcc hattı) ve akü (Vbat) için iki güç hattı vardır. Harici kaynak voltajı sürekli izlenir ve Vpf=2,5V eşiğinin altına düştüğünde akü hattına geçer. Aşağıdaki tabloda güç hatları arasında geçiş yapma koşulları gösterilmektedir:
Saatin doğruluğu ortam sıcaklığının izlenmesiyle korunur. Mikro devre, saat üretecinin frekansını ayarlamak için dahili bir prosedür başlatır; ayar miktarı, özel bir frekans-sıcaklık grafiği kullanılarak belirlenir. Prosedür güç uygulandıktan sonra başlar ve her 64 saniyede bir çalışır.
Şarjı korumak için, pil bağlandığında (Vbat hattına voltaj uygulandığında), Vcc hattındaki voltaj Vpf eşik değerini aşıncaya veya mikro devrenin doğru adresi üzerinden iletilinceye kadar saat üreteci çalışmaz. I2C arayüzü. Saat üreteci başlatma süresi bir saniyeden azdır. Güç verildikten (Vcc) veya I2C arayüzü üzerinden adres alındıktan yaklaşık 2 saniye sonra frekans düzeltme işlemi başlar. Saat üreteci başlatıldığında Vcc veya Vbat mevcut olduğu sürece çalışmaya devam eder. İlk açıldığında tarih ve saat kayıtları sıfırlanır ve aşağıdaki değerlere sahiptir: 01/01/00 – 01 – 00/00/00 (gün/ay/yıl/ – haftanın günü – saat/dakika) /saniye).
3,63V pil ile çalıştırıldığında akım tüketimi, I2C arayüzü üzerinden veri aktarımı olmadığında 3 µA'dır. Harici 5,5V güç kaynağı ve yüksek I2C veri aktarım hızı kullanıldığında maksimum akım tüketimi 300 µA'ya ulaşabilir.
Harici sıfırlama fonksiyonu
RST hattı harici sıfırlama için kullanılabilir ve ayrıca düşük voltaj alarm fonksiyonuna da sahiptir. Hat, dahili bir direnç aracılığıyla yukarıya çekilir; harici bir yukarı çekmeye gerek yoktur. Harici sıfırlama işlevini kullanmak için, RST hattı ile ortak kablo arasına bir düğme bağlanabilir; mikro devrede temas sıçrama koruması vardır. RST hattı düşük bir mantık seviyesine ayarlandığında, besleme gerilimi Vcc eşik değeri Vpf'nin altına düştüğünde alarm fonksiyonu etkinleştirilir.
DS3231 kayıtlarının açıklaması
Aşağıdaki tabloda gerçek zamanlı saat kayıtlarının bir listesi gösterilmektedir:
Adres | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | İşlev | Sınırlar |
0x00 | 0 | 10 saniye | Saniye | Saniye | 00-59 | |||||
0x01 | 0 | 10 dakika | dakika | dakika | 00-59 | |||||
0x02 | 0 | 12/24 | AM/PM | 10 saat | Saat | Kol saati | 1-12 + AM/PM veya 00-23 | |||
10 saat | ||||||||||
0x03 | 0 | 0 | 0 | 0 | 0 | Gün | Haftanın günü | 1-7 | ||
0x04 | 0 | 0 | 10'uncu | Sayı | tarih | 01-31 | ||||
0x05 | Yüzyıl | 0 | 0 | 10 ay | Ay | Ay/yüzyıl | 01-12 + Yüzyıl | |||
0x06 | 10 yıl | Yıl | Yıllar | 00-99 | ||||||
0x07 | A1M1 | 10 saniye | Saniye | Saniye, 1. alarm | 00-59 | |||||
0x08 | A1M2 | 10 dakika | dakika | Dakika, 1. alarm | 00-59 | |||||
0x09 | A1M3 | 12/24 | AM/PM | 10 saat | Saat | Saat, 1. alarm | 1-12 + AM/PM veya 00-23 | |||
10 saat | ||||||||||
0x0A | A1M4 | DY/DT | 10'uncu | Gün | Haftanın günü, 1. alarm | 1-7 | ||||
Sayı | Tarih, 1. alarm | 01-31 | ||||||||
0x0B | A2M2 | 10 dakika | dakika | Dakika, 2. alarm | 00-59 | |||||
0x0C | A2M3 | 12/24 | AM/PM | 10 saat | Saat | Saat, 2. alarm | 1-12 + AM/PM veya 00-23 | |||
10 saat | ||||||||||
0x0D | A2M4 | DY/DT | 10'uncu | Gün | Haftanın günü, 2. alarm | 1-7 | ||||
Sayı | Tarih, 2. alarm | 01-31 | ||||||||
0x0E | EOSC | BBSQW | DÖN. | RS2 | RS1 | INTCN | A2IE | A1IE | Ayarlar kaydı (Kontrol) | |
0x0F | OSF | 0 | 0 | 0 | EN32kHz | BSY | A2F | A1F | Durum Kaydı | |
0x10 | İMZA | VERİ | VERİ | VERİ | VERİ | VERİ | VERİ | VERİ | Yaşlandırma Ofset Kaydı | |
0x11 | İMZA | VERİ | VERİ | VERİ | VERİ | VERİ | VERİ | VERİ | Sıcaklık kaydı, yüksek bayt | |
0x12 | VERİ | VERİ | 0 | 0 | 0 | 0 | 0 | 0 | Sıcaklık kaydı, düşük bayt |
Zaman bilgisi ikili ondalık formatta saklanır, yani ondalık sayının her basamağı (0'dan 9'a kadar) 4 bitlik bir grup olarak temsil edilir. Bir bayt durumunda, düşük yarım bayt birleri, yüksek yarım bayt onlarcayı vb. sayar. Zaman, 0x00-0x06 adresli kayıtlarda sayılır; saatleri saymak için 12 veya 24 saat modunu seçebilirsiniz. Saat kaydının 6. bitinin ayarlanması (adres 0x02), 5. bitin günün saatini gösterdiği, 1 değerinin öğleden sonraya (PM), 0 değerinin öğleden sonraya (AM) karşılık geldiği 12 saatlik modu ayarlar. 6. bitin sıfır değeri 24 saatlik moda karşılık gelir, burada 5. bit saatlerin sayılmasında rol oynar (20-23 değerleri).
Haftanın günü kaydı gece yarısı, 1'den 7'ye kadar sayılarak artırılır, ay kaydı (adres 0x05), yıl sayma kaydı (adres 0x06) 99'dan 00'a taştığında değişen Yüzyıl bitini (7. bit) içerir. .
DS3231 yongası iki alarm saati uygular; 1. alarm saati, 0x07-0x0A adresli kayıtlar kullanılarak yapılandırılır, 2. alarm saati, 0x0B-0x0D kayıtları kullanılarak yapılandırılır. A1Mx ve A2Mx bitleri, alarmlara yönelik çeşitli modları yapılandırmak için kullanılabilir; bitin ayarlanması, karşılık gelen kaydı karşılaştırma işleminin dışında bırakır. Aşağıdaki tablolarda farklı alarm modları için bit kombinasyonları gösterilmektedir:
Tablolarda belirtilmeyen bit kombinasyonları alarmların hatalı çalışmasına neden olur. DY/DT biti temizlenirse alarm saati için tarih eşleşmesi (ayın günü) izlenir; DY/DT biti ayarlandığında haftanın gününün eşleşmesi kontrol edilir.
Çoğu fonksiyon Kontrol kaydında yapılandırılır. EOSC biti saat üretecinin başlatılmasını kontrol eder, bitin sıfırlanması saat üretecini başlatır. Bitin ayarlanması jeneratörü yalnızca pil modu (Vbat) için durdurur. Harici bir kaynaktan (Vcc) güç verildiğinde osilatör, EOSC bitinin durumuna bakılmaksızın her zaman çalışır. Etkinleştirildiğinde varsayılan bit değeri 0'dır.
BBSQW bitinin ayarlanması, INT/SQW çıkışının (3. pin) harici güç olmadığında pil gücü modunda çalışmasına olanak tanır. Bit sıfıra ayarlandığında, eğer harici kaynak voltajı Vcc eşik değeri Vpf'nin altına düşerse INT/SQW çıkışı durum 3'e (devre dışı) geçer. Güç uygulandıktan sonra varsayılan bit değeri 0'dır.
CONV biti zorunlu sıcaklık ölçümünden sorumludur; bitin ayarlanması, saat üreteci frekansının da ayarlandığı dönüştürme sürecini başlatır; ölçüm sonucu, 0x11, 0x12 adresli kayıtlarda bulunur. Başlatma yalnızca önceki dönüştürme tamamlanmışsa mümkündür; başlamadan önce BSY meşgul bayrağını kontrol etmeniz gerekir. Zorunlu sıcaklık dönüşümü, dahili 64 saniyelik frekans ayar döngüsünü etkilemez. CONV bitinin ayarlanması BSY bayrağını 2 ms boyunca etkilemez. CONV ve BSY bitleri, dönüştürme tamamlandıktan sonra otomatik olarak temizlenir.
RS2, RS1 bitleri, INT/SQW çıkışındaki dikdörtgen darbelerin (kare dalga) frekansını ayarlar. Varsayılan olarak, etkinleştirildiğinde bitler 1'e ayarlanır. Aşağıdaki tablo olası bit kombinasyonlarını gösterir:
INTCN biti INT/SQW çıkışını kontrol eder. Bit sıfırlanırsa, çıkışta frekansı RS2, RS1 bitleri tarafından ayarlanan dikdörtgen darbeler (kare dalgalar) görünür. INTCN biti ayarlandığında çıkış, alarm kesintileri oluşturmak için kullanılır. Varsayılan olarak bit değeri 1'dir. Çıkış tipi INT/SQW - açık drenajdır, bu nedenle onu bir direnç aracılığıyla yüksek mantık seviyesine çekmek gerekir, aktif seviye düşüktür.
A1IE, A2IE bitlerinin ayarlanması sırasıyla 1. ve 2. alarm sinyallerinde kesintileri etkinleştirir. Bitleri sıfırlayın, kesintileri devre dışı bırakın. Varsayılan değer 0'dır.
Durum kaydı olay bayraklarını içerir ve 32 kHz çıkışını kontrol eder. OSF bayrağı saat üretecinin durumunu yansıtır; 1 değeri saat üretecinin durdurulduğu anlamına gelir; bu olay aşağıdaki durumlarda meydana gelebilir:
- Güç uygulandıktan sonra ilk kez
- Pil veya harici voltaj saat üretecini çalıştırmak için yeterli değil
- Jeneratör, EOSC bitinin pil modunda ayarlanmasıyla kapatılır
- Kristal osilatörü etkileyen dış faktörler (gürültü, sızıntı vb.)
Ayarlandıktan sonra bit değeri değişmez; bitin manuel olarak sıfırlanması gerekir.
EN32kHz bitinin ayarlanması, 32kHz çıkışta (1. pin) dikdörtgen darbelerin (kare dalgalar) üretilmesine olanak tanır, darbe frekansı sabittir ve 32,768 kHz'e eşittir. Bitin sıfırlanması bu işlevi devre dışı bırakır ve çıkışı 3. duruma (yüksek giriş empedansı) taşır. Varsayılan olarak bit değeri 1'dir; güç uygulandıktan sonra çıkışta darbeler görünür. Çıkış tipi 32kHz açık drenajdır, bu nedenle yüksek mantık seviyesine yükseltme gerektirir.
BSY meşgul bayrağı sıcaklık dönüştürme ve saat ayarlama işlemi sırasında ayarlanır. Dönüşüm tamamlandığında bayrak sıfırlanır.
A1F, A2F alarm saati bayrakları, zaman sayma kayıtlarının ve alarm saati kayıtlarının değerleri eşleştiğinde ayarlanır. Alarm kesintileri A1IE, A2IE etkinleştirilirse ve bir kesme çıkışı atanırsa (INTCN biti ayarlanır), o zaman INT/SQW çıkışında bir kesme sinyali görünür (yüksek mantık seviyesinden düşük mantık seviyesine geçiş). Bayrakların manuel olarak 0 değeri yazılarak sıfırlanması gerekmektedir.
Yaşlanma Ofseti kaydı saat üreteci frekansını ayarlamak için tasarlanmıştır. Bir sıcaklık değişikliği tespit edilirse ve ayrıca sıcaklık dönüşümü CONV biti tarafından tetiklendiğinde, dahili ayarlama prosedürü sırasında kayıt değeri osilatör frekansına eklenir. Ofset değeri işaretlenir, yani pozitif değerler (1-127) frekansı azaltır, negatif değerler (128-255) arttırır. Aynı ofset için frekans değişimi sıcaklığa bağlı olarak farklı olacaktır. +25°C'de frekans değişimi 0,1 ppm/LSB olacaktır.
Mevcut sıcaklık değeri, sırasıyla yüksek ve düşük bayt olan 0x11 ve 0x12 adresli kayıtlarda saklanır, kayıtlardaki sıcaklık değeri periyodik olarak güncellenir. Sola hizalama ayarlanmıştır, çözünürlük 10 bit veya 0,25°C/LSB'dir, yani yüksek bayt sıcaklığın tamsayı kısmını içerir ve düşük kayıtlardaki 6., 7. bitler kesirli kısmı oluşturur. Yüksek baytta 7. bit sıcaklığın işaretini belirtir; örneğin 00011011 01 değeri +27,25 °C sıcaklığa, 11111110 10 değeri -2,5 °C sıcaklığa karşılık gelir.
Zaman kayıtlarını okurken, ek bir tampon kullanılması, yani birden fazla kaydın ayrı ayrı değil aynı anda okunması tavsiye edilir, çünkü bireysel okuma işlemleri arasında zaman kayıtları değerlerini değiştirebilir. Hesap kayıtlarına yeni veriler yazarken de bu kurala uyulması önerilir. Saniye kaydına yeni bir değer yazılması saati 1 saniye duraklatır, bu süre içinde kalan kayıtların yeniden yazılması gerekir.
DS3231'i bir mikro denetleyiciye bağlama
Saati bir PIC16F628A mikrodenetleyiciye bağladım ve kullandım. Bağlantı şeması aşağıda gösterilmiştir:
Güç verildikten sonra göstergelerde tire işaretleri (– – – – – –) görüntülenir, ardından saat başlatılır, saat üretecinin başlatılması için gerekli olan zaman değeri 1 saniye gecikmeyle göstergelerde görünür. Göstergeler, ondalık noktayla ayrılmış olarak saatleri, dakikaları ve saniyeleri görüntüler ve saat formatı 24 saattir. SB1 “Gösterge” düğmesini kullanarak, göstergelerin sıcaklığı ve ayrıca 2 Hz frekansında yanıp sönen ondalık noktayla ayrılmış saat ve dakika değerini görüntüleyeceği ekran formatını değiştirebilirsiniz. Sıcaklık kesirli bir kısım olmadan görüntülenir; program yalnızca 0x11 adresindeki sıcaklık depolamanın yüksek baytını okur.
Zaman değeri, 1. alarm sinyali tarafından kontrol edilen SQW/INT hattındaki bir kesinti yoluyla saatten okunur; saatin başlatılması sırasında alarm saati, her ikinci sinyale ayarlanır. HL1 LED'i gösterge görevi görür ve kesme sinyalinde her saniye yanıp söner. I2C arayüzü üzerinden veri aktarımında bir hata olması durumunda HL2 LED'i yanar.
Ayrıca programa SB2 “Ayarlar”, SB3 “Kurulum” butonlarını kullanarak saat ayarlama özelliğini ekledim. SB2 düğmesine basılarak kurulum moduna girilir; göstergelerde dakika ve saniye yerine 00 saat ve çizgiler görüntülenir (00 – – – –). SB3 düğmesini kullanarak saat değerini ayarlarsınız (her basışta artar), ardından SB2 düğmesine bastığınızda dakikalar düzenlenir; çizgi yerine 00 dakika görüntülenecektir. SB3 düğmesi ayrıca gerekli değeri vb. ayarlar. Saniyeleri düzenleyip SB2 tuşuna bastıktan sonra saatteki saat yeniden yazılır ve güncellenen saat göstergelerde görüntülenir.
Program kodunun bir kısmı aşağıda verilmiştir (tam sürüm makalenin sonunda indirilebilir):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #katmak
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #katmak CONFIG H"3F10" ;Mikrodenetleyici konfigürasyonu errorlevel -302 ;listede 302 hata mesajını gösterme Sec equ 0020h; yardımcı hesap kayıtları Sec1 eşdeğeri 0021h; Sec2 eşdeğeri 0022h; scetbit equ 0024h;yardımcı kayıt bitlerinin sayılması perem equ 0025h; spi, i2c aracılığıyla yardımcı bayt alım/iletim kaydı temp equ 0026h;sıcaklık kaydı perem_1 equ 0027h ;BCD yardımcı kayıtçı result equ 0028h; ikili-ondalık dönüştürücü yardımcı kaydı dat_ind equ 0029h ;spi protokolü aracılığıyla iletim için veri kaydı adr_ind equ 002Ah ;spi protokolü aracılığıyla iletim için adres kaydı saniye equ 002Bh;saati ayarlamak için saniye saklama kaydı minut equ 002Ch;saati ayarlamak için dakika saklama kaydı saat equ 002Dh;saati ayarlamak için saat saklama kaydı adr_i2c equ 002Eh ;i2c arayüzü veri aktarımı alt yordamının kayıtları tmp_i2c eşdeğeri 002Fh köle_adr eşdeğeri 0030h data_i2c eşdeğeri 0031h flag equ 007Fh ;bayrak kaydı #DEFINE int PORTB,0 ;interrupt satırı INT/SQW DS3231 #DEFINE sda PORTB,1 ;DS3231'i bağlamak için SDA hattı #DEFINE scl PORTB,2 ;DS3231'i bağlamak için SCL hattı #DEFINE datai PORTB,5 ;MAX7219 sürücüsünün veri giriş satırı #DEFINE cs PORTB,6 ;sürücü seçim satırı MAX7219 #DEFINE clk PORTB,7 ;MAX7219 sürücüsünün saat satırı #DEFINE ledi PORTB,4 ;i2c hata ledi #DEFINE led_sec PORTB,3 ;LED saat ilerleme göstergesi 1Hz #DEFINE regim PORTA,2 ;Gösterge düğmesi - ekran modunu değiştirir #DEFINE nast PORTA,3 ;Ayarlar butonu - zaman ayarlama moduna girer #DEFINE ust PORTA,4 ;Set butonu - saat değerini ayarlayın ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;program yürütmeyi 0000h adresinden başlat Başlat'a git;Başlat etiketine git ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Ana program movlw b"00000000"'i başlatın; A bağlantı noktasının çıkış mandallarının değerlerini ayarlayın movlw b"01000000" ;B portunun çıkış mandallarının değerlerini ayarlayın movlw b"00000111" ;karşılaştırıcıları kapat bsf STATUS,RP0 ;1. sırayı seç movlw b"00000111" ;B noktasının giriş/çıkış hatlarını yapılandırma movwf TRISB ;RB0-RB2 - girişe, geri kalanı çıkışa movlw b"11111111" ;port A'nın giriş/çıkış hatlarını ayarlama movwf TRISA ;girilecek tüm satırlar bcf STATUS,RP0 ;banka 0'ı seç clrf flag ;bayrak kaydını sıfırla init_lcd'yi çağırın; sürücü başlatma rutinini çağırın (MAX7219) viv_not'u çağır; göstergelere " ------ " çizgi sembollerini çıkar ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw b"11010000" ;cihaz adresi (DS3231) ;i2c üzerinden alma/iletme yazmaçlarına 4 byte yaz movlw data_i2c ;i2c aracılığıyla ilk alma/iletme kaydını ayarlama movlw b"10000000" ;1. alarmın saniye kaydına ilişkin veriler movlw b"10000000" ;1. alarmın dakika kaydına ilişkin veriler movlw b"10000000" ;1. alarm saati kaydına ilişkin veriler movlw b"10000000" ;1. alarmın tarih/haftanın günü kaydına ilişkin veriler movlw .4 ;i2c aracılığıyla 4 bayt aktarın movlw 0x07 ;1. alarm saatinin saniye kaydının adresini ayarlama |
Birçok Arduino projesinde belirli olayların meydana gelme zamanının izlenmesi ve kaydedilmesi gerekmektedir. Ek bir pille donatılmış gerçek zamanlı saat modülü, cihazın kendisinde güç olup olmamasına bağlı olmaksızın güncel tarihi saklamanıza olanak tanır. Bu yazımızda Arduino kartı ile kullanılabilecek en yaygın RTC modülleri DS1307, DS1302, DS3231'den bahsedeceğiz.
Saat modülü, kural olarak DS1307, DS1302, DS3231 mikro devrelerinden birini içeren küçük bir karttır.Ayrıca kartta pratik olarak bir pil takma mekanizması bulabilirsiniz. Bu tür panolar genellikle saati, tarihi, haftanın gününü ve diğer kronometrik parametreleri izlemek için kullanılır. Modüller otonom güçle (piller, akümülatörler) çalışır ve Arduino'nun gücü kapatılsa bile saymaya devam eder. En yaygın saat modelleri DS1302, DS1307, DS3231'dir. Arduino'ya bağlı bir RTC (gerçek zamanlı saat) modülünü temel alırlar.
Saatler, "keneleri" okuyan geleneksel sayaçların ve saat üreteçlerinin aksine, ortalama bir insan için uygun birimlerle (dakikalar, saatler, haftanın günleri ve diğerleri) sayılır. Arduino'nun farklı zaman aralıklarını da okuyabilen özel bir millis() fonksiyonu vardır. Ancak bu fonksiyonun ana dezavantajı, zamanlayıcı açıldığında sıfıra sıfırlanmasıdır. Onun yardımıyla yalnızca zamanı okuyabilirsiniz; tarihi veya haftanın gününü ayarlamak imkansızdır. Bu sorunu çözmek için gerçek zamanlı saat modülleri kullanılır.
Elektronik devre bir mikro devre, bir güç kaynağı, bir kuvars rezonatör ve dirençler içerir. Kuvars rezonatör, geleneksel bir ikili sayaç için uygun olan 32768 Hz frekansında çalışır. DS3231 devresi, son derece doğru değerlere izin veren yerleşik kuvars ve termal stabilizasyona sahiptir.
Popüler RTC modülleri DS1302, DS1307, DS3231'in karşılaştırılması
Bu tabloda en popüler modüllerin ve bunların temel özelliklerinin bir listesini sunduk.
İsim | Sıklık | Kesinlik | Desteklenen protokoller |
DS1307 | 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz | Kuvarsa bağlıdır - genellikle değer günde 2,5 saniyeye ulaşır, günde 1 saniyeden daha yüksek bir doğruluk elde etmek imkansızdır. Ayrıca doğruluk sıcaklığa bağlıdır. | I2C |
DS1302 | 32.768 kHz | günde 5 saniye | I2C, SPI |
DS3231 | İki çıkış - birincisi 32,768 kHz'de, ikincisi 1 Hz'den 8,192 kHz'e programlanabilir | 0C ile 40C arasındaki sıcaklıklarda ±2 ppm. -40C ila 85C arasındaki sıcaklıklarda ±3,5 ppm. Sıcaklık ölçüm doğruluğu – ±3С |
I2C |
Modül DS1307
DS1307 zamanlama için kullanılan bir modüldür. DS1307ZN çipi temel alınarak monte edilmiştir, uzun süre otonom çalışmayı sağlamak için güç lityum pilden sağlanır. Karttaki pil arka tarafa monte edilmiştir. Modülün bir AT24C32 yongası vardır - bu, 32 KB'lik kalıcı bir EEPROM belleğidir. Her iki mikro devre de bir I2C veri yolu ile bağlanır. DS1307 düşük güç tüketimine sahiptir ve 2100 yılına ait bir saat ve takvim içerir.
Modül aşağıdaki parametrelere sahiptir:
- Güç kaynağı – 5V;
- -40C ila 85C arası çalışma sıcaklığı aralığı;
- 56 bayt bellek;
- Lityum pil LIR2032;
- 12 ve 24 saatlik modları uygular;
- I2C arayüz desteği.
Modül, verilerin oldukça nadiren, bir hafta veya daha uzun aralıklarla okunduğu durumlarda haklı çıkar. Kesintisiz kullanım, pille bile daha fazla voltaj gerektireceğinden bu, güçten tasarruf etmenizi sağlar. Belleğin varlığı, çeşitli parametreleri (örneğin sıcaklık ölçümü) kaydetmenize ve modülden alınan bilgileri okumanıza olanak tanır.
Diğer cihazlarla etkileşim ve onlarla bilgi alışverişi, SCL ve SDA pinlerinden gelen I2C arayüzü kullanılarak gerçekleştirilir. Devre, gerekli sinyal seviyesini sağlamanıza izin veren dirençler içerir. Kartta ayrıca DS18B20 sıcaklık sensörünün montajı için özel bir yer vardır.Kontaklar 2 gruba, pin aralığı 2,54 mm'ye dağıtılmıştır. İlk kontak grubu aşağıdaki pinleri içerir:
- DS – DS18B20 sensörü için çıkış;
- SCL – saat satırı;
- SDA – veri hattı;
- VCC-5V;
İkinci kişi grubu şunları içerir:
- SQ – 1 MHz;
- BAT – lityum pil girişi.
Arduino kartına bağlanmak için kartın kendisine (bu durumda Arduino Uno'yu düşünüyoruz), bir RTC DS1307 gerçek zamanlı saat modülüne, kablolara ve bir USB kablosuna ihtiyacınız var.
Denetleyiciyi Arduino'ya bağlamak için 4 pin kullanılır - VCC, toprak, SCL, SDA.. Saatten gelen VCC, Arduino'da 5V'ye bağlanır, saatten gelen toprak Arduino, SDA - A4, SCL'den toprağa bağlanır. - A5.
Saat modülü ile çalışmaya başlamak için DS1307RTC, TimeLib ve Wire kütüphanelerini kurmanız gerekmektedir. RTCLib'i iş için de kullanabilirsiniz.
RTC modülünün kontrol edilmesi
İlk kodu çalıştırdığınızda program saniyede bir modülden veri okuyacaktır. İlk olarak, Arduino kartı bilgisayara bağlı değilken modülden pili çıkarıp başka bir pille değiştirirseniz programın nasıl davrandığını görebilirsiniz. Birkaç saniye beklemeniz ve pili çıkarmanız gerekir, sonunda saat yeniden başlatılacaktır. Daha sonra Örnekler→RTClib→ds1307 menüsünden bir örnek seçmeniz gerekiyor. İletim hızının 57600 bps'ye doğru şekilde ayarlanması önemlidir.
Seri Monitör penceresini açtığınızda aşağıdaki satırların görünmesi gerekir:
Saat 0:0:0'ı gösterecektir. Bunun nedeni saatin gücünü kaybetmesi ve zamanı saymayı bırakmasıdır. Bu nedenle modül çalışırken pilin çıkartılmaması gerekir.
Modüldeki saati ayarlamak için çizimdeki çizgiyi bulmanız gerekir.
RTC.adjust(DateTime(__DATE__, __TIME__));
Bu satır, gerçek zamanlı saat modülünü flaşlamak için kullanılan bilgisayardan gelen verileri içerecektir. Doğru çalışma için öncelikle bilgisayardaki tarih ve saatin doğru olduğunu kontrol etmeli ve ancak bundan sonra saat modülünü yanıp sönmeye başlamalısınız. Kurulumdan sonra monitör aşağıdaki verileri görüntüleyecektir:
Kurulum doğru şekilde yapılır ve gerçek zamanlı saatin ayrıca yeniden yapılandırılmasına gerek yoktur.
Zaman okuma. Modül yapılandırıldıktan sonra zaman istekleri gönderilebilir. Bu, saat ve tarih bilgilerini içeren bir DateTime nesnesi döndüren now() işlevi kullanılarak yapılır. Zamanı okumak için kullanılan çok sayıda kütüphane vardır. Örneğin, RTC.year() ve RTC.hour() - yıl ve saat hakkında ayrı ayrı bilgi alırlar. Onlarla çalışırken bir sorun ortaya çıkabilir: örneğin, saatin 1:19:59 olarak görüntülenmesi talebi yapılacaktır. Saat 1:20:00'ı göstermeden önce saat 1:19:00'ı gösterecek, yani aslında bir dakika kaybedilecek. Bu nedenle, okumanın nadiren gerçekleştiği durumlarda - birkaç günde bir - bu kütüphanelerin kullanılması tavsiye edilir. Zamanı çağırmak için başka işlevler de vardır, ancak hataları azaltmanız veya önlemeniz gerekiyorsa, now() işlevini kullanmak ve gerekli okumaları ondan çıkarmak daha iyidir.
i2C saat modülü ve ekranıyla örnek proje
Proje normal bir saat olup, göstergede tam saat görüntülenecek ve sayıların arasındaki iki nokta üst üste saniyede bir yanıp sönecektir. Projeyi uygulamak için bir Arduino Uno kartına, bir dijital göstergeye, bir gerçek zamanlı saate (bu durumda yukarıda açıklanan ds1307 modülü), bağlantı için bir kalkana (bu durumda Troyka Kalkanı kullanılır), saat ve kablolar için bir pil.
Proje, TM1637 çipinde dört haneli basit bir gösterge kullanıyor. Cihaz iki kablolu bir arayüze sahiptir ve 8 seviyeli monitör parlaklığı sağlar. Yalnızca saati saat:dakika biçiminde görüntülemek için kullanılır. Göstergenin kullanımı kolaydır ve bağlanması kolaydır. Dakikalık veya saatlik veri doğrulamasının gerekli olmadığı projelerde kullanılmasında fayda vardır. Saat ve tarih hakkında daha eksiksiz bilgi elde etmek için LCD monitörler kullanılır.
Saat modülü I2C veriyoluna ait olan SCL/SDA pinlerine bağlanır. Ayrıca toprak ve gücü de bağlamanız gerekir. Arduino'ya yukarıda anlatıldığı gibi bağlanır: SDA – A4, SCL – A5, modülden topraktan Arduino'ya, VCC -5V.
Gösterge basit bir şekilde bağlanır; CLK ve DIO pinleri kart üzerindeki herhangi bir dijital pin'e bağlanır.
Eskiz. Kod yazmak için saati ve göstergeyi başlatmanıza ve derleme süresini kaydetmenize olanak tanıyan kurulum işlevini kullanın. Saatin ekrana yazdırılması döngü kullanılarak yapılacaktır.
#katmak
Bundan sonra taslağın yüklenmesi gerekiyor ve saat monitörde gösterilecek.
Program biraz modernize edilebilir. Güç kapatıldığında yukarıda yazılan çizim, ekranın açıldıktan sonra derleme sırasında ayarlanan süreyi göstermesine neden olacaktır. Kurulum fonksiyonunda her defasında 00:00:00'dan derleme başlangıcına kadar geçen süre hesaplanacaktır. Bu karma, güç kesildiğinde tutulan EEPROM'da saklanan değerle karşılaştırılacaktır.
Geçici olmayan belleğe veya bellekten zaman yazmak ve okumak için EEPROMWriteInt ve EEPROMReadInt işlevlerini eklemeniz gerekir. Hash'in EEPROM'da kayıtlı hash ile eşleşip eşleşmediğini/eşleşip eşleşmediğini kontrol etmeleri gerekir.
Proje geliştirilebilir. LCD monitör kullanıyorsanız tarih ve saati ekranda gösteren bir proje yapabilirsiniz. Tüm elemanların bağlantısı şekilde gösterilmiştir.
Sonuç olarak, kodun yeni bir kitaplık belirtmesi (sıvı kristal ekranlar için bu LiquidCrystal'dır) ve tarihi elde etmek için loop() işlevine satırlar eklemesi gerekecektir.
Çalışma algoritması aşağıdaki gibidir:
- Tüm bileşenlerin bağlanması;
- Kontrol edin - monitör ekranındaki saat ve tarih her saniye değişmelidir. Ekrandaki saat yanlışsa çizime RTC.write (tmElements_t tm) fonksiyonunu eklemeniz gerekir. Yanlış saatlerle ilgili sorunlar, saat modülünün kapatıldığında tarih ve saati 01/01/2000 00:00:00 olarak sıfırlamasından kaynaklanmaktadır.
- Yazma işlevi, bilgisayardan tarih ve saati almanızı sağlar, ardından ekranda doğru parametreler gösterilir.
Çözüm
Saat modülleri birçok projede kullanılmaktadır. Ev aletlerinde, belirli bir programa göre çalışan zamanlayıcılar ve kontrol cihazları oluştururken veri kayıt sistemleri için gereklidirler. Yaygın olarak bulunabilen ve ucuz modüller ile alarm saati veya sensör veri kaydedici, SD karta bilgi kaydetme veya saati ekranda gösterme gibi projeler oluşturabilirsiniz. Bu makalede en popüler modül türleri için tipik kullanım senaryolarına ve bağlantı seçeneklerine baktık.
- Yeni Rus ufuk ötesi radarlarının lansmanına doğru Radarlar tarafından çözülen ana görevler
- Obturator foramen'in tıbbi açıdan anlamı
- Yeni kelimelerle çalışmak
- Safir dersleri. PC safir. Geniş araç yelpazesi
- Dekupaj kartlarıyla nasıl çalışılır
- Smile'da İnternet hesabınıza nasıl yükleme yapılır?
- Skype ekran ayarlarıyla ilgili bir şeyler