środa, 6 października 2021

Zegar LED czyli od lamera do Super Bohatera :)

Poczyniłem kilka lat temu projekt zegarka LED. Mózgiem zegarka był AVR, wtedy jeszcze nawet nie słyszałem o PIC-ach :). Była to moja pierwsza "poważna" konstrukcja oparta o mikrokontroler, która po dzień dzisiejszy napawa mnie satysfakcją i dumą. Wykonałem kilka takich zegarków dla rodziny i chodzą bezawaryjnie od lat. Zegarek stał się przyjacielem domu. Inaczej spogląda się na twór własnej pracy a inaczej na gotowy produkt kupiony w sklepie. Postanowiłem stać się ponownie Super Bohaterem i wykonać udoskonalony produkt tak, aby cieszył oko domowników przez kolejne lata. Tym razem zegarek będzie większy, inteligentniejszy i ładniejszy :). Czyli zrobię sobie zegarek , który w chwilach niepowodzeń pogada ze mną , wysłucha , udzieli rad i porad w tym psychoterapeutycznych :). Czyli zegarek psychoterapeuta. No okay ale taki to dopiero zrobię w wersji nr 3. :).
 
Zegarek w założeniu ma być nie nudny, czyli oprócz prezentacji czasu , będziemy również prezentować na nim temperaturę wewnętrzną i zewnętrzną. Aby uzyskać super dokładność wskazywania czasu, posłużę się radiową synchronizacją czasu. Zrealizuję to przy pomocy modułu radiowego SI4463. Zegarek będzie kalibrowany czasem pobranym z internetu. W tym celu wykonam dodatkowo małe urządzonko z modułem radiowym na pokładzie i modułem ethernetowym W5500. Czyli będzie to taki rozsiewca czasu. Rozsiewca czasu będzie wpięty w Router LTE. Aby rozsiewca czasu nie ograniczał się tylko do jednej funkcji , wykorzystam go jako łącznik pomiędzy zegarkiem LED (wieloma zegarkami LED) a chmurą. W chmurze będziemy mogli na bieżąco z dowolnego miejsca w kosmosie z zasięgiem internetu, monitorować temperatury z poszczególnych zegarków i wszystko to zrobimy z poziomu telefonu. 

W zarysie ogólnym front zegarka będzie się prezentował jak na obrazku poniżej :
Podstawowe założenia sprzętowe jakie przyjmę na początek do realizacji projektu :
 
  •  relatywnie duże pojedyncze wyświetlacze LED do prezentacji czasu (4 szt), rozmiar 38,1 mm. ze wspólną katodą. Kolor zielony. Pierwszy zegarek LED z AVR zrobiłem na LED-ach 14,2 mm

  •  zespolone, 4-polowe wyświetlacze LED do prezentacji temperatury wewnętrznej i zewnętrznej (2 szt). Wspólna katoda. Kolor , żółty dla jednego i czerwony lub niebieski dla drugiego. Dla temperatury wewnętrznej można by było skrócić wyświetlacz o jedno pole czyli dać trójpolowy. Ale taki niesymetryczny układ wizualnie nie prezentuje się dobrze moim zdaniem.

  •  czujnik temperatury zewnętrznej i wewnętrznej wykonam na klasyku DS18B20.  
  • ponieważ wyświetlacze LED sterujemy logiką 5V dlatego muszę użyć MCU w takim ekosystemie napięciowym. Microchip oferuje nam w 8,16 i 32-bitach, MCU , które zasilimy 5V. Na tę chwilę postanowiłem użyć MCU 16 bit dsPIC33EV128GM102 w obudowie 28 pin (SOIC). Ponieważ wybrany MCU ma na pokładzie CAN. Nie wiem jeszcze po co ale doposażę zegarek w ten interfejs :).
  • moduł radiowy SI4463 do komunikacji z rozsiewcą czasu i do przekazywania informacji o temperaturze. W tym punkcie zaświeciła mi się żarówka do czego można wykorzystać CAN w zegarku. Mianowicie do np. komunikacji z jakimś wyniesionym panelem sterującym/przełączającym etc. Całe sterowanie logiką działania, realizowane będzie w chmurze rzecz jasna i za pomocą pykania na telefonie :).
  • driver do sterowania LED, MAX7219 w wersji chińskiej czyli kompatybilnej z oryginałem i znacznie tańszy. Driver ma m.in możliwość regulacji jasności świecenia co zostanie docelowo wykorzystane w zegarku.
  • konwerter napięcia np.74LVC245 do współpracy z modułem radiowym SI4463. Ponieważ moduł radiowy nie może być sterowany logiką 5V dlatego użyję scalonego konwertera.
  • zegarek Microchipa MCP79410. Miałem już z nim do czynienia i go polubiłem.
  • sterownik dotyku CAP1296 (obudowa 14-pin SOIC) do ustawień zegara i ewentualnie do innych funkcjonalności. MCU Microchipa obejdą się bez sterowników dotyku bo mają doskonałą bibliotekę do tego wykorzystującą zasoby wewnętrzne MCU. Chcę jednak przetestować rozwiązanie sprzętowe na zewnętrznym sterowniku a potem odnieść/porównać to do biblioteki Microchipa.
  • transciver CAN , na pewno Microchipa , nie wiem jeszcze jaki model wybiorę . Microchip ma spora ofertę takich urządzeń.
