Na rynku możemy znaleźć kilka malutkich i tanich odbiorników FM, miedzy innymi TEA5767. Te, umożliwiają nam w bardzo prosty sposób odbieranie częstotliwości radiowych, bez potrzeby budowy zaawansowanych obwodów elektronicznych.
Tutaj chciałbym przedstawić jak wykonać takie proste radyjko w oparciu o wspomniany moduł TEA5767 i mikrokontroler ATtiny85. Postawiłem na attiny ze względu na niewielkie rozmiary.
attiny85 FM radio – zamysł
Sterować wszystkim będzie mikrokontroler ATtiny85, na którym zaimplementowana, programowa magistrala I2C realizować będzie komunikację z modułem odbiornika FM, oraz wyświetlaczem OLED. Ja wykorzystałem OLED o wymiarach 128×64, jednak znacznie estetyczniejszym rozwiązaniem będzie 128×32. Zobacz wpis dotyczący wyświetlaczy oled.
Do ustawiania częstotliwości posłuży enkoder obrotowy, taki klasyczny z wbudowanym micro-switchem. Potrzebny będzie głośnik/i i odpowiedniej mocy wzmacniacz. Ja dobrałem niewielki głośniczek 1W i wzmacniacz oparty na module PAM8403.
Schemat połączeniowy
Poniżej przedstawiam schemat. Pomyliłem wartości kondensatorów, te bez polaryzacji mają wartości w pF – nie mF.
Istotne jest włączenie kondensatora elektrolitycznego (100uF) między wyprowadzenie BUSMODE (które podpinamy do GND) i VCC. Wydaje mi się, że nie powinno być problemu z odwzorowaniem schematu. Nie dorysowalem tutaj wyświetlacza OLED, chociaż jego włączenie do obwodu jest banalnie proste.
Wyjścia modułu TEA5767 podpisane jako LOUT i ROUT to wyjścia audio – je podpinamy do wzmacniacza, z kolei do wyjścia ANT wystarczy podpiąć jakiś przewód, który będzie pełnił rolę anteny.
Tak u mnie wygląda zlutowany obwód. Wykonałem to na płytce uniwersalnej by osiągnąć jak najmniejszy rozmiar. Mikrokontroler jest zamontowany w podstawce. W niedalekiej przyszłości chciałbym ten projekt wzbogacić o płytkę PCB.
Programowanie ATtiny
Ostatnim krokiem będzie zaprogramowanie mikrkontrolera. Jeszcze na samym początku, wspomnę że programowa implementacja magistrali I2C została przedstawiona w tym wpisie…
Taktowanie mikrokontrolera ustawiłem na wewnętrzny oscylator 8MHz. Wystarczy w następujący sposób ustawić fuse bit’y.
avrdude -c usbasp -p t85 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
Teraz wystarczy wgrać kod. Całego tutaj nie będę wklejał, udostępniłem go jednak na githubie, pod poniższym linkiem:
https://github.com/mcinm/attiny85_fm_radio
Znajdują się tam pliki biblioteki programowego I2C, oraz prostej biblioteki obsługującej wyświetlacz, która korzysta jeszcze z pliku „font.h” gdzie zdefiniowana została czcionka cyfr, które dodatkowo zostały zaopatrzone w atrybut PROGMEM, dzięki czemu, dane te zostaną zapisane w pamięci flash.
W pliku „main.c” znajdziemy tylko główną funkcję programu, obsługę przerwania INT0, oraz funkcje obsługującą moduł TEA5767 i aktualizującą wyświetlacz. Wzór znajdujący się w funkcji „set_frequency” został skopiowany z dokumentacji TEA5767.
Obsługa przerwania, zawiera kod, który inkrementuje/dekrementuje zmienną hz przechowującą częstotliwość. Natomiast pętla główna, aktualizuje wyświetlacz – jeżeli pojawiła się jakaś zmiana i sprawdza czy został wciśnięty przycisk enkodera. Wtedy ustawia częstotliwość.
Poniżej wstawiam film z działaniem radia. Był on dodany w pierwotnej wersji projektu i płytka jest tutaj trochę większa.
Podsumowanie
Z pewnością potencjał projektu nie został do końca wykorzystany. Jestem jednak bardzo zadowolony, że udało mi się upchnąć to wszystko w tak maleńkim mikrokontrolerze. Teraz celem będzie wykonanie profesjonalnej płytki PCB, na której będą wszystkie komponenty włącznie z modułem wzmacniacza i zasilanie urządzenia z akumulatora. Dobrze też byłoby wydrukować jakąś obudowę.
Dodaj komentarz