Start z STM32 VL Discovery – 8 – RTC

Start z STM32 VL Discovery – 8 – RTC
Razem głosów: 2 co stanowi: 90% całości.

RTCe

Chcia?bym w tym miejscu opisa? kwesti? , której bezpo?rednio nie porusza?em a jest dosy? wa?na.

Mianowicie chodzi o u?ycie zegara RTC. Zwykle ze wzgl?du na niedoskona?o?? obwodów czasowych

w ró?nych mikrokontrolerach, powoduj? i? cz?sto si?gamy po zewn?trzne uk?ady RTC na magistrali

I2C cho?by popularne DS1307 czy PCF8583, niemniej jednak  w przypadku mikrokontrolerów ARM

sprawa ma si? inaczej a obwody czasowe s? bardzo dok?adne. Zatem atakujemy temat wbudowanego

RTC.

Napiszemy program demonstruj?cy , u?ywaj?c jak to zwykle troch? zamotania. Je?li jednak

chcecie wiedzie? wi?cej na temat obwodów czasowych zapraszam do zapoznania si? z not?

strona 384. Gdy? opisywanie ca?o?ci obwodów i ich zale?no?ci daleko wykracza poza moje mo?liwo?ci

opisowe , a tez niema sensu przepisywanie dokumentacji.

Oczywi?cie warto w tym miejscu wspomnie? i? na naszej p?ytce STM32VLDiscovery jest poza

zamontowanym kwarcem 32,768Khz równie? wyprowadzony  PIN VBAT umo?liwiaj?cy pod??czenie

zasilania bateryjnego do podtrzymywania pracy wbudowanego uk?adu RTC.

Dokumentacja naszego VLDicovery jest dost?pna tutaj:

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/CD00267113.pdf

oraz dokumentacja procesora stm32F100R8

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00251732.pdf

a teraz zerknijmy na schemat blokowy obwodów RTC

Free Image Hosting at www.ImageShack.us

Hmmm… Pisz? jakie to doskona?e mamy obwody , a wida? ze s? one bardzo prymitywne w sumie,

Jedn? z ciekawych zalet jest fakt umo?liwiaj?cy nam u?ycie dwóch rezonatorów kwarcowych

jednocze?nie do generowania sygna?u CLK dla rdzenia MCU oraz dla RTC.

Dlatego dla naszych celów u?yjemy sobie oscylatora RTC 32 kHz .

Jak wida? szybko?? naszego uk?adu CLK jest kontrolowana przez 20 bitowy rejestr, w którym mo?emy

ustawi? zegar na bardzo powolny oraz bardzo szybki  (w uproszczeniu). Naszym zadaniem wi?c jest

ustawienie go tak by pracowa? zgodnie z czasem rzeczywistym co czynimy tak:

W tym momencie warto wspomnie? ?e nasz zegar nie zmienia si? po resecie, ani te? po od??czeniu

zasilania. Istotna informacj? jest te? to ?e mamy do dyspozycji 3 przerwania:

1. rzeczywiste  —  wyst?puje co 1s

2. alarmowe — o ustawionym czasie

3. z wewn?trznego licznika  — po jego przepe?nieniu

W przeciwie?stwie do znanych nam uk?adów RTC , nasz RTC nie zawiera w sobie danych dotycz?cych

roku, miesi?ca, dnia , godziny , minuty i sekundy, a jedynie jeden 32 bitowy licznik sekund. To w?a?nie

prymitywno?? uk?adu niemniej jednak nie jest to wcale tak ma?o bo obejmuje ca?e 136 lat, a to pozwala

nam ju? spokojnie u?ywa? uk?adu do naszych celów i pozwala nam zawsze wyznaczy? czas. Je?li wi?c

okre?limy sobie czas odniesienia wystarczy policzyc sekundy od uruchomienia procesora by przecyzyjnie

wyliczy? konkretna dat? i czas.  Warto zapozna? si? z dokumentacj? :

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00207941.pdf

oraz przyk?adami . Wynika z tego ?e ca?y proces kalibracji nie jest a? tak prosty , ale za to na tyle

dok?adny jak tylko jest to mo?liwe.

ZATEM DO DZIE?A:

Jak wspomnia?em powy?ej mamy 3 rodzaje przerwa?. Tutaj u?yjemy sobie przerwania ALARMU które

u?ywa z 32bitowego licznika  warto?ci RTC_ALR przechowywanej w dwóch 16 bitowych  rejestrach RTC_ALRH i RTC_ALRL,  dzi?ki czemu mo?emy ustali? liczb? sekund po której wyst?pi przerwanie.

Ustawimy je sobie na warto?? 5. Gdy za? licznik podzia?u warto?ci 60 osi?gnie 0 to uzyskamy minut? , a gdy reszta b?dzie równa 15 to mamy 1/4 min  itd … du?e uproszczenie , ale chyba logiczne :)

Zatem nasz prosty zegar RTC b?dzie wykorzystywa? t? metod?. 

Oczywi?cie przerwanie RTC Handler jest zaimplementowane standardowo w pliku stm32f10x_it.c i jego definicja nosi nazw? RTCAlarm_IRQHandler i w ciele tej funkcji umieszczamy kod:

Oczywiste jest te? ?e b?dziemy potrzebowa? jeszcze jednego przerwania pozwalaj?cego nam przerwa?

dzia?anie RTC i NVIC. Napiszemy wi?c sobie funkcj? :

Któr? umie?cimy w naszym pliku main.c.

 

Czas i data pocz?tkowa s? wy?wietlane na wy?wietlaczu LCD 16×2 pracuj?cym w trybie 4bit , po czym jest uruchomiony zegar na LCD. Zaznaczam te? , ?e w tym programie zmodyfikowa?em troch? bibliotek? LCD SunLCD  dodaj?c nowe funkcje.  Dodatkowo Dioda LED3 miga co 1s, a ka?de 15s  obrazuje miganie LED4.  

 

Przypominam ?e jest to projekt TrueStudio 3.2 Lite … ustawienie czasu i daty spróbujcie zrobi? sami:)

Projekt do pobrania:

[dm]4[/dm]

 

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay