Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 1 paź 2025, o 06:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 1 gru 2015, o 09:21 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

Witam.
Ostatnio bawię się w odmierzanie czasu za pomocą RTC. Niestety przy godzinnej pracy śpieszy się on aż o 15 sekund. Wykorzystuję płytkę STM32L053R6, w którym do odmierzania czasu ustawiłem źródło zegara LSI = 37kHz. Sprawdzałem przy innych źródłach, ale ten czas był jeszcze większy niż 15 sekund. Zastanawiam się nad możliwością koregowania tego czasu, tylko nie mam pomysłu jak.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 11:20 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

Wykorzystując LSE ten czas jest o wiele większy. Używam płytki NUCLEO-L053R8.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:57 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,
możesz oczywiście skorygować wskazania zegara, istnieje możliwość kalibracji ( a nawet dwie ), ale przy takiej odchyłce przy zastosowaniu LSE na pewno coś źle robisz. Pokaż kod, bo tak to sobie możemy gdybać.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 16:58 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8616
Pomógł: 338

ale dlaczego 37Khz ?? jak masz tam do tego celu kwarca 32.768 zegarkowego właśnie do RTC

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2015, o 08:40 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

SunRiver napisał(a):
ale dlaczego 37Khz ?? jak masz tam do tego celu kwarca 32.768 zegarkowego właśnie do RTC
W nucleo, którego używam jest dostarczony właśnie kwarc zegarkowy specjalnie do tego przeznaczony, ale gdy inicjalizuja właśnie go to w czasie 1 minuty, spieszy sie on aż o 7 sekund, więc użyłem LSI 37kHZ. Poniżej zamieszczam swój kod:

Konfiguracja:
Kod:
 RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
   HAL_PWR_EnableBkUpAccess();
   __HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);
   __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
   __HAL_RCC_RTC_ENABLE();
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 124;
  hrtc.Init.SynchPrediv = 295;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_PC13;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_LOW;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  HAL_RTC_Init(&hrtc);

  sTime.Hours = 0;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.SubSeconds = 0;
  sTime.TimeFormat = RTC_HOURFORMAT_24;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_SET;
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BIN);

  sDate.WeekDay = RTC_WEEKDAY_FRIDAY;
  sDate.Month = RTC_MONTH_NOVEMBER;
  sDate.Date = 24;
  sDate.Year = 15;
  HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BIN);


Wykonanie:
Kod:
HAL_RTC_GetTime(&hrtc, &time, FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, FORMAT_BIN);   
printf("Aktualna godzina: %d:%d:%d\n\r", time.Hours, time.Minutes, time.Seconds);

Zgodnie ze specyfikacja
Obrazek
Widać jakie muszę dobrać wartości by wszystko działało.

QuadMan napisał(a):
Witam,
możesz oczywiście skorygować wskazania zegara, istnieje możliwość kalibracji ( a nawet dwie ), ale przy takiej odchyłce przy zastosowaniu LSE na pewno coś źle robisz. Pokaż kod, bo tak to sobie możemy gdybać.

Pozdrawiam, QuadMan.

Mógłbyś podać te 2 metody?
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2015, o 19:31 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,
Masz po prostu źle ustawione dzielniki:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dla kwarca 32768Hz musi być np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co do metod kalibracji: obie sprowadzają się do ustawienia odpowiednich bitów w rejestrze RTC_CALR i w celu weryfikacji, pomiaru okresu 1s na wyjściu testowym ( W RM0367 na końcu są przykłady ), ale wątpię byś tego tak naprawdę potrzebował, bo kwarce zegarkowe u Nucleo są naprawdę dobrej jakości. Zwłaszcza że sama kalibracja jest prosta, gorzej z precyzyjnym pomiarem okresu.

Pozdrawiam, QuadMan



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO