RTC modülden okuduğum verilerle bir milis fonksiyonu gibi fonksiyon oluşturabilir miyim? Birkaç şey denedim ama yapamadım?
Merhaba, oluşturabilirsiniz bir kaç örnek paylaşayım:
uint32_t rtc_millis() { return (RTCtimeinsec() * 1000) + (millis() % 1000); }
Saniyeleri RTC'den alıp mod olarak milise ekleyebilirsiniz, bu sayede yüksek doğruluk sağlanabilir ama ne kadar yararlı olur test etmek gerekiyor.
Bu kodda ise aslında milis yerine rtc'den gelen verilerle işlem yapılabiliyor, örnek olarak kullanılabilir:
int dakika = 0; int onceki_dakika = -9999; // negatif büyük kısım int dakika_fark; void setup() {} void loop() { dakika = rtc.min(); // 0-59 aralığında dakika_fark = dakika - onceki_dakika; if (dakika_fark < 0) { // yeni bir saate başlarsak bu olacak dakika_fark += 60; // bu eksik saati düzeltir } if (dakika_fark >= 10) { // her 10 dakika arayla burayı yap //ornek islemler onceki_dakika = dakika; } delay(123); }
DS3231 veri sayfası, saniye altı çıktıların beş olası frekansı olduğunu ortaya koymaktadır,
- 32 KHz
- 1 KHz
- 1.024 KHz
- 4.096 KHz
- 8.192 KHz
Bu son dört seçenek, RS1 ve RS2 kontrol bitlerinin çeşitli kombinasyonları ile elde edilir.
Örneğin, tam milisaniye elde etmek için seçenek 2, 1KHz'i hedeflersiniz. RS1 = 0 ve RS2 = 0 ve INTCN = 0 olarak ayarlarız. Ardından, cihazın !INT/SQW pininden Arduino'nuzdaki bir dijital giriş pinine kadar olan kesintileri yakalamak için bir ISR'ye ihtiyacımız olacaktır.
volatile uint16_t milliseconds; // volatile burada önemli çünkü bu değişkeni bir kesme hizmeti rutini içinde değiştiriyoruz: ISR(INT0_vect) // ya da hangi pin-interruptu seçerseniz { if (milliseconds == 999) // sıfıra döndür milliseconds = 0; else ++milliseconds; }
ya da
const int RTCpin = 3; // ya da farklı bir dijital pin void setup() { pinmode(RTCpin, INPUT); // INT0 interrupt aktifleştirme GICR |= ( 1 < < INT0); // sinyal değişikliği kesintiyi tetikler MCUCR |= ( 1 << ISC00); MCUCR |= ( 0 << ISC01); }
Bu kodları çalıştırdıktan ve DS3231'in pin3'ünü seçtiğiniz bir dijital giriş pinine bağladığınızda, bu pin 1KHz'de veya her milisaniyede etkinleştirilecektir.