Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Budzik na ATxmega z graficznym wyświetlaczem OLED

Ty-grysek 28 Maj 2016 22:20 16008 33
  • Budzik na ATxmega z graficznym wyświetlaczem OLED

    Celem projektu było zbudowanie budzika z pseudo-analogową tarczą i możliwością zaprogramowania kilku czasów budzenia z uwzględnieniem dni roboczych i wolnych - także świąt. Dlaczego OLED? Ze względu na wysoką jakość i niski pobór prądu. No i trzeba iść z postępem! :-)

    Nieprawda! Celem projektu była nauka (już nie takiej) nowej serii mikrokontrolerów Atmel.

    Jak zwał, tak zwał. Oto co następuje:

    Podstawą jest kolorowy wyświetlacz OLED 128x128 pikseli 1,5" z kontrolerem SSD1351. Dostępne na polskim rynku moduły wyświetlacza mają domyślnie ustawiony interfejs SPI, ale wystarczy przelutować rezystory R8 i R10 na R7 i R9 aby ustawić interfejs równoległy. Sterowanie równoległe w połączniu z mikrokontrolerem ATxmega256A3U 32MHz, zapewnia dostatecznie szybkie odświeżanie ekranu. Wskazówki z zegara wyświetlane są z anyaliasingiem, a to wymaga względnie sporej mocy obliczeniowej. W wyświetlaczu musiałem także zmienić fabrycznie wlutowane męskie złącze na żeńskie: wykonane domową metodą PCB nie pozwala na metalizację otworów więc musiałem przylutować złącze po stronie elementów – a to da się zrobić tylko dla męskiego złącza goldpin. Innego pomysłu na układ ścieżek nie miałem. Wielkość PCB została dostosowana do wielkości wyświetlacza. Do zasilania użyłem ładowarki od starej Nokii wraz z gniazdem zasilania zdemontowanym z tejże Nokii (nie pamiętam modelu). Na dzień dzisiejszy dałbym po prostu pionowe złącze micro-USB. Pomiar czasu jest realizowany przez precyzyjny DS3231. Bateria podtrzymująca została wlutowana na stałe, z moich wyliczeń wynika że teoretycznie powinna wystarczyć na ponad 1000 lat. Sprawdzę i dam znać :-P Zamontowany rtęciowy czujnik przechyłu pozwala na łatwe włączenie funkcji drzemki. Buzzer BOT-03D jest dość głośny (90dB), aby obudzić każdego śpiocha, oczywiście można regulować jego (tzn. buzzera a nie śpiocha) głośność a także można ustawić narastający dźwięk budzika. Zastosowany termometr DS18B20 zamontowany tak jak na zdjęciu mierzy temperaturę systemu a nie otoczenia, więc należałoby go wyprowadzić poza obudowę urządzenia. Za pomiar światła otoczenia odpowiada fototranzystor BPW85. Sterowanie urządzeniem odbywa się za pomocą joysticka APLS AKQU – rozwiązanie praktyczne i wygodne.
    Z powodu niewielkich rozmiarów złącze programowania PDI zostało wyprowadzone na nietypowym złączu a do programowania używam specjalnie zrobionej na tę okoliczność przejściówki.

    Funkcje budzika:
    - tarcza analogowa lub cyfrowa,
    - automatyczny czas letni / zimowy (można również wybrać manualnie),
    - wyświetlanie nazw świąt (dni ustawowo wolne od pracy, kalendarz gregoriański) – także święta ruchome,
    - możliwość ustawienia 4-ch alarmów,
    - programowanie alarmu na wybrane dni tygodnia lub na dni robocze / wolne (uwzględnia święta),
    - symbol włączonego alarmu jest wyszarzony, jeśli alarm jest ustawiony ale wypada później niż 24 godz.,
    - regulowana głośność alarmu, w tym dźwięk narastający,
    - różne dźwięki / melodie alarmu,
    - 3 czasy drzemki, o programowalnej długości,
    - uruchomienie drzemki poprzez potrząśnięcie budzikiem,
    - dioda LED sygnalizująca aktywne budzenie, tzn. mruga także podczas drzemki,
    - automatyczne dostosowanie jasności wyświetlacza do światła otoczenia.

    W planie:
    - bardziej skomplikowane metody wyłączenia budzika (rozwiąż zadanie, odpowiedz na pytanie, przejdź labirynt itp.) aby skuteczniej rozbudzić śpiocha,
    - zaimplementować minutnik oraz kalendarz.

    Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED Budzik na ATxmega z graficznym wyświetlaczem OLED

    Program wymaga jeszcze wielu poprawek i rozbudowy, ale w takiej formie jak zamieszczam działa poprawnie. Trzeba także popracować nad szatą graficzną, bo – niestety – tutaj zabrakło mi zmysłu artystycznego… No cóż – pozostawiam kod programu otwarty. Mam nadzieję, że jeśli ktoś uzna projekt za warty kontynuacji, również podzieli się swoimi osiągnięciami.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • PCBway
  • #2
    gufim
    Poziom 10  
    Witam bardzo fajny projekt masz w planach zastosowanie jakiejś obudowy czy projekt jest tylko edukacyjny .
  • #3
    Ty-grysek
    Poziom 9  
    Tak, obudowa będzie. Projekt, mimo że w założeniu edukacyjny, doczekał się praktycznego użycia - zastąpił stary budzik. Tak więc obudowa być musi.

    Dodam jeszcze że w rzeczywistości wyświetlacz wygląda znacznie efektowniej niż na zdjęciach.
  • PCBway
  • #4
    tmf
    Moderator Mikrokontrolery Projektowanie
    @Ty-grysek Bardzo fajnie ci to wyszło. Ale oczywiście zawsze można się do czegoś przyczepić :) Na schemacie masz błąd - napisałeś na wyjściu stabilizatora 5V, powinno być oczywiście 3,3V, przy 5V spalisz XMEGA. To tylko błąd w opisie, bo elementy są ok, ale warto to poprawić, żeby ktoś nie popełnił takiej fatalnej pomyłki. Druga sprawa - użyłeś XMEGA256A3U, gdybyś użył podobne XMEGA256A3BU to mógłbyś wykorzystać obecne w niej podtrzymywanie napięcia i podtrzymywany RTC, dzięki czemu niepotrzebny byłby zewnętrzny RTC. I na koniec - widzę, że 1-wire realizujesz w oparciu o IO. Taka realizacja nadaje się tylko do prostych zastosowań i jest meganiepraktyczna. W XMEGA masz pełno UARTów i właśnie UART należałoby wykorzystać do implementacji 1-wire. Dzięki temu wszelkie zależności czasowe realizowane są sprzętowo.
    Ale poza tym projekt bardzo fajny i superestertycznie wykonany GUI.
  • #5
    Ty-grysek
    Poziom 9  
    1. 5V jest na wejściu - przed stabilizatorem i pochodzi z zasilacza od komórki.
    2. Zastosowałem zewnętrzny RTC ze względu na jego wysoką, niespotykaną w innych układach dokładność.
    3. Trochę walczyłem z tym 1-Wire, niestety nie udało mi się uruchomić sprzętowej implementacji. A w necie wciąż jest mało na temat Xmeg.

    Dzięki!
  • #6
    waldekgg
    Poziom 11  
    Pojawiało tu się już parę zegarków, ale ten " cyfrowa-analogowy" jest jak dla mnie ekstra. Spróbuję się do niego przymierzyć. Dzięki za pomysł. Pozdrawiam.
  • #7
    BartekWB
    Poziom 27  
    Mam nietypową prośbę. Mógłbyś zrobić i wstawić tutaj zdjęcie zegarka w ostrym słońcu? Jestem ciekaw jak się sprawują te ekrany w takich warunkach.
  • #8
    yogi009
    Poziom 42  
  • #9
    Ty-grysek
    Poziom 9  
    Orientacyjne koszta:
    - OLED 1,5" SSD1351: 81 zł
    - ATxmega256A3U: 30 zł
    - DS3231: 8 zł (z demontażu z nowego modułu - tak wyszło taniej)
    - DS18B20: 4 zł
    - buzzer BOT-03D: 1,20 zł
    - BPW85: 1,5 zł
    - joystick ALPS: 6 zł
    - bateria: 1,5zł
    - czujnik przechyłu 1,5zł
    Całość, razem z pozostałą drobnicą, jakieś 150zł
  • #10
    Pyzaczek
    Poziom 19  
    Projekt doskonały - gratuluję.
    Jako przysłowiowy "kamyczek" wrzucam to: Link
  • #11
    ferdos
    Poziom 2  
    Świetny projekt i super wykonanie :D
  • #12
    JanuszArtur
    Poziom 14  
    Świetny pomysł! Od dawna szukałem bezgłośnego zegara analogowego... Nawet znalazłem LED ale cena powala :) Tańsze są LCD ale ze znaczkami chińskimi/japońskimi. Szkoda, że nie robią dużych (dostępnych dla przeciętnej kieszeni) wyświetlaczy, np 21x21 cm - to byłby super zegar.
  • #13
    patrx
    Poziom 16  
    Zegarek wygląda efektownie. Piszesz, że idziesz z postępem dlatego OLED plus ATxmega na dokładkę - to super i chwali Ci się. Ale tak do końca to tego postępu u Ciebie nie widać, a nawet gorzej - cofasz się. Czy naprawdę koniecznie musiałeś użyć tego okropnego rtęciowego czujnika przechyłu? Teraz kiedy za kilka złotych można kupić scalony akcelerometr? Przecież szklana bańka może się rozszczelnić przy mocniejszym uderzeniu w zegarek i rtęć wyleci sobie na zewnątrz, a w najgorszym przypadku opary powędrują do Twoich płuc!

    Powiem tak: nie chciałbym mieć budzika, który zawiera wewnątrz płynną rtęć!
  • #14
    szymon122
    Poziom 37  
    Zegarek ciekawy ale bardziej mnie zainteresował interfejs graficzny.
    W jaki sposób projektowałeś grafikę (ikonki, poziom głośności itp)?
    Jak są one zapisane w pamięci? Jaki jest pobór prądu całości?
  • #16
    yogi009
    Poziom 42  
    patrx napisał:
    nie chciałbym mieć budzika, który zawiera wewnątrz płynną rtęć!


    Nie popadajmy w przesadę. Autor wymyślił sobie taką konstrukcję i ją dobrze wykonał. To nie jest produkcja zabawek dla dzieci (a sądzę, że chińskie plastiki i farby są nie mniej szkodliwe). Ekologia ekologią, ale jednak czasem używajmy własnych szarych komórek.
  • #17
    Ty-grysek
    Poziom 9  
    szymon122 napisał:
    W jaki sposób projektowałeś grafikę (ikonki, poziom głośności itp)?
    Jak są one zapisane w pamięci? Jaki jest pobór prądu całości?


    Bitmapy pochodzą z internetu - zwykłe pliki graficzne. Napisałem na PC-ta prosty programik konwertujący bitmapy na postać tablicy HEX, tablice te znajdują się w załączonych źródłach w pliku images.h. Każdy piksel jest reprezentowany przez słowo (16 bit), SSD 1351 ma dostępny taki tryb pracy. Podobnie postąpiłem z czcionkami, zwykłe czcionki windowsowe przekonwertowałem na bitmapy, potem na tablice HEX.

    Pobór prądu próbowałem mierzyć miernikiem poboru energii, dokładnie takim.
    Po kilku dniach: 0,00 kWh :-) Jak będzie okazja zmierzę jeszcze pobór prądu po stronie 5V zasilacza.
  • #18
    kaczy99
    Poziom 23  
    Czegoś tu nie rozumiem. Zastosowano drogi moduł OLED a kolory poza czernią przynajmniej na zdjęciach zdają się mieć jakość co najwyżej starych wyświetlaczy LCD stosowanych w pierwszych kolorowych telefonach Nokii. Celowo zastosowano taką kolorystykę interfejsu czy naprawdę kolory są tak kiepskie?
  • #20
    Ty-grysek
    Poziom 9  
    Znalazłem kilka błędów w źródłach + kilka poprawek i aktualizacji, w załączeniu zaktualizowane źródła.

    Co do zdjęć - jak już pisałem wyszły niezbyt atrakcyjnie. Niestety chwilowo nie zamieszczę nowych zdjęć. Od pierwszych testów do zaprezentowania na forum efektu minęło trochę czasu i walki, wyświetlacz tę walkę przegrał. Tzn. zmęczyłem go za bardzo. Taśemka z kontrolerem (łącząca sam wyświetlacz z płytką drukowaną) jest bardzo delikatna. To tak w ramach ostrzeżenia dla tych co podejmą projekt.
  • #21
    hummer130
    Poziom 11  
    BartekWB napisał:
    Mam nietypową prośbę. Mógłbyś zrobić i wstawić tutaj zdjęcie zegarka w ostrym słońcu? Jestem ciekaw jak się sprawują te ekrany w takich warunkach.


    Witaj. Powiem ci na moim przykładzie. Wyświetlacz czarno biały w papierosie elektronicznym Vamo v5. W słońcu nic nie widać. :cry:
    Edit.
    Tzn. widać "coś tam" ale trzeba przykryć dłonią żeby mieć komfort odczytu.
  • #23
    jacynka84
    Poziom 26  
    To jest lepsze niż super.
    Też robiłem zegar z kartą microSD i eksploratorem plików ale w bascom na xmega, było super.
    Była nawet "mapka" pokazująca miejsce Ziemi oraz Marsa względem słońca (na podstawie zwracanego dnia roku z rtc), wszystko na 128x160.
    Zegarek sam bez karty też zrobiłem na 128x128 na mega32.
    Ale ja nie bardzo rozumiem jak zrobić antyaliasing, byłbyś w stanie mi wytłumaczyć algorytm czy sposób
    działania tego kodu do antyaliasingu abym mógł go sobie przełożyć na bas?

    Budzik na ATxmega z graficznym wyświetlaczem OLED
  • #24
    Ty-grysek
    Poziom 9  
    Dzięki za słowa uznania :D

    Co do antyaliasingu, jest to nieznacznie rozbudowany Algorytm Bresenhama:
    https://pl.wikipedia.org/wiki/Algorytm_Bresenhama
    Algorytm ma dwie ścieżki: "oś wiodąca X" i "oś wiodąca Y" - w zależności od kąta: <45st i > 45st. W każdej ze ścieżek algorytm zapala piksel po pikselu wzdłuż osi X lub Y a co pewien piksel (w zależności od kąta nachylenia) następuje przeskok o 1 piksel wzdłuż osi odpowiednio Y lub X.

    Najlepiej na przykładzie:

    Code:
              XXXXX
    
         XXXXX
    XXXXX


    mamy tu oś wiodącą X, co 5 piksel następuje zwiększenie wartości Y.
    - Pierwszy od lewej piksel zapalam jak leci.
    - drugi piksel zapalam z intensywnością* 4/5 i dodatkowo zapalam piksel powyżej (bo oś wiodąca X i odcinek pnie się w górę) z inetnsywnością* 1/5,
    - Trzeci piksel z intensywnością* 3/5 + piksel powyżej z intensywnością* 2/5,
    i tak dalej. Jest to oczywiście algorytm przybliżony, ale w zupełności wystarczający do tych zastosowań.

    *Moja funkcja obliczająca kolor w zależności od intensywności to:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    gdzie c1: kolor piksela, c2: kolor tła, frac: liczba rzeczywista 0-1 określająca intensywność piksela. Zwróć uwagę, że przed zapalaniem piksela muszę pobrać kolor tła!

    PS.
    Wiem że mój kod jest mało czytelny, ale to się niedługo zmieni - polecam "Czysty kod" Robert C. Martin :-)

    Dodano po 1 [minuty]:

    Fajna obudowa - drukarka 3D ?
  • #25
    Freddy
    Poziom 43  
    Ty-grysek napisał:
    Podstawą jest kolorowy wyświetlacz OLED 128x128 pikseli 1,5" z kontrolerem SSD1351.
    Układ bardzo mi sie podoba, profesjonalne wykonanie.
    Mam pytanie, czy próbowałeś go wykonać z wiekszym wyświetlaczem?
  • #26
    jacynka84
    Poziom 26  
    Tak drukarka oczywiście. Ale są mocno przereklamowane te na filament druciany.
    Wielkie dzięki za przetłumaczenie.
  • #27
    noel200
    Poziom 25  
    pier napisał:
    Jeśli Użyłeś DS3231 z modułu za 8zł to na pewno nie jest to oryginalny DS3231.

    Ja w swoich projektach stosowałem kilkukrotnie moduły gotowe kupione bezpośrednio z chin właśnie za kilka złotych.
    Układy działają dobrze, czas odmierzają precyzyjnie, mierzą temperaturę, rejestry alarmów i konfiguracyjne działają jak trzeba.
    Jak więc jest różnica praktyczna pomiędzy DS3231 oryginalnym, a podróbką?
  • #28
    pier
    Poziom 23  
    noel200 napisał:
    pier napisał:
    Jeśli Użyłeś DS3231 z modułu za 8zł to na pewno nie jest to oryginalny DS3231.

    Ja w swoich projektach stosowałem kilkukrotnie moduły gotowe kupione bezpośrednio z chin właśnie za kilka złotych.
    Układy działają dobrze, czas odmierzają precyzyjnie, mierzą temperaturę, rejestry alarmów i konfiguracyjne działają jak trzeba.
    Jak więc jest różnica praktyczna pomiędzy DS3231 oryginalnym, a podróbką?

    Różnica pewnie taka że nie uzyska się z takiej podróbki dokładności oryginalnego DS3231. Sam mam taki tani moduł jak i oryginalne pracujące DS-y z sampli.
    Ale jeszcze nie używałem tego DS-a z modułu więc na pewno nie wiem jaka jest różnica.
    Ale na pewno układy nie są takie same bo to widać gołym okiem.