Sprzęt mniej więcej mam ogarnięty. Nadmienię, że projekt robię od zera czyli od koncepcji ogólnej do szczegółowych rozwiązań. Nie mam na tym etapie gotowego produktu i rozwiązań :). Pisząc ten artykuł tworzę i to jest piękne :).

Zaczynam zakupy sprzętu. Pierwszym zakupem są wyświetlacze LED 38,1 mm, które mam już na biurku. Są świetne, w głębokiej czerni pobudzają zmysły do dalszych działań :). Już chcę mieć ten zegarek gotowy na biurku :).



Czekam na pozostałe elementy. W międzyczasie doszedłem do wniosku, że najpierw wypadałoby przetestować sterownik dotyku CAP1296, głupio byłoby wykonać płytkę zegara jeśli obsługa dotykowa jego nie spełni moich oczekiwań.
Zatem w oczekiwaniu na elementy, mam zamiar wykonać moduł typu Click Boards w standardzie Mikroelektroniki MikroBUS dla sterownika dotyku CAP1296. Taki uniwersalny moduł pewnie się przyda do innych projektów. Moduł  wepniemy w dowolną płytkę czy to Microchipa czy moją ze złączem MikroBUS.






Projekt płytki z "dotykiem" wysłałem z nowym rokiem do "płytkarni". Czekam na dostawę. CAP1296 już mam , czekają w lukach startowych na płytki. Jestem bardzo ciekawy jak to będzie działać, zaletą dotyku jest brak efektu drgania styków, wadą , że trzeba po ciemku macać :).
 
Dotyk mam już przetestowany, działa świetnie, więc do zegarka raczej go zaaplikuję. Jedną z zalet dotyku jaką dostrzegam w kontekście ustawiania zegarka to szybsze operowanie manualne na dotyku niż na mechanicznych przyciskach. Małpa najpierw dotykała a potem przyciskała, więc dotyk jest pierwotnie bliższy naturze :). Pierwsze przymiarki do ustawienia frontu zegarka :


W przestrzeni między dolnymi wyświetlaczami dam trzy pola dotykowe do ustawiania zegarka. Idealnie tam się wkomponują. Ponieważ w zapasie zostaną mi trzy kolejne pola dotykowe to zostawię je gdzieś z tyłu zegarka na dodatkowe sterowanie różnymi funkcjonalnościami dodatkowymi. Do zegarka dodam prawdopodobnie jedno złącze mikroBUS na jakieś rozszerzenia . Póki co jednak głośno myślę.

Trochę czasu mi zajęło aby powrócić do projektu zegarka. Zawsze coś stało na przeszkodzie a to prace w ogródku a to robienie przetworów a to praca na dwa etaty a to Covid  a to koniec wojny w Afganistanie , no powodów bez liku by się znalazło :). Ale zajawka cały czas żyje w mojej głowie, więc jest szansa na zmaterializowanie się jej.

Obecnie przysiadłem nad projektem frontu zegarka, który mam już na wykończeniu. Front zegarka będzie miał na pokładzie następujące elementy :

- MCU PIC18F26Q43 lub PIC18F25Q43
- Sterownik dotyku CAP1293
- Sterownik LED MAX7219 x 2
- Zegar MCP79410 + gniazdo baterii
- Czujnik temperatury DS18B20 x 2 szt
- Opto Rezystor
- gniazdo ICSP do programowania
- gniazdo do połączenia z drugim modułem

W międzyczasie zmieniłem trochę koncepcję budowy zegarka. Zegarek docelowo będzie miał dwa moduły. Jeden to panel frontowy sterowany MCU PIC 8bit a drugi to panel z MCU 32 bit obsługujący m.in dwa gniazda rozszerzeń, moduł radiowy SI4463, CAN i jeszcze co mi przyjdzie do głowy :) . Oba moduły będą się komunikowały ze sobą po RS232. Chciałem maksymalnie "uciekawić" zegarek tak aby służył m.in nie tylko do odmierzania czasu ale był platformą testową do nauki i budowania oprogramowania, wielowątkowego.








