Chciałbym przedstawić konstrukcję, która nie wnosi do świata elektroniki zupełnie nic nowego ponad standardowe połączenie kilku elementów, która powstała dla zabawy i żeby ładnie wyglądała, czyli zegarek binarny.
Założeniem była budowa zegarka z widocznymi wszystkimi elementami i zasilanego z portu USB (ot tak).
Elementy kluczowe
1. ATMega8A
2. DS1307
3. 21 diodek LED
4. Widoczna na zdjęciu drobnica
Diody LED podłączone w matrycę 3x7, multipleksowanie z częstotliwością 1kHz.
Przerwanie wykorzystane też do debouncingu.
Odczyt godziny z zegarka synchronizowany przerwaniem.
Funkcje
1. Wyświetlanie godziny
Nic dodać, nic ująć
2. Alarm (i jego programowanie)
Tu oprócz programowania ciekawa funkcja - aby wyłączyć alarm musimy wybrać przycisk wskazany przez podświetlony blok diod LED - za każdym razem wybierany jest losowy przycisk na podstawie szumu z ADC.
Sygnalizacja dźwiękowa standardowym "buzzerem".
3. Ustawianie godziny
Patrz pkt. 1
4. Automatyczna lub ręczna regulacja jasności.
Co bardziej spostrzegawczy zauważyli pewnie fotorezystor. Jest on częścią dzielnika napięcia na podstawie którego procesor określa natężenie światła. Dzięki temu zegarek w ciemnościach świeci ciemniej, a w pełnym słońcu jaśniej - tak by nie razić ale być czytelnym.
Gdyby regulacja automatyczna mi nie odpowiadała mogę włączyć ręcznie jeden z 8 poziomów jasności.
Wykonanie
Płytka wykonana w Satland'zie.
Koszty całości, gdybym nie miał 90% części wyniosły by około 100 zł.
Ostatecznie zegarek cieszy oko i spełnia swoje zadanie. Jak wspominałem to nic odkrywczego - po prostu projekt wykonany dla zabawy, ale miło się patrzy na coś co nie jest moim kolejnym projektem z milionem układów i wykonanym komercyjnie lub do zadań laboratoryjnych.
Oprogramowanie
Oprogramowanie powstało w języku C w środowisku Atmel Studio 6.1.
Większość funkcji realizowana jest w przerwaniu timera1 wywoływanego z częstotliwością 1kHz, a mianowicie odświeżanie matrycy LED oraz obsługa menu wraz z eliminacją drgań styków i obsługą kliknięcia i przytrzymania przycisków.
Flaga przerwania zewnętrznego wykorzystywana jest do wyznaczania momentu odczytu czasu z zegarka DS1307.
Timer pracuje w trybie CTC, więc częstotliwość reguluję rejestrem OCR1A. Dodatkowe przerwanie "OCR1B" wykorzystuję do wcześniejszego wygaszenia diodek, więc dzięki temu uzyskuję efekt PWM.
ADC pracuje w trybie free run cały czas na tym samym kanale z podpiętym dzielnikiem z fotorezystorem. Dane te są wykorzystywane do regulacji jasności a najmłodsze bity do losowania przycisku kasującego alarm.
Dane dotyczące konfiguracji (ustawienie alarmu, tryb regulacji jasności i poziom jasności ustawianej w trybie ręcznym) przechowywane są w wolnych komórkach pamięci RAM układu DS1307, który jest podtrzymywany bateryjnie.
To chyba tyle
Zapraszam do komentowania i zadawania pytań.*
*Poza komentarzami typu: Było, łatwizna... - to już wiem
Fajne? Ranking DIY