Radiobudzik

Napisano dnia 16.04.2014 r. o godzinie 20:47
Autor: Piotr Sperka

Radiobudzik podczas słuchania radia

Wstęp

Pod koniec 2013 roku kolega poprosił mnie o pomoc w wykonaniu budzika. Początkowo miał być bardzo prosty, jednak po pewnym czasie projekt rozrósł się o dodatkowe funkcje. Skończyło się na zegarze z datą i budzikiem z drzemką. Jak dzwonek może służyć dowolny plik WAV zamieszczony na karcie pamięci microSD z systemem plików FAT lub radio FM odbierane dzięki układowi TEA5767. Ponadto radio może być słuchane także podczas normalnej pracy (nie tylko podczas budzenia). Kolega zajął się zaprojektowaniem, wykonaniem i montażem płytki, natomiast ja podjąłem się napisania programu dla mikrokontrolera oraz pomagałem przy powstawaniu schematu.

Układ

Sercem całego urządzenia jest mikrokontroler AVR ATmega168A. Do odtwarzania plików WAV wykorzystano wewnętrzny PWM, z którego sygnał przechodzi przez prosty filtr RC i trafia do analogowego multipleksera CD4052. Umożliwia on wybór źródła dźwięku – PWM lub układu TEA5767 będącego scalonym tunerem FM. Dalej sygnał poprzez prosty ośmiobitowy potencjometr cyfrowy MCP41010 trafia do scalonego wzmacniacza LM4889. Wzmacniacz ten powinien teoretycznie – zgodnie z danymi z karty katalogowej – osiągać moc maksymalną 1W przy zasilaniu 5V oraz obciążeniu 8Ω. Jako przetwornik dźwięku został użyty miniaturowy głośnik o impedancji 8Ω i średnicy około 1,5cm. Okazało się, że zapewnia on głośność wystarczającą do obudzenia, czy też słuchania radia w niezbyt głośnym otoczeniu. Jakość dźwięku można porównać z głośnikami w tanim laptopie – nie jest ani powalająca, ani też nie można powiedzieć, że kaleczy uszy (w każdym razie i tak przeszła moje oczekiwania). Okazało się, że dla głośności oraz jakości dźwięku kluczowe jest ułożenie miniaturowego głośnika – membraną do twardej powierzchni (ścianki obudowy czy na przykład blatu biurka). Ponadto w układzie można znaleźć jeszcze układ DS1307 wraz z baterią podtrzymującą. Jest to scalony zegar z kalendarzem. Posiada on także, bardzo w tym wypadku przydatną, podtrzymywaną pamięć RAM o pojemności 56 bajtów. Przechowywana jest w niej konfiguracja urządzenia.

Program

Program został napisany w języku C przy użyciu AVR Studio 6. Zajmuje on 90% pamięci flash oraz 75% pamięci RAM. Pozostawia to pewną możliwość drobnego rozszerzania funkcjonalności urządzenia. Do obsługi systemu plików FAT został użyty Petit FatFS (http://elm-chan.org/fsw/ff/00index_p.html) doskonale nadający się to tego typu niewielkich urządzeń z mocno ograniczonymi zasobami systemowymi – głównie chodzi tu o pamięć RAM. Jest to zarazem jedyny „zewnętrzny” kod użyty w programie – całą resztę napisałem samodzielnie. W głównej pętli ,wspomaganej przez Timer1 odpowiedzialny za odmierzanie czasu, program pięć razy na sekundę sprawdza przyciski oraz, w razie potrzeby, odświeża ekran. Ponadto, jeżeli jest odtwarzany plik WAV, sprawdza, czy potrzeba wczytać nową porcję danych z karty i, jeżeli tak, wczytuje ją. Dane są wczytywane na zmianę do jednego z dwóch buforów (256 bajtów każdy) – do jednego są wczytywane, podczas, gdy z drugiego są odtwarzane. Odtwarzanie odbywa się w przerwaniu Timera1 wstępującego z częstotliwością 22050Hz. Taką też częstotliwość próbkowania powinny mieć pliki WAV na karcie pamięci. Na pewną uwagę zasługuje nietypowe podłączenie klawiatury składającej się z czterech przycisków – poprzez dzielnik rezystorowy do przetwornika A/C. Takie rozwiązanie pozwoliło zaoszczędzić piny, których brakowało. Funkcje przycisków nieco zmieniają się zależnie od tego, w którym miejscu program się znajduje, i tak:

  • Podczas wyświetlania ekranu głównego można wyświetlić menu, włączyć radio lub zmienić głośność
  • Podczas słuchania radia można zmienić stację (jedna z czterech zaprogramowanych), wyłączyć radio lub zmienić głośność
  • Podczas dzwonienia można zmienić głośność, włączyć drzemkę lub wyłączyć budzik
  • W menu można przejść dalej, zmienić pozycję (góra-dół) oraz wyjść do ekranu głównego

Menu urządzenia posiada następujące pozycje:

  • Ustaw budzik
    • Ustaw budzik – dzwonek to plik WAV
    • Ustaw radio – jako dzwonek służy radio
  • Czas drzemki
  • Zmień dzwonek – pozwala wybrać plik WAV z karty pamięci
  • Ustawienia FM – pozwala ustawić częstotliwość każdej z czterech stacji
  • Data i godzina
  • Jasność ekranu – pozwala wybrać jasność ekranu lub ustawić ją na automat (fotorezystor)

Podsumowanie

Cały program został podzielony na wiele plików tak, aby łatwo było znaleźć interesujące nas funkcje. Program nie jest ciągle do końca przetestowany, ponieważ urządzenie chyba jeszcze nie doczekało się obudowy umożliwiającej normalne użytkowanie, jednak przez czas, gdy było u mnie, nie zaobserwowałem żadnych problemów. Można więc stwierdzić, że urządzenie spełnia postawione przed nim zadania. Poniżej zamieszczam kod programu wraz z plikami hex, a także kilka zdjęć – zaznaczam, że nie jestem autorem zdjęć ani płytki. Jest ona trochę chaotyczna (może nieco przerażać ilość zworek), jednak po kilku drobnych poprawkach działa, a trzeba mieć na uwadze, że była to pierwsza płytka zaprojektowana przez kolegę. Na zdjęciach na wyświetlaczu widoczne są ciemne prostokąty pod znakami – jest to wina źle wyregulowanego kontrastu (potencjometr do regulacji znajduje się na płytce). W razie jakichkolwiek pytań z chęcią na nie odpowiem.

Zdjęcia oraz pliki do pobrania

Schemat w pliku PDF

Program (plik hex oraz kod)

Radiobudzik podczas słuchania radia Radiobudzik - zmiana głośności Radiobudzik - menu Radiobudzik - menu Radiobudzik - płytka Radiobudzik - płytka od strony ścieżek