piątek, 13 lipca 2012

Zegar LCD z podświetleniem RGB


Ostatnio zdecydowałem się zrealizować nieco ambitniejszy projekt - "Zegar LCD z podświetleniem RGB".
Ponieważ postanowiłem podciągnąć/ sprawdzić swoje umiejętności programowania / obsługi AVRów zdecydowałem się stworzyć trochę bardziej zaawansowany zegarek ( w oparciu o BASCOMa). Wyposażyłem go w wyświetlacz LCD co czyni go trochę bardziej nieczytelnym , za to dało mi większe pole manewru w tworzeniu funkcji zegarka. Nieczytelność tutaj jednak w niczym
nie przeszkadza ponieważ zegarek stoi na biurku. Very Happy

Zegar ten wyposażony jest w funkcje ustawiane w menu w którym istnieje możliwość:
Arrow ustawienia godziny (z dokładnością do godzin i minut)
Arrow ustawienia dni tygodnia
Arrow ustawiania daty (z uwzględnieniem lat przestępnych co 4 lata - jedyny mankament to to że mój zegarek bezwzględnie trzyma się zasady "co cztery lata rok przestępny" w skutek czego rok "00" uznaje zawsze za rok przestępny mimo iż w rzeczywistości zazwyczaj rok ten jest zwykły (wbrew zasady co 4 lata rok przestępny) np. 2000 był przestępny ale 2100 , 2200, 2300 już nie będzie przestępny.Miałem pomysł wprowadzenia możliwości zmiany przez użytkownika
czy rok "00" ma być przestępny czy zwykły ,ale zabrakło miejsca w programie, więc za niespełna 90 lat ktoś będzie miał problem Wink.
Arrow ustawienia budzika (dla każdego dnia tygodnia budzik ustawiamy niezależnie , ponadto możemy również zdecydować
czy chcemy aby w dany dzień budzik dzwonił czy nie.)
Arrow wybór bajerów wizualnych - diody LED (możemy tu wybrać podświetlenie RGB w jednym z następujących trybów: wyłączony, efekt tęczy [płynnie zmieniające się podświetlenie RGB - sterownie poprzez programowy PWM], efekt skokowy [różne kolory zmieniające się skokowo], kolor czerwony, zielony, niebieski, fioletowy, różowy, żółty, pomarańczowy, biały; istnieje też możliwość włączenia/ wyłączenia podświetlenia wyświetlacza LCD)
Arrow Zmiana czasu ( w tej sekcji menu mamy możliwość zadecydowania czy chcemy aby zegarek automatycznie przestawiał nam godzinę z czasu letniego na zimowy i odwrotnie - "tryb auto" lub "tryb manualny")

Przy ustawianiu godziny, budzika i daty mamy uruchomioną tzw. funkcje "inteligentnego przycisku" czyli trzymamy przycisk cały czas wciśnięty a on z dużą szybkością powiększa daną wartość.

Mamy 4 przyciski:
1) Służy do przechodzenia do kolejnych sekcji w menu. Po przejściu całego menu wracamy na ekran główny na którym wyświetlony jest w lewym górnym
rogu dzień tygodnia, w prawym górnym data i na dole godzina z uwzględnieniem sekund; gdy budzik dzwoni przycisk ten służy do wyłączenia budzika
2) Przycisk do ustawiania godziny, dnia tygodnia (przewiń w górę), dnia miesiąca, godziny budzika, wyboru podświetlenia LED (przewiń w górę),
zmiany czasu z letniego na zimowy (zamienia auto na manualny i odwrotnie).
3) Przycisk do ustawiania minuty, dnia tygodnia (przewiń w dół), miesiąca, minuty budzika, wyboru podświetlenia LED (przewiń w dół),zmiany czasu z letniego na zimowy (zamienia auto na manualny i odwrotnie).
4) Przycisk do ustawiania roku, ustawiania czy włączamy/ wyłączamy budzik na dany dzień, włączanie/ wyłączanie podświetlenia LCD, gdy budzik dzwoni uruchamiamy tym przyciskiem drzemkę

W przypadku uruchomienia się budzika przez pierwszą minutę piszczy dość spokojnie, po minucie wchodzi w tryb "wzmożonego budzenia" Wink - wiadomo o co chodzi, często stosowane w tradycyjnych budzikach.
Mamy możliwość uruchomienia sobie drzemki na 5 minut - za pomocą przycisku lub pilota - nie stosuje tu żadnego kodowania - układ działa w sposób załącz/ rozłącz, dzięki temu drzemkę można uruchomić nie wstając z łóżka (opcja dla leniuchów).