Płytkę frontową zegarka wysłałem do produkcji. Czekam na wykonanie i dostawę. Czas start : 21-10-2021. W dniu 26-10-2021 otrzymałem informację, że płytki zostały do mnie wysłane . Czas stop 03-11-2021. Pierwsze otwarcie pudełka z wypiekami na twarzy :) :


No to mam zabawy na wieczory zimowe :). Trwają prace nad uruchomieniem poszczególnych komponentów na płytce - panelu frontowym. Nie mogę się doczekać momentu kiedy dojdę do ustawiania cyfr za pomocą dotyku.

Dobre wino plus dobry obiad okazały się destrukcyjne dla mojej płytki testowej :). W uczuciu błogości rozkosznie podłączyłem odwrotnie zasilanie na płytkę. Jeden MAX7219 zaczął szwankować , wcześniej działał ale co ciekawe MCU wygląda , że przeżył. A jak na złość wszystkie elementy wlutowałem. Muszę drugą płytkę polutować , dobrze, że mam ich kilka :). W międzyczasie dokonałem drobnych poprawek na płytce oraz liftingu w panelu przednim m.in elementy w obudowach SSOP wymieniłem na większe SOIC co by się łatwiej lutowało i tak mam dużo miejsca na płytce , więc nie mam tutaj parcia.



Na chwilę obecną mam już opanowaną z grubsza obsługę wyświetlaczy z użyciem MAX7219. Działa to rewelacyjnie, zdecydowanie dokupię sobie chińskie MAX7219 . W kolejnym kroku będę uruchamiał zegarek MCP79410. Posłużę się tutaj moją płytką developerską dla PIC 8bit . Zestaw testowy wygląda jak poniżej :

Życie mojego projektu zegarka jest bardzo bogate i obfituje w niespodziewane zwroty akcji przez co szybko się nie znudzę :). Wizja moja jest obecnie następująca . Panel frontowy zegarka wykonam w oparciu o STM32G0. Ponieważ PIC-e zbyt dobrze poznałem i nie stanowią one  dla mnie wyzwania a ja lubię wyzwania, dlatego podniosłem sobie poprzeczkę i obecnie będę ujeżdżał STM32G0. W tym celu zaprojektowałem nową odsłonę panelu frontowego zegarka w oparciu o ten właśnie MCU.




Płytka zegarka z STM32G0 na pokładzie wreszcie dotarła. Być może lekkie opóźnienie dostawy wynikało z blokady naszych granic przez Ukrainę dla ruchu z Chin. Ot taki prztyczek w nosa dla nas ze strony sąsiada Ukrainy. Na dniach zlutuję to do kupy i zacznę uruchamiać komponenty. W sumie oczekuję fajnej zabawy na zimowe wieczory. W międzyczasie cena STM32G0 w ciągu tygodnia wzrosła o 15% . Gonimy Turcję :(.




Testy sterowania MAX7219 za pomocą STM32G0 mam już za sobą. Zielone LED-y pięknie i soczyście świecą w sekcji zegara, zdjęcie tego nie odzwierciedla. Na razie wygląda na to, że nie mam na płytce żadnych błędów . Dalej wlutuję kolejne komponenty czyli LED-y przeznaczone do wyświetlania temperatury.



Wszystkie wyświetlacze LED działają. Na płytce testowej osadziłem je w gniazdach , więc fizycznie nie są przylutowane do płytki. Wszystko razem tak pięknie świeci, że można patrzeć na to przez długie chwile.  Chińskie MAX7219 dają radę. Po prostu bajka. Kurcze , ile taka praca organiczna daje satysfakcji . A w tym wszystkim napiękniejsza jest droga do celu a nie jego osiągnięcie.

Dalszy etap to pisanie softu. Postanowiłem , że zegarek zaprogramuję pod kontrolą RTOS-a. Będzie to doskonały przyczynek do nauki i mój pierwszy praktyczny projekt z wykorzystaniem RTOS-a. Jeśli pokonam tę barierę, to drzwi do bardziej skomplikowanych projektów będą stały przedemną otworem. Moje zapiski z uruchomienia zegarka znajdziemy w tym artykule : 
Pozdrawiam

PICmajster
picmajster.blog@gmail.com

3 komentarze:

  1. Ciekawy artykuł. Pomocne informacje

    OdpowiedzUsuń
  2. Dorzucił bym wyświetlacz OLED z drugiej strony, najlepiej taki 2.4", daje więcej możliwości, do tego można wysyłać jakieś informacje osobą które zostaną tymi zegarkami obdarowane :)

    OdpowiedzUsuń
  3. Pomysł ciekawy zapodałeś dziękuję, rozważę go przy projektowaniu tylnego panelu zegarka. Za tylny panel wezmę się jak uruchomię przedni :). W sumie możliwości mam nieograniczone w implementacji dodatkowych funkcjonalności zegarka z racji modułowej konstrukcji.

    OdpowiedzUsuń