Arkadaşlar merhaba,
Atölyede kullandığım dijital saatlerde DS1302 rtc var. Saatleri devamlı ileri-geri ayarlamak zorunda kalıyorum. Ayarlama ile uğraşmak istemiyorum. DS 1302 nin yerine kullanabilecegim modül öneriniz var mı?
DS3231 kullanabilir miyim?
Sürekli ayar ile uğraşmak istemiyorsanız GPS clock kullanın, en garantilisi.
https://learn.adafruit.com/arduino-clock/overview
DS3231 kullanıyorum tavsiye de ederim.1,5 yıldır bir saniye bile sapmadı.
DS3231 de RAM alanı yok, eger istenirse DS3232
kullanılabilir.
Hatta entegrenin(DS3231/3232) içinde sıcaklık
sensörü de mevcut.
Hocam,
Aliexp.ten alınan hazır modüllerde ram(24C32N) var sanırım.
Kristal i değiştir.
Alıntı yapılan: gokhangokcen - 09 Şubat 2018, 15:41:47
DS3231 kullanıyorum tavsiye de ederim.1,5 yıldır bir saniye bile sapmadı.
Bu modülü denemek isterim. Bağlantı şeklini nasıl yapılacak?
DS3231 çok düzgün çalışıyor
ben bundan kullandım
fakat o pile güvenmeyin birkaç ay sonra biter
https://www.robolinkmarket.com/raspberry-pi-uyumlu-mini-rtc-modul.html
https://www.robotistan.com/ds3231-hassas-rtc-ve-24c32-hafiza-karti?lang=tr&h=111bc069&gclid=CjwKCAiAqvXTBRBuEiwAE54dcHXxarCIwkdkC1vW1U3wvbazLfL4FTAKketxgTeAdg4RnriiBodSihoC4jAQAvD_BwE
ben bu modülü kullanmıştım üstad.Üzerinde eepromda var.Alarm ve farklı birkaç veri kaydetmiştim.Çok işimi gördü.
DS3231.c
#include "DS3231.h"
unsigned char bcd_to_decimal(unsigned char d)
{
return ((d & 0x0F) + (((d & 0xF0) >> 4) * 10));
}
unsigned char decimal_to_bcd(unsigned char d)
{
return (((d / 10) << 4) & 0xF0) | ((d % 10) & 0x0F);
}
unsigned char DS3231_Read(unsigned char address)
{
unsigned char value = 0;
I2C_start();
I2C_write(DS3231_Write_addr);
I2C_write(address);
I2C_start();
I2C_write(DS3231_Read_addr);
value = I2C_read(0);
I2C_stop();
return value;
}
void DS3231_Write(unsigned char address, unsigned char value)
{
I2C_start();
I2C_write(DS3231_Write_addr);
I2C_write(address);
I2C_write(value);
I2C_stop();
}
void DS3231_init()
{
DS3231_Write(controlREG, 0x00);
DS3231_Write(statusREG, 0x08);
}
void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format)
{
unsigned char tmp = 0;
p1 = DS3231_Read(secondREG);
p1 = bcd_to_decimal(p1);
p2 = DS3231_Read(minuteREG);
p2 = bcd_to_decimal(p2);
switch(hour_format)
{
case 1:
{
tmp = DS3231_Read(hourREG);
tmp &= 0x20;
p0 = (short)(tmp >> 5);
p3 = (0x1F & DS3231_Read(hourREG));
p3 = bcd_to_decimal(p3);
break;
}
default:
{
p3 = (0x3F & DS3231_Read(hourREG));
p3 = bcd_to_decimal(p3);
break;
}
}
}
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1)
{
p1 = DS3231_Read(yearREG);
p1 = bcd_to_decimal(p1);
p2 = (0x1F & DS3231_Read(monthREG));
p2 = bcd_to_decimal(p2);
p3 = (0x3F & DS3231_Read(dateREG));
p3 = bcd_to_decimal(p3);
p4 = (0x07 & DS3231_Read(dayREG));
p4 = bcd_to_decimal(p4);
}
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format)
{
unsigned char tmp = 0;
DS3231_Write(secondREG, (decimal_to_bcd(sSet)));
DS3231_Write(minuteREG, (decimal_to_bcd(mSet)));
switch(hour_format)
{
case 1:
{
switch(am_pm_state)
{
case 1:
{
tmp = 0x60;
break;
}
default:
{
tmp = 0x40;
break;
}
}
DS3231_Write(hourREG, ((tmp | (0x1F & (decimal_to_bcd(hSet))))));
break;
}
default:
{
DS3231_Write(hourREG, (0x3F & (decimal_to_bcd(hSet))));
break;
}
}
}
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet)
{
DS3231_Write(dayREG, (decimal_to_bcd(daySet)));
DS3231_Write(dateREG, (decimal_to_bcd(dateSet)));
DS3231_Write(monthREG, (decimal_to_bcd(monthSet)));
DS3231_Write(yearREG, (decimal_to_bcd(yearSet)));
}
float getTemp()
{
register float t = 0.0;
unsigned char lowByte = 0;
signed char highByte = 0;
lowByte = DS3231_Read(tempLSBREG);
highByte = DS3231_Read(tempMSBREG);
lowByte >>= 6;
lowByte &= 0x03;
t = ((float)lowByte);
t *= 0.25;
t += highByte;
return t;
}
DS3231.h
#define DS3231_Address 0x68
#define DS3231_Read_addr ((DS3231_Address << 1) | 0x01)
#define DS3231_Write_addr ((DS3231_Address << 1) & 0xFE)
#define secondREG 0x00
#define minuteREG 0x01
#define hourREG 0x02
#define dayREG 0x03
#define dateREG 0x04
#define monthREG 0x05
#define yearREG 0x06
#define alarm1secREG 0x07
#define alarm1minREG 0x08
#define alarm1hrREG 0x09
#define alarm1dateREG 0x0A
#define alarm2minREG 0x0B
#define alarm2hrREG 0x0C
#define alarm2dateREG 0x0D
#define controlREG 0x0E
#define statusREG 0x0F
#define ageoffsetREG 0x10
#define tempMSBREG 0x11
#define tempLSBREG 0x12
#define _24_hour_format 0
#define _12_hour_format 1
#define am 0
#define pm 1
unsigned char bcd_to_decimal(unsigned char d);
unsigned char decimal_to_bcd(unsigned char d);
unsigned char DS3231_Read(unsigned char address);
void DS3231_Write(unsigned char address, unsigned char value);
void DS3231_init();
void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format);
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1);
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format);
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet);
float getTemp();
mainde kullanacağın veriler(kendine göre düzenlersin),
/**********************************DS3231 Tanımlamaları*********************************/
unsigned int set;
unsigned char s = 00;
unsigned char min = 54;
unsigned char hr = 11;
unsigned char dy = 4; //1 pazar 2 pazartesi 3 salı 4 çrşmba 5 perşmbe 6 cuma 7 cumartesi
unsigned char dt = 15; // gün
unsigned char mt = 02; //Ay
unsigned char yr = 17; //yıl
short hr_format = _24_hour_format;
short am_pm = 0;
set=DS3231_read(controlREG); //saat frekansı başlatılmadı ise init yapıyordum.
if(bit_test(set,7)){DS3231_init();}
getDate(dy, dt, mt, yr); //Yıl ay gün ve haftanın gününü okumak için
getTime(hr, min, s, am_pm, hr_format); //Saat, dakika, saniye gibi bilgileri okumak için,
//setTime(hr, min, s, am_pm, hr_format);//saat dakika gibi verileri ds3231'e yazmak için.
//setDate(dy, dt, mt, yr);//yıl ve gün gibi bilgileri ds3231'e yazmak için.
Alıntı yapılan: gokhangokcen - 09 Şubat 2018, 18:05:08
https://www.robotistan.com/ds3231-hassas-rtc-ve-24c32-hafiza-karti?lang=tr&h=111bc069&gclid=CjwKCAiAqvXTBRBuEiwAE54dcHXxarCIwkdkC1vW1U3wvbazLfL4FTAKketxgTeAdg4RnriiBodSihoC4jAQAvD_BwE (https://www.robotistan.com/ds3231-hassas-rtc-ve-24c32-hafiza-karti?lang=tr&h=111bc069&gclid=CjwKCAiAqvXTBRBuEiwAE54dcHXxarCIwkdkC1vW1U3wvbazLfL4FTAKketxgTeAdg4RnriiBodSihoC4jAQAvD_BwE)
ben bu modülü kullanmıştım üstad.Üzerinde eepromda var.Alarm ve farklı birkaç veri kaydetmiştim.Çok işimi gördü.
Altınkaya'nın yuvasında, pil içinde tıkır tıkır oynuyor, sıkıntı çektim.
Bu ürün ithal bir şey mi? Pil yuvası sağlam mı?
Gayet sağlam ve güzel hocam ben çok memnun kaldım.
Alıntı yapılan: Ersin - 09 Şubat 2018, 16:53:45
Kristal i değiştir.
Kristal çabuk etkilenen bir komponent, sıcak-soğuk, kalitesiz 32.768 khz (piyasa da bol miktarda var), şaselenmemiş kristal vs. vs.. bir sürü etken kristalin çalışmasını etkiliyor.
Kristale trimmer takıp skop ta 32.768 khz ayar yaptığım halde saatin ileri-geri kalmasını ayarlamaktan yoruldum.
Ds3231 iyi bir seçim olur inşaallah...
Yanıt veren tüm arkadaşlara, teşekkür ederim.
İyi çalışmalar, kolay gelsin...
Esp ile internetten çekin sapma yapmaz :)
https://goo.gl/WSf2YZ
Bence bu tip daha sorunsuz olacaktır...
https://www.robotistan.com/ds3231-hassas-rtc-ve-24c32-hafiza-karti?lang=tr&h=111bc069&gclid=CjwKCAiAqvXTBRBuEiwAE54dcHXxarCIwkdkC1vW1U3wvbazLfL4FTAKketxgTeAdg4RnriiBodSihoC4jAQAvD_BwE
Eeprom hafızalı modül kullandım.
Bağlantısında sorun yaşadım. Modül çalışıyor. Ancak saat algılamıyor.
Saatin üzerindeki DS1302 rtc yi çıkarttım. DS3231 in SCL(CLOCK) ve SDA(DATA) bağlantılarını rtc nin pinlerine bağladım. Ds3231 e de 3.5 vdc besleme gönderdim. Modül çalışıyor, ancak
Saat modülü algılamadı.
Eksik bağlantı mı var acaba?
DS3231 modülü kullanan arkadaşların önerisi olur mu?
Kodlarını görmeden yorum yapmak zor. Kodunda gerekli değişiklikleri yaptın dimi?
Bildiğim kadarıyla DS1302 ve DS3231 farklı protokolle haberleşiyor. DS3231 DS1307 ile benzer protokolle çalışıyor.
Bu modül DS1302 kodları ile çalışmaz. DS1307 kodları ile birebir uyumludur. Protokol I2C olduğundan Data ve Clock hattında pullup direnci ister ve muhtemelen modülün üzerinde bu vardır.
DS3231 fabrikadan halt yani durdurma biti set edilerek çıkar ve saate ayar verip bu biti low yapmazsanız o saat çalışmaz. Modül çalışır ama saat ilerlemez.
Ete
Alıntı yapılan: ete - 10 Şubat 2018, 11:40:10
Bu modül DS1302 kodları ile çalışmaz. DS1307 kodları ile birebir uyumludur. Protokol I2C olduğundan Data ve Clock hattında pullup direnci ister ve muhtemelen modülün üzerinde bu vardır.
DS3231 fabrikadan halt yani durdurma biti set edilerek çıkar ve saate ayar verip bu biti low yapmazsanız o saat çalışmaz. Modül çalışır ama saat ilerlemez.
Ete
DS3231 modülünü kullanmak istiyorum. Uygulamanın nasıl yapılacağını, daha ayrıntılı olarak açıklayabilir misiniz?
Gerekli kütüphane ve nasıl kullanılacağını paylaştım.Takıldığın yer neresi? Hangi dilde yazıyorsun?
Kod yazma konusunda acemiyim.
DS1302 nin(ete hocaya ait) kodlarını çıkartıp, DS1307 nin(Ete hocanın)ilave edebilir miyim?
Hazır kod varsa kullanabilir miyim?
Alıntı yapılan: Maxim - 09 Şubat 2018, 17:43:33
DS3231 çok düzgün çalışıyor
ben bundan kullandım
fakat o pile güvenmeyin birkaç ay sonra biter
https://www.robolinkmarket.com/raspberry-pi-uyumlu-mini-rtc-modul.html (https://www.robolinkmarket.com/raspberry-pi-uyumlu-mini-rtc-modul.html)
O pile güvenip aldım. Pil bitti, Lithium pil şarj olumuyor muydu?
Pil şarj olmuyor. Düzgün bir pil ile 10 yıl çalışıyor sanırım.
Nasıl düzgün bir pil?
Yani şöyle ; örnek olarak AAA pilin 50 kuruş olanı da var 2,5 TL alkalin-bilinen marka olanı da.
daha önce yazdığım gibi, modül üzerindeki pil dandik, birkaç ayda bitiyor.
halbuki normal kaliteli bir para pil (cr3032 gibi mesela) 10 sene gitmesi lazım
bende öyle yaptım, hariçten pil bağladım bir daha biteceğini sanmam.
entegre pili şarj etmiyor
besleme varsa onu kullanıyor yoksa pili ama pili şarj etmiyor
çünkü gerek yok çektiği akım o kadar azki