Oczywiście poza tym istniej także możliwość całkowitego wyłączenia budzika (gdy zadzwoni) za pomocą jednego przycisku. Dodatkowo o pełnych godzinach zegarek generuje piknięcie - dzięki czemu człowiek może utrzymać lepsze poczucie czasu nawet nie spoglądając na zegarek.

Niestety obsługa wyświetlacza LCD przez program okazała się na tyle powolna że dioda RGB (kiedy była obsługiwana przez programowy PWM) przygasała, gdy następowała zmiana treści wyświetlacza - w moim wypadku działo się to co sekundę. Zdecydowałem się więc dodać warunek w programie powodujący, że w czasie świecenie diód RGB sekundy są zawsze wyzerowane (chociaż w rzeczywistości inkrementują się w pamięci procesora).

Obudowa została wykonana z pleksi (aby ładnie się mogła podświetlić przez diody RGB). Chociaż dysponuje opalarką i kiedyś wyginałem plekse tym sposobem to postanowiłem jednak nie ryzykować i użyłem gotowej ramki na zdjęcia ,którą odpowiednio dociąłem.
Na przodzie ramki namalowałem pusty w środku prostokąt tak aby zasłonić zieloną płytkę modułu wyświetlacza.
Moduł wyświetlacza skręciłem z własną płytką PCB i z tyłu z pomalowaną na czarno płytką pleksy za pomocą śrub M3 x 30mm (domyślny otwór w module LCD jest minimalnie mniejszy niż 3mm ,więc musiałem go rozpiłować iglakiem). Następnie utworzoną w ten sposób "kanapkę" przykleiłem do ramki  z pleksy za pomocą kleju na bazie cyjanoakrylu - używałem odrobiny, nałożyłem za pomocą pędzla tak aby nie rozlał się na wyświetlacz lub na obudowę. Po bokach użyłem czarnej izolacji.

Cała elektronika sprowadza się w zasadzie do procesora Atmega8A taktowanego kwarcem 16 Mhz (odciągnięty przez 2 kondensatory 15pF do GND). To właśnie na tym układzie spoczywa cała odpowiedzialność dotycząca dokładności zegara ,bowiem nie użyłem zegara czasu rzeczywistego (co to za robienie zegara jak się używa układu, który już sam w sobie jest zegarem Wink ). Tak na prawdę powodem takiego stanu rzeczy była chęć jak największego uproszczenia płytki PCB. Napięcie pobieram z ładowarki od telefonu - jest ono następnie stabilizowane przez popularny stabilizator 5v. Filtracją przy stabilizatorze zajmują się 2 kondensatory 220 uF ;przy scalonym czujniku ir (TFMS 5560 na 56khz - jak sama nazwa wskazuje) zastosowałem 4,7 uF; przy procku 100nF.
W pilocie użyłem natomiast Attiny13A taktowanego częstotliwością 4,8 Mhz (aby marnowało się mniej prądu). Ma on za zadanie generować sygnał ir z częstotliwością 56khz. Do zasilania użyłem pastylkowej baterii 3v. Obudowa składa się z 2 pomalowanych na czarno płytek pleksi oklejonych po bokach izolacją.

Zliczanie sekund odbywa się w przerwaniu (z preskalerem równym 1024).
16 000 000 / 1024 = 15625
65535 to maksymalna wartość timera, ale przerwanie następuje dopiero gdy timer się "przekręci" więc doliczamy jeszcze jeden.
65535 + 1 - 15625 = 49 911 ( wychodzi 49 911 - w praktyce działa dokładniej przy wartości 49 910 i taką też mam aktualnie wgraną do procka).
Przy wartości 49911 uzyskałem dokładność 4s / 12h pomiędzy godziną 24 a 12( a więc średnia temperatura utrzymała się na poziomie przeciętnym - trochę w nocy/ trochę w dzień) - zgonie z http://linker2.w.interia.pl/pliki/zegar.htm
Później ustawiłem 49910 i uzyskałem dokładność niemal idealną (na 12h według zegara online) dzięki czemu mój zegarek już nie ustępuje przeciętnym zegarkom w tej kwestii.
Z obliczeń wynika że wpisanie do timera jeszcze mniejszej wartości spowodowało
by zbyt duży odchył i zegar zaczął by się późnić zamiast spieszyć. Uznając jeszcze, że w zimie kwarc może zacząć działać nieco wolniej zdecydowałem się  użyć wartości 49910.

Zdecydowanie najdłuższą fazą budowy było pisanie programu. Szybko wypełniłem całe 8kb wolnego miejsca i zdecydowanie większość czasu spędziłem nad optymalizacją kodu tak żeby upchnąć w niego jeszcze funkcje RGB, polskie znaki, lata przestępne i kila innych rzeczy. Niestety nie zdołałem zmieścić już możliwości zamiany roku "00" na rok zwykły o czym już wcześniej wspominałem. Gdybym mógł dodał bym też opcje która pozwalała by dobrać użytkowniki wartość wpisywaną do timera z poziomu menu tak żeby każdy mógł sobie go uregulować we własnym zakresie . Miałem też pomysł na funkcje "autokorekty" (np. co tydzień) ,którą by sobie mógł użytkownik sam ustawić ,ale tego też nie zrealizowałem.

Programu nie zamieszczę - może kiedyś to zrobię w ramach kursu, ale nie teraz. Schematu w ogóle nie robiłem (wszystko mam w głowie). Mam za to płytkę PCB robioną w eaglu - zamieszczam jej plik w formacie PDF - mogą być jednak pewne problemy z jej "ogarnięciem" bowiem w większości nie korzystałem z bibliotek tylko rysowałem po prostu pady pod dane elementy (jedyne elementy biblioteczne to LCD i procesor). Na płytce na szczęście nie pojawiły mi się żadne błędy ( mimo iż wbrew temu co piszą inni tworzę PCB od zera bez rysowania schematu). Płytka została wykonana domowym sposobem metodą termo transferu. Wzór ścieżek odbiłem na ksero (na śliski papier kredowy) a następnie oczyściłem (wodą i rozpuszczalnikiem) i zmatowiłem laminat. Wzór przeniosłem za pomocą żelazka - używam jakiegoś starego żelazka bez regulacji temperatury. Przykręcam je "do góry nogami" w imadło. Najpierw je nagrzewam ,potem gdy stygnie sprawdzam temperaturę i gdy jest już odpowiednia(kartka żółknie, ale nie pali się) umieszczam na niej płytkę w papierowej kopercie (od niezadrukowanej strony do żelazka) i przygniatam żelaznym klocem. Następnie w ciepłej wodzie z proszkiem do prania odrywam papier od laminatu. Nic nie musiałem poprawiać - gdyby jednak zaszła taka potrzeba używam pisaka wodoodpornego.Płytkę następnie wytrawiłem w roztworze nadsiarczanu sodu (stęż ok. 1 miary na 5 miar wody)Po trawieniu
toner zmyłem rozpuszczalnikiem .Płytka wyszła mi bardzo dobrze, najlepiej z dotychczasowych prze zemnie tworzonych, zapewne dlatego że w odróżnieniu od poprzednich była jednostronna i użyłem zdecydowanie większej grubości ścieżek i padów. Otwory wywierciłem malutką wiertarką za pomocą wiertła 0.8 mm. Do lutowania używałem cyny z kalafonią i dodatkowej kalafonii ,którą nanosiłem pędzlem. Niestety pod procesor musiałem użyć zwykłej podstawki ,bo taką akurat dostałem w sklepie. Podobnie wykonałem płytkę do pilota.

Poniżej zamieszczam zdjęcia z budowy: 



 


A tutaj już widzimy gotowy pilot i zegar:



 Opinie kolegów z forum "elektroda.pl" zmobilizowały mnie do usunięcia izolacji w zegarku i pilocie. Nową obudowę wykonałem z pomalowanej na czarno blachy. Teraz urządzenie prezentuje się w następujący sposób:






 Projekt został też opisany na forum elektroda.pl. W opisie na tejże stronie (OPIS) istnieje możliwość bezproblemowego pobrania płytki PCB w formacie PDF. Nic tylko pobierać, spoglądnąć na zdjęcie przedstawiające moją zlutowaną płytkę i ćwiczyć / uczyć się programowania. Zapraszam również do obejrzenia filmu prezentującego działanie tego urządzenia. FILM