STM32F0 RTC AsynchPrediv, SynchPrediv nedir ?

Başlatan baran123, 19 Nisan 2015, 21:50:27

baran123

RTC uygulaması yaparken karşıma 2 değişken çıktı ama anlamlarını ve ne iş yaptıklarını tam anlamadım.

Amcalar şöyle bir şey yazmışlar.
uint32_t AsynchPrediv = 0, SynchPrediv = 0
//daha sonra 
SynchPrediv = 0xFF;
AsynchPrediv = 0x7F;
//LSE , LSI ya göre farklı şekilde tanımlamışlar
//hatta structure şöyle atmışlar
RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;
RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;

Bu kodun anlamı nedir ne iş yapar ?

Karamel

#1
hocam kodu bilemecegimde(st librarylerini bilmiyorum cunki) stm32f030 reference manual indan anladigim kadari ile bu 1 hertz lik sinyali senkronize etmeye yariyormus. 14 bitlik bir register. bu yuzden maximum degeri  0x7FFF. oda maximum degerinde ve 32768 Hz clock ta 30.52 μs yeizin veriyormus. 

yazmaniz gereken degerler RTC_PRER registerinin icersinde. bu register a sadece initialize kisminda hukmetmeliymissiniz. default degeri su 0x007F 00FF imis. yani sizin codelardaki degerlere karsilik geliyor.

anladigim kadari ile bu registerla rtc clock frekansini degistiriyoruz.

hocam hayatimda hic real time clock ile bir calismam olmadigimdan hocalarimizdan destek almaniz daha dogru olur. ben sadece reference manual i acip okudum. anladiklarimida turkceye cevirmeye calistim. hatali seyler soylemis olabilirim.

mesaj birleştirme:: 20 Nisan 2015, 00:35:50

tamam simdi anladim.

32768 hertz cok hizli bir frekans. bunu bolup bolup 1 hertz e ceviriyoruz. onuda real time clock un conter ina gonderiyoruz. asagidaki block diagramdan signalin nasil bir yoldan gectigi anlasiliyor.

RTC_OUT conter registerinin girisi olabilir. ona daha bakmadim ama sanirim sistem yukari da yazdigim gibi isliyor.




mesaj birleştirme:: 20 Nisan 2015, 00:40:06

tabloda default degerleri icin async = 128. sync icinde = 256 denmis. asagida oklara 1 hertz ve 512 hertz yazilmis. bunlara ulasabilmek icin. async in ve sync in ikisinde 64 olmasi gerekir. detaylari daha derinlemesine okuyup anlamak lazim.

mesaj birleştirme:: 20 Nisan 2015, 00:42:27

hocam bunlardan 2 sinden birisini sececegiz.

RTC_CALIB: 512 Hz or 1Hz clock output (with an LSE frequency of 32.768 kHz).
This output is enabled by setting the COE bit in the RTC_CR register.

ya 1 hertz i yada 512 hertz i RTC_CR registerindan sececegiz.

mesaj birleştirme:: 20 Nisan 2015, 00:43:37

PC13 nolu pinden urettigimiz frekansi kontrol edebiliriz. neden 2 farkli frekans uretebiliyoruz bilmiyorum ama 1 hertz uretmek bana daha cazip geliyor suan.

mesaj birleştirme:: 20 Nisan 2015, 00:51:29



yukaridaki formule gore 128 ve 256 degerleri olmasi normal oluyor. Fclk_spre ye 1 hertz gidiyor.

mesaj birleştirme:: 20 Nisan 2015, 01:04:40



hocam.

1- RTC_ISR registerinda INIT bitini set edecegiz. rtc duracak ve biz ayarlari yapabilecegiz.
2- bu madde teknik bilgiler iceriyor. stm32 microcontrollerlarin rtc birimini anlamis olmak gerekli. ingilizce olarak. rtc ayar kismina girince RTC_ISR registerinin INITF bitini secin diyor. 1 olunca 2 cycle aliyormus. tabiki clock senkronizasyonuna bagli olarak.
3- RTC_PRER registeri ile 1 hertz uretin.(sanirim 128 ve 256 degerleri olmali. default degerleri bunlar. belki 32768hz input icin dokunmasak bile olabilir.
4- RTC_TR and RTC_DR registerlarina saati ve tarihi yukleyin.
5- RTC_ISR registerinda INIT bitini 0 yapacagiz.


bu islemler bittiginde rtc calismaya baslayacak.

note:

reset sonrasinda RTC_ISR regisgterinin INITS bitini kontrol edebilirmisiz. eger yukaridaki 5 maddeyi onceden gerceklestirmissek. bu bit 1 olacakmis. eger yapmamissak 0 olacakmis.



mesaj birleştirme:: 20 Nisan 2015, 01:13:50

birde son olarak registerlari inceledigimde gordum ki. real time in bilgileri BCD formatta saklaniyormus. yani 12:47 olan saatte 1-2-4-7 seklinde ayri ayri saklaniyormus bilgiler. yani biz ne yapacagiz. direk registerdan ilgili bitleri okuyup. hiz toplama cikartma carpma bolme yapmadan ekrana direk yazacagiz. st microcontrollerlara asik oldum suan  :P


baran123

Sağ olasın karamel bayağı bir çeviri yapmışsın.Eline sağlık :)