Witam,
Widzę, że chyba wszystkim udziela się ostatnio magia świąt, co widać po wzroście zainteresowań wszelkimi inteligentnymi diodami RGB.
Ja zatem nie pozostaję gorszy i prezentuję projekt zegarka-prezentu dla dziewczyny opartego o miktokontroler STM32 z nowej rodziny G0, nad którym pracuję od listopada. Działa on w 99%
Pozostało mi do ukończenia dosłownie kilka funkcji narzędziowych, które nie są jakoś specjalnie istotne. Mam nadzieję, że wielu osobom, które tak jak ja przesiadają się na 32-bitowce, uda mi się przy okazji pokazać jak ja podchodzę do wykorzystania ich możliwości, a jak wiadomo wbudowanych peryferiów mają one masę! Dodam tylko na wstępie, że program napisany został bezpośrednio "na rejestrach", także zwolennicy CMSIS powinni być zadowoleni
Do dzieła!
Założenia sprzętowe:- Zasilanie za pomocą 12VDC (zastosowałem dwie przetwornice: A8498 oraz LDO1117 3.3V),
- Wyświetlanie godziny, minuty, aktualnej daty za pomocą WS2812, wyświetlacza multiplexowanego LED,
- Powitalne wiadomości na dolnym wyświetlaczu,
- Możliwość konfiguracji za pomocą USART (w przyszłości umożliwiona rozbudowa o moduł WiFi - serwer NTP i takie bajery
), oraz trzech przycisków tact-switch,
- Dostosowanie kolorów do odpowiedniej pory dnia (rano żółty, po południu ciepła zieleń, wieczem pomarańcz i fiolet, a w nocy ciemny niebieski),
- Płynna regulacja jasności w zależności od oświetlenia w pokoju,
- Możliwość zapisywania danych do zewnętrznej pamięci EEPROM 2kB,
- Wsparcie Battery Backup Domain za pomocą superkondensatora sterowanego mosfetem,
- Buzzer (jako funkcja alarmu i nie tylko
),
- Status LED.
Założenia programowe:- Stworzenie pełnej biblioteki wspierającej WS2812 i ładującej wszystkie dane do jednego bufora (w ten sposób łatwo wzbogacić program o użycie DMA),
- Stworzenie biblioteki do wyświetlania cyfr i znaków (wraz ze scrollowaniem) na alfanumerycznym wyświetlaczu 16-segmentowym,
- Wykorzystanie wewnętrznego zegara RTC oraz możliwość jego ŁATWEJ kalibracji,
- Uniwersalne funkcje do konfiguracji czasu i daty w rejestrach RTC,
- Proste menu konfiguracyjne (wymaga jeszcze dopracowania)
Schemat i model 3D płytki PCB:Znajduje się w pliku załączonym pod postem.
Zdjęcia:Pliki źródłowe (z komentarzami) i biblioteki:main.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Biblioteka WS2812ws_lib.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ws_lib.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pliki konfiguracyjne (ustawienia rejestrów STM32)config.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
config.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Biblioteka do obsługi wyświetlacza 16-segsegment_dsp.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
segment_dsp.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Biblioteka do obsługi RTC/konfiguracji/aktualizacji danych czasu:clock.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
clock.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Biblioteka menu (zrobiona na szybko i wymaga jeszcze pracy, także proszę się nie przerażać )clk_menu.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
clk_menu.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pozdrawiam