Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Malzeme, Komponent arayanlar => Konuyu başlatan: cevat1 - 09 Şubat 2018, 15:26:50

Başlık: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 09 Şubat 2018, 15:26:50
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: polleme - 09 Şubat 2018, 15:38:10
Sürekli ayar ile uğraşmak istemiyorsanız GPS clock kullanın, en garantilisi.

https://learn.adafruit.com/arduino-clock/overview
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: gokhangokcen - 09 Şubat 2018, 15:41:47
DS3231  kullanıyorum tavsiye de ederim.1,5 yıldır bir saniye bile sapmadı.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mehmet - 09 Şubat 2018, 15:51:04
DS3231 de RAM alanı yok, eger istenirse DS3232
kullanılabilir.

Hatta entegrenin(DS3231/3232) içinde sıcaklık
sensörü de mevcut.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mg1980 - 09 Şubat 2018, 16:39:13
Hocam,
Aliexp.ten alınan hazır modüllerde ram(24C32N) var sanırım.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: Ersin - 09 Şubat 2018, 16:53:45
Kristal i değiştir.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 09 Şubat 2018, 17:43:25
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: 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
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: 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

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.




Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: OG - 09 Şubat 2018, 18:13:36
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ı?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: gokhangokcen - 09 Şubat 2018, 18:43:54
Gayet sağlam ve güzel hocam ben çok memnun kaldım.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 09 Şubat 2018, 22:46:04
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...
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: ilyas KAYA - 09 Şubat 2018, 23:52:21
Esp ile internetten çekin sapma yapmaz :)
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mehmet - 10 Şubat 2018, 01:35:00
https://goo.gl/WSf2YZ

Bence bu tip daha sorunsuz olacaktır...
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 10 Şubat 2018, 11:15:13
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: gokhangokcen - 10 Şubat 2018, 11:19:38
Kodlarını görmeden yorum yapmak zor. Kodunda gerekli değişiklikleri yaptın dimi?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mg1980 - 10 Şubat 2018, 11:20:01
Bildiğim kadarıyla DS1302 ve DS3231 farklı protokolle haberleşiyor. DS3231  DS1307 ile benzer protokolle çalışıyor.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: 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
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 10 Şubat 2018, 13:13:40
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: gokhangokcen - 10 Şubat 2018, 13:16:27
Gerekli kütüphane ve nasıl kullanılacağını paylaştım.Takıldığın yer neresi? Hangi dilde yazıyorsun?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: cevat1 - 10 Şubat 2018, 15:34:44
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: veliusta - 10 Şubat 2018, 17:51:03
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?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mg1980 - 10 Şubat 2018, 17:59:32
Pil şarj olmuyor. Düzgün bir pil ile 10 yıl çalışıyor sanırım.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: veliusta - 10 Şubat 2018, 18:07:28
Nasıl düzgün bir pil?
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: mg1980 - 10 Şubat 2018, 18:13:32
Yani şöyle ; örnek olarak AAA pilin 50 kuruş olanı da var 2,5 TL alkalin-bilinen marka olanı da.
Başlık: Ynt: DS1302 RTC yerine modül onerisi
Gönderen: Maxim - 11 Şubat 2018, 12:46:01
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