STM32 RTC Clock Seçimi

Başlatan Eren Eraslan, 05 Ocak 2017, 21:03:00

Eren Eraslan

Hocamlar herhaba

STM32L serisiyle uğraşıyorum şu aralar. İçerisindeki rtc yi kullanmak istedim.
Clock ayarlarına çok dikkat etmemiştim HAL library de default LSI yani 32khz aktifleniyor.

Time bilgilerini çekip oled ekrana bastırdığımda telefondaki saatimle karşılaştırıyorum. Bir dakika da 2sn filan geriliyordu.

Sonra HSE yi aktifleştirmeyi akıl edebildim. Tam 32.768Hz external clock.
Bu şekilde hiç kayma olmadan okuyabildim.

aradaki 0.768Hz lik farkın nasıl kayma oluşturduğunun hesabını anlatabilir misiniz ?


insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

yldzelektronik

Kaymanın sebebi bu değil de kullanılan clock kaynağının hassasiyet ve doğruluğu ile alakalı olabilir.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

32,768khz yerine 32khz verilince ileri değilde geri kalması lazım mantık olarak.

Tagli

LSI 32 kHz olmak zorunda değil. Modele göre değişebilir ancak bazı STM32'ler için bu değer 30 - 40 kHz arası olabilir şeklinde belirtilmiş, artık şansına ne çıkarsa. Haliyle, LSI'yı harici bir referansa göre kalibre etmeden RTC için kullanmak mümkün değil.

RTC için HSE uygun şekilde bölünerek kullanılabilir ancak bunun pil ile çalışan düşük güç uygulamaları için uygun olacağını sanmıyorum. En iyisi 32.768 kHz kristal ile LSE kullanmak. Bazı az bacaklı modellerde LSE girişi bulunmayabiliyor. Bu durumda düşük güç de arzulanıyorsa belki HSE kullanılarak LSI kalibre edilebilir diye tahmin ediyorum ama konuyu derinlemesine araştırmadım.
Gökçe Tağlıoğlu

Eren Eraslan

Hocamlar iyi akşamlar

STM nin internal RTC si ile biryere gelebildim. Fakat bir sorunum var. Vbat pinini 3V3 ile besliyorum. Lowl level örneklere baktığımda RTCWrite Protection kapatılıp RTC init ediliyor.
Alttaki gibi işlemciyi init ediyorum. Fakat yüklediğim videoda da göründüğü üzere sürekli resete basip çektiğimde RTC den datayi çekemiyor. Bu normal bir durum mu?
Her reset attığımda zamanı kaçırıyor. Sebebi nedir? Var mı tecrübesi olan.
İşlemci STM32L476
Clock External 32.768hz

https://www.youtube.com/watch?v=RGX8RfmN524

Main Kod:

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();
	
	__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }
	__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);
	if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR0) != RTC_BKP_DATE_TIME_UPDTATED)				// Bu adrese daha once birsey yazildi mi onu kontrol et.Yapilmissa baslangic degerleri atla
  {
		HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,RTC_BKP_DATE_TIME_UPDTATED);					//yazildiysa RTC nin baslangic saat tarih ayarlarini yap
		MX_RTC_Init();
	}																																						
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  
  /* USER CODE BEGIN 2 */
	
  ssd1306_Init();
  ssd1306_Fill(Black);
  ssd1306_UpdateScreen();
....
....
....



insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

Klein

Videodan durumu tam anlamadım. 23:33:30 da resetliyorsunuz, reseti bıraktığınızda 23:33:35 olarak güncelleniyor. Videonun saati de bu aralığı yaklaşık 5sn olarak gösteriyor. Aynı durum 23:33:40 ta da var. sonda ekran uzun süre gidiyor, orada biraz sapıtıyor. Orada sanki besleme gidiyor gibi. Durumu daha net anlatır mısınız?

Eren Eraslan

hocam valla kusuruma bakma kafam çok durdu.

23:33:30 - 23:33:35 arası gerçek zamanlı 5sn resete basıyorum.Orada bir sorun yok zaten. Aynı şekilde 23:33:40 da da geçerli. Resetten çektiğimde doğru zamanda olduğu gözüküyor
RTC burada arka planda çalışıyor

Ama

23:33:47 de sürekli resete basıyorum. Yani işlemci düzgün çalışmıyor hızlı resetlemeden dolayı ekran'a datayı da tam basamıyor
Burada da RTC nin arka planda çalışmasını bekliyordum ne kadar sürekli reset atsamda... Sonuçta RTC donanımına Vbat pin'i üzerinden sabit 3.3V ve 32.768khz de clock veriyorum.
Ona rağmen sürekli resetlediğimde RTC nin arka planda hiç çalışmadığını görüyoruz. Bunun sebebini sormuştum hocam.
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

Klein

Hal kütüphanesini tanımadığım için oradaki bazı değişken ve fonksiyonların içeriğini bilmiyorum. Bu yüzden yorumumda hata olabilir.

Sanki her resette yenisen init ediyor ve saatin son değerini yüklüyor gibi geldi bana. Sen daha saniye değişmeden reset yeptığın için her seferinde 23:33:47 yüklüyor ve sayıcıyı buradan başlatıyor. Daha saniye değişmeden tekrar resetledğin için tekrar aynı işlemi yapıyor ve zamanın değşimiyor.