Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
TermopastyTermopasty
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zegar matrycowy na atmega328, ds3231 i ds18b20

wojtasXD 08 Jul 2021 13:36 1812 13
  • Zegar matrycowy na atmega328, ds3231 i ds18b20

    Witam!
    Chciałbym przedstawić własną konstrukcję zegara matrycowego opartego na popularnych elementach. Konstrukcja powstała jako prezent dla ukochanej dziewczyny ❤️

    Konstrukcja urządzenia
    Zegar w założeniu miał być typu stołowego, zasilany z zewnętrznego zasilacza. Skonstruowany jest z dwóch zasadniczych części - płytki sterującej oraz płytki wyświetlacza.

    Płytka sterująca jest sercem całego urządzenia, znajduje się na niej logika sterująca oraz zabezpieczenie zasilania. Za sterowanie odpowiedzialny jest układ ATmega328 (prawdopodobnie chiński klon) taktowany wewnętrznym generatorem, układem odpowiedzialnym za zliczanie czasu i utrzymywanie godziny jest ds3231. Dodałem również zabezpieczenie typu crowbar przeciw przekroczeniu napięciu zasilania na tyrystorze BTAP128 (po przekroczeniu ustalonego napięcia tyrystor jest wyzwalany i zwiera zasilanie przepalając bezpiecznik i odcinając dopływ energii). Jako stabilizator dałem popularny układ 7805 na bardzo dużym radiatorze (jest dość mocno na wyrost ale nie stanowi to absolutnie problemu, dodaje masy zegarowi dzięki czemu jest stabilniejszy).

    Płytka sterująca ma rozmiar około 103 x 33mm i wykonałem ją metodą termo transferu żelazkowego, a wytrawiałem chlorkiem żelaza (III). Wszystko udało się zmieścić na jednej warstwie i są tylko dwie przelotki (jakby się uprzeć to i bez nich dałoby się zrobić)

    We wcześniejszej wersji (ta obecna jest drugą) zastosowałem moduł z układem ds1307, niestety z przyczyn bliżej nie znanych moduł "gubił" minuty w trakcie działania (różnice rzędu 30 minut w ciągu dnia), moje usilne próby korekty tego programowo (w kodzie źródłowym jest "resztka" po próbach programowej korekty, całe dodatkowe menu sterowania korektą sekund, teraz w postaci komentarza) spełzły na niczym (korekta działała na zasadzie dodawania wybranej przez użytkownika liczby sekund co godzinę, w praktyce różnice w sekundach były różne i rozwiązanie to nie działało) i zdecydowałem się na inny moduł, który teraz działa tak jak powinien.

    Jako swego rodzaju bajer, dodałem również cyfrowy termometr mierzący temperaturę wewnątrz pomieszczenia, posłużyłem się czujnikiem z układem ds18b20, bardzo prosty w obsłudze także nie sprawiło większych problemów dodanie go do projektu.

    W roli wyświetlacza użyłem modułu zamówionego na dalekim wschodzie opartego na czterech układach MAX7219 połączonych ze sobą szeregowo i sterujących czterema wyświetlaczami led 8x8. Wyświetlacz jest bardzo jasny, zastanawiałem się nawet nad zmienieniem rezystorów które sterują jasnością ledów, ale ostatecznie po zasłonięciu frontu plexą jasność jest jak najbardziej okej.

    Oprogramowanie
    Cały kod napisałem w języku C w środowisku Microchip Studio firmy Microchip. Programowanie kontrolera zrobiłem przez USBasp sprzężony z tymże środowiskiem. Cały program zajął około 8 KB pamięci kontrolera, więc jest baardzo dużo luzu (można by się uprzeć i bardzo to odchudzić i wrzucić np na atmegę8, ale działa więc po co).

    Do użytkownika są dostępne trzy przyciski umieszczone z tyłu obudowy. W trybie normalnej pracy mają następujące funkcje - jasność (regulowana skokowo w 5 krokach) oraz włączenie menu ustawień, jeden przycisk nie ma w tym trybie funkcji (w pierwotnej wersji było tam menu regulacji korekcji czasu)

    Zegar ma dwa tryby pracy:
    - normalną (czyli po prostu wyświetlanie godziny / daty / temperatury) oraz
    - tryb ustawień (wklepywanie odpowiedniej godziny / daty, wybór jednostki temperatury (stopnie Celsjusza, Farenheita oraz kelwiny) oraz wybór wyświetlanych danych (można ustawić dowolną kombinację wyświetlania tzn, można mieć tylko godzinę albo godzinę i temperaturę albo temperaturę i datę i tak dalej...). Wykluczenie danego parametru dokonuje się poprzez podświetlenie go.

    Wyświetlane czcionki zapożyczyłem z datasheet'u układu HD44780.

    Zegar działa już kilka miesięcy i poza wspomnianym problemem z późnieniem się czasu (rozwiązany przez zamianę modułu) nie ma z nim żadnych kłopotów, spełnia swoje zadanie u wybranki mego serca 😘

    Poniżej znajduje się mini galeria przedstawiająca zegar oraz filmik ogólnie pokazujący menu oraz pracę


    Link


    Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20 Zegar matrycowy na atmega328, ds3231 i ds18b20

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    wojtasXD
    Level 8  
    Offline 
    wojtasXD wrote 18 posts with rating 36, helped 0 times. Been with us since 2014 year.
  • TermopastyTermopasty
  • #2
    398216 Usunięty
    Level 43  
    Strasznie wielki ten zegarek... Ładne za to są cyferki. No i ogólnie z zewnątrz wygląda zdecydowanie lepiej niż wewnątrz. Wytłumacz mi tylko czemu ma niby służyć umieszczenie termometru (czujnika) w tej ohydnej rurce? W oryginalnym przeznaczeniu ta rurka ma jeszcze jakiś sens,ale w tym wypadku jedynie szpeci. No i na koniec jeszcze jedno; Skoro ma to być zegar stojący (statycznie w wybranym miejscu) to czy nie byłoby korzystniej wbudować do wnętrza zasilacz? Obecne rozwiązanie raz że jest dość ryzykowne (w wypadku awarii zasilacza można próbować podłączyć inny i - w krytycznym wypadku nawet ten wielki radiator nie pomoże). A dwa - skoro zegarek ma stać w wybranym miejscu - po kiego dodatkowy kabel i dodawanie sobie problemu z wtyczką, która przy ew. przesunięciu może wypaść z gniazda? A jeśli wypadnie - jest podtrzymanie pamięci czy za każdym takim zanikiem zasilania trzeba od początku wklepywać wszystkie ustawienia?
  • TermopastyTermopasty
  • #3
    wojtasXD
    Level 8  
    398216 Usunięty wrote:
    Wytłumacz mi tylko czemu ma niby służyć umieszczenie termometru (czujnika) w tej ohydnej rurce? W oryginalnym przeznaczeniu ta rurka ma jeszcze jakiś sens,ale w tym wypadku jedynie szpeci.

    Czy szpeci to kwestia dyskusyjna, wg mnie nie i zdecydowałem się na takie rozwiązanie bo ze swoim zapleczem technicznym chyba lepiej bym nie zapakował termometru na zewnątrz zegara.

    398216 Usunięty wrote:
    No i na koniec jeszcze jedno; Skoro ma to być zegar stojący (statycznie w wybranym miejscu) to czy nie byłoby korzystniej wbudować do wnętrza zasilacz? Obecne rozwiązanie raz że jest dość ryzykowne (w wypadku awarii zasilacza można próbować podłączyć inny i - w krytycznym wypadku nawet ten wielki radiator nie pomoże).

    sprawdzałem działanie przy większym napięciu zasilającym i ze zwiększonym poborem mocy i radiator jak najbardziej daje radę, fakt można by to inaczej rozwiązać (przetwornicą impulsową....)

    398216 Usunięty wrote:
    A dwa - skoro zegarek ma stać w wybranym miejscu - po kiego dodatkowy kabel i dodawanie sobie problemu z wtyczką, która przy ew. przesunięciu może wypaść z gniazda? A jeśli wypadnie - jest podtrzymanie pamięci czy za każdym takim zanikiem zasilania trzeba od początku wklepywać wszystkie ustawienia?

    Troszkę nie rozumiem tego sformułowania na początku, chodzi o zasilacz na akumulatorze? Myślałem o tym, ale doszedłem do wniosku, że lepiej dać na kabel, można podłączyć i zapomnieć, a nie bawić się co jakiś czas w ładowanie ogniw. Co do zaników napięcia po włączeniu zasilania uruchamiane jest domyślne ustawienie zegara, które z użycia przez te kilka miesięcy wydaje się najabrdziej zadowalające i tak pracuje cały czas, ale fakt można by pomyśleć o zapisie tych danych np do eepromu kontrolera
  • #4
    simw
    Level 26  
    Mam mieszane uczucia. Na plus na pewno to, że główne pcb zostało wykonane osobiście oraz, że projekt stanowi skończony "produkt". Starczyło samozaparcia, żeby całość była praktycznym urządzeniem. Z doświadczenia wiem, że ciężko kończyć tego typu projekty.
    Na minus bałagan w środku, "obciążnik" w postaci radiatora, aż prosi się zastosowanie jakiejś przetwornicy lub zasilanie całości z zasilacza do telefonu na 5V.
    Jak pisałeś wygląd kwestia osobista, ja natomiast nie dałbym takiego zegarka swojej dziewczynie :)
    Dodatkowo zastanawia mnie czemu wszystkie zmienne globalne masz "volatile". Czemu tablica znaków jest również "volatile" a nie jest "const PROGMEM". Jeszcze pewnie sporo kodu można byłoby poprawić...
  • #5
    398216 Usunięty
    Level 43  
    wojtasXD wrote:
    Czy szpeci to kwestia dyskusyjna, wg mnie nie
    A jak można inaczej odebrać taki sterczący kikut z tyłu obudowy? O kwestii wyglądu nawet nie trzeba mówić ale jak taki zegar chcesz postawić na wąskiej półce przy ścianie?
    wojtasXD wrote:
    radiator jak najbardziej daje radę,
    Nie twierdzę, że nie daje rady. Chodziło mi o umieszczenie zasilacza wewnątrz obudowy zegara zamiast we wtyczce. Chyba dostatecznie jasno się wyraziłem pisząc o gnieździe? Dobrze obliczając napięcie z transformatora (wchodzące na stabilizator 7805) nie byłoby kłopotu z nadmiarem ciepła a masa transformatora dała by więcej niż ten ogromny radiator. Po prostu można było to zrobić w bardziej przemyślany sposób.
  • #6
    wojtasXD
    Level 8  
    398216 Usunięty wrote:
    wojtasXD wrote:
    Czy szpeci to kwestia dyskusyjna, wg mnie nie
    A jak można inaczej odebrać taki sterczący kikut z tyłu obudowy? O kwestii wyglądu nawet nie trzeba mówić ale jak taki zegar chcesz postawić na wąskiej półce przy ścianie?


    Nie było planowane stawianie tego zegara na wąskich pólkach, dlatego jest tak zrobiony. Można by tak samo zadać pytanie "a co jeśli miałby stać na dworze? Nie jest wodoodporny", no nie jest bo tam nie ma stać
  • #7
    398216 Usunięty
    Level 43  
    wojtasXD wrote:
    Nie było planowane stawianie tego zegara na wąskich pólkach, dlatego jest tak zrobiony.
    Mało przekonujący argument. Nie ważne - wyraziłem swoją opinię na temat tego czujnika, który jak dla mnie nie dość, że nie pasuje do całego zegara, to w dodatku szpeci go i ogranicza do ustawienia zegara tylko w odpowiednich dla niego miejscach. Moższe się wypierać, ale po prostu w tym momencie odstawiłeś fuszerkę. To nie jest przecież jakiś miernik promieniowania Gaigera a sprzęt domowy, który winien spełniać podstawowy warunek - nie szpecić pomieszczenia. Wiem - zaraz powiesz, że jak zegar będzie stać na wysokości 2m i w kącie to nikt nie będzie widzieć co mu tam z tyłu wystaje, ale - sam chyba pisałeś :
    wojtasXD wrote:
    Zegar w założeniu miał być typu stołowego
    A więc ...?
  • #8
    djfarad02
    Level 18  
    Jeśli obudowa zegara w jakimkolwiek stopniu nagrzewa się (od stabilizatora) to odsunięcie czujnika w tył za pomocą rurki, w której jest osadzony ma sens. Można dyskutować nad przewodnością cieplną takiej rurki i nagrzewaniem się jej od obudowy.
    Zastosowanie zewnętrznego zasilacza podnosi bezpieczeństwo użytkowania - w zegarze nie ma napięcia sieci.
  • #10
    Ibuprom
    Level 26  
    Zamień ten stabilizator liniowy na stabilizator impulsowy, choćby za 7 zł z allegro. Zegar będzie lżejszy, mniej prądu będzie pobierał, spokojnie zasilanie do 30V ogarnie i mniej ciepła będzie się wydzielało. W ten sposób czujnik temperatury będzie można umieścić w obudowie zamiast tak daleko w tyle i przestanie zaburzać wrażenia wizualne kolegów wyżej.

    Sam zegar MEGA, szacunek za konstrukcję.
  • #11
    Niko72
    Level 26  
    wojtasXD wrote:
    Troszkę nie rozumiem tego sformułowania na początku, chodzi o zasilacz na akumulatorze?
    Raczej chodzi o awaryjne podtrzymanie pracy zegara w przypadku przerwy w dostawie napięcia sieciowego 230V. Ustawienia zegara się wówczas skasują i trzeba go ustawiać od nowa. W przypadku zasilania awaryjnego zegar pracuje na zasilaniu z akumulatorków. Wskazane jest wówczas wyłączenie wyświetlaczy, w celu wydłużenia czasu pracy akumulatorków.

    Kolejna sprawa to przyciski ustawiania zegara z tyłu obudowy powodują, że trzeba ustawiać zegar trochę po omacku. Wiem co piszę bo mam monitor z przyciskami z tyłu obudowy i nigdy więcej takiego monitora nie kupię. Przyciski można było dać na górnej pokrywie obudowy. Przy dobraniu odpowiedniego przełącznika i odpowiednim rozwiązaniu mechanicznym nie musiały by one zbytnio wystawać nad płaszczyznę obudowy.
  • #12
    krru
    Level 33  
    Niko72 wrote:
    Raczej chodzi o awaryjne podtrzymanie pracy zegara w przypadku przerwy w dostawie napięcia sieciowego 230V. Ustawienia zegara się wówczas skasują i trzeba go ustawiać od nowa. W przypadku zasilania awaryjnego zegar pracuje na zasilaniu z akumulatorków. Wskazane jest wówczas wyłączenie wyświetlaczy, w celu wydłużenia czasu pracy akumulatorków.


    Już na początku autor podał, że ma w środku układ RTC, na fotkach nie widać po prawda bateryjki, jednak każdy z tego typu układów posiada taką możliwość. Sam czas wtedy nie ginie po zaniku zasilania.
    Pochwalić muszę wygląd - super wygląda z przodu. Natomist w kodzie, jak już ktoś wspomniał, wiele niepotrzebnych volatile.
  • #13
    Duch__
    Level 31  
    Mam coś podobnego na ESP8266 (NodeMcu), zarządzanie przez WWW. Wyświetla czas, aktualną pogodę, gasi się wyświetlacz w wybranych godzinach. Całość zamknąłem w obudowie drukowanej na drukarce 3D.