Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Radio Internetowe, da się? Da!

Od mojego ostatniego wpisu na blogu upłynęło już wiele wody w Wiśle, i wiele piwa na HotZlocie zostało wypite. Od teraz postaram się zwiększyć aktywność, i tym wpisem chciałbym to zainaugurować. Jest to wpis krótko omawiający powód przez który straciłem wiele czasu i zdrowia, co przeszkadzało mi w pracy nad moim portfolio na dobrychprogramach.

Przez ostatnich kilka miesięcy toczyłem walkę z moją pracą magisterską. Uważam że tematyka projektu nadaje się do podzielenia się tym co udało mi się zrealizować. Urządzenie przeze mnie zbudowane stanowi niezależny odbiornik radia internetowego. Wiem że wśród użytkowników portalu jest też część elektroników dla których ten wpis może być interesującą lekturą, tak więc od początku:

Cele

Temat wybrałem z 2 powodów, po pierwsze tego typu urządzenie wydaje się bardzo ciekawym wyzwaniem, po drugie... kompletnie nie miałem pojęcia jak to zrobić. Moja znajomość interfejsów sieciowych, protokołu TCP/IP, sposobu łączenia się między hostami oscylowała w granicach zera absolutnego. Dodatkowo chciałem zrealizować takie urządzenie na mikrokontrolerze ARM STM32, gdyż wcześniej jakoś nie było okazji aby nauczyć się programować tego typu układy. Miałem więc za zadanie zbudować urządzenie, o którego działaniu nie wiedziałem nic, na bazie platformy sprzętowej z którą nigdy wcześniej się nie mierzyłem. Chciałem być ambitny, czego przez znaczną część czasu spędzonego na realizacji projektu żałowałem :). Zbudowany odbiornik radia internetowego miał umożliwiać połączenie się z dowolną stacją radiową i umożliwić jej komfortowy odsłuch. W miarę możliwości chciałem dodać więcej elementów zwiększających jego funkcjonalność.

Budowa

Całe urządzenie opiera się na mikrokontrolerze ARM STM32F4 który zainstalowany jest na płytce DISCOVERY. Do niego dołączone są inne moduły dzięki którym możliwe jest połączenie z Internetem, słuchanie stacji jak i sterowanie pracą urządzenia. Schemat połączeń przedstawia rysunek:
Aby urządzenie posiadało dostęp do Internetu, mikrokontroler obsługujący warstwę łącza danych MAC musi mieć podłączony układ realizujący warstwę fizyczną PHY. To za jego pośrednictwem dane są przesyłane między światem a urządzeniem. Drugim kluczowym elementem w moim projekcie jest sprzętowy dekoder formatów audio. Dzięki niemu mogę odebrany strumień MP3 lub AAC zamienić bezpośrednio na dźwięk :) Możecie się zapytać czemu nie użyłem software'owego dekodera MP3 i AAC, rozważałem to rozwiązanie, jednak po próbach użycia dekodera MP3 zauważyłem ze znaczna większość stacji przesyła strumień AAC, dokładanie drugiego dekodera, tworzenie 2 konfiguracji i zapanowanie nad tym w programie wbudowanym przy ograniczonym czasie na realizację wydał mi się odrobinę karkołomny. Używając sprzętowego dekodera MP3 i AAC w jednym zaoszczędziłem sporo czasu na programowanie, a przy okazji odciążyłem mikroprocesor o jedno zadanie. Dodatkowo dorzuciłem gniazdo karty SD. Dzięki niemu, można za pomocą pliku tekstowego wrzucić własną listę adresów stacji internetowych które będzie można odsłuchiwać przez urządzenie. Ostatnia część to wyświetlacz z kultowego telefonu NOKIA 3310 (Podziękowania dla kolegi zigguard za poświecenie swojego egzemplarza w imię nauki!) i 4 przyciski służące do kontroli głośności i zmiany odtwarzanej stacji internetowej. Całe urządzenie scaliłem używając płytki głównej którą zaprojektowałem i wykonałem.

Oprogramowanie

Nie będę szczegółowo opowiadał o tym co się dzieje w oprogramowaniu, jeśli macie pytanie to chętnie odpowiem w komentarzu. Cały kod urządzenia został napisany w języku C i skompilowany przy użyciu kompilatora armgcc. Do pisania i debugowania użyłem środowiska CooCoox które jest całkiem niezłym środowiskiem programistycznym do mikrokontrolerów ARM zbudowany na popularnym Eclipse. Pakiet umożliwia utworzenie projektu na platformę STM32F4 Discovery dzięki czemu po kilku kliknięciach mamy w pełni skonfigurowane środowisko. Program urządzenia jest własnym tworem, nie korzystam w działaniu oprogramowania z żadnego systemu operacyjnego typu RTOS. Obsługa sieci realizowana jest dzięki wykorzystaniu biblioteki lwIP. Program główny obsługuje funkcje biblioteki wywoływane okresowo w przerwaniach, oraz cały przepływ odebranych danych do dekodera audio. W programie obsługiwane jest łączenie się z nowym serwerem, podejmowane są działania związane ze zmianą stacji, odświeżanie informacji na wyświetlaczu i kontrola wciśniętych przycisków wraz z odpowiadającymi im akcjami do wykonania przez radio. Podczas odtwarzania stacji, odtwarzany strumień przesyłany jest do dekodera audio, i jednocześnie sprawowany jest nadzór nad pojawianiem się metadanych. Metadane to informacje tekstowe wtrącane w strumień audio zawierające dane o aktualnej audycji bądź tytuł piosenki i inne poboczne informacje które radio może przesyłać. Tego typu dane należy przetworzyć, i wyciąć z właściwego strumienia audio.

Działanie

Teraz wisienka na torcie, działanie urządzenia. Na samym końcu zamieszczam film prezentujący pracę urządzenia. Niestety w trakcie prac rozwojowych uszkodził mi się moduł dekodera audio i musiałem go zastąpić innym przez co widać plątaninę kabli które łączą moduł z innym modułem (rozkład pinów nie zgadzał się niestety z oryginalnym). Urządzenie niestety ma jedną wadę której nie da się przeoczyć. Po przełączeniu stacji pierwszych kilka sekund odtwarzany jest bardzo poszarpany dźwięk. Wiem czym jest to spowodowane, jednak nie zdążyłem ostatecznie tego wyeliminować, a terminy goniły... w końcu projekt to nie wszystko, trzeba by jeszcze pracę napisać :) Dzisiaj wiem że kilka rzeczy zrobił bym inaczej, teraz zaprojektował bym już obwód pcb aby całość miała jednocześciową budowę, a program nieco przebudował aby poprawić odtwarzanie. Jednak tego nie zrobię, bo w kolejce czeka już kilka nowych projektów które ze względu na ten specjalny musiały być ciągle odkładanie, a takie radio... było ciekawym wyzwaniem przy którym na prawdę wiele się nauczyłem, i wiem że wiedza zdobyta przy jego budowie nie raz pomoże mi w przyszłości :)

I obiecany film z działającym urządzeniem:

Jeśli ktoś by się zastanawiał to tak, dnia 3.10.2013 roku zostałem magistrem :) 

sprzęt internet hobby

Komentarze

0 nowych
cyryllo   17 #1 07.10.2013 23:00

@Maniek_88 Gratki :)
Projekt ciekawy :)

dragonn   11 #2 07.10.2013 23:11

Czepki z głów - po przeczytaniu tytuł pomyślałem że będziemy mieli do czynienia z R Pi - co by nie było wcale dużym wyczynem zrealizowanie czegoś takiego na tym :P. Ale STM - chylę czoła, szacun :D. Sam kiedyś też nad czymś takim myślałem - ale od roku już nie słucham żadnego radia internetowego.

Songokuu   14 #3 07.10.2013 23:16

Już ci gratulowałen na G+ ale co tam zasłużyłeś :)
GRATULACJE obrony magistra no i samego projektu.

surma   2 #4 08.10.2013 04:57

Noo, to do pełni szczęścia brakuje jeszcze strony internetowej do konfiguracji stacji radiowych oraz appki na Androida do zdalnego sterowania :>

djDziadek   17 #5 08.10.2013 07:11

No @Maniek_88 - jestem pełen podziwu, nowy SJ nam rośnie :P
Pamiętaj, że prawo patentowe jest skomplikowane ;)

  #6 08.10.2013 07:30

dr inż. Piotr Kłosowski. Brzmi znajomo. :D

Maniek_88   9 #7 08.10.2013 07:32

@surma myslalem o stronie do konfiguracji, tylko potem stwierdzilem ze bez sensu do konfiguracji uzywac komputera ktory sam w sobie moze po prostu odtwarzac radio, to tak jakby w samochodzie osobowym udostepniac mozliwosc zamawiania taksowki (niby w niektorych przypadkach bylo by to uzyteczne, to tak na prawde nie widac sensu:p)

wojtekadams   18 #8 08.10.2013 09:26

@Maniek_88
jednak dałeś rade sam :) Gratulacje

Samurai   16 #9 08.10.2013 09:41

@Maniek_88
Gratulacje obrony magistra, a sam projekt ciekawy :)

Axles   17 #10 08.10.2013 10:00

No to gratulacje jeszcze raz. Warto jeszcze dodać, że Maniek w piątek w Katowicach stawia wszystkim co się pojawią browca :P

LonngerM   12 #11 08.10.2013 10:08

Panowie czapki z głów:) Gratuluję obrony magistra i ambitnego projektu:)

Maniek_88   9 #12 08.10.2013 10:10

@Axles bo nam sie HotZlot nieformalny zrobi jak sie dowiedza ze piwo darmowe:p

Over   9 #13 08.10.2013 11:00

@Axles
Cichoo to jest tajemnica ;)
Maniek_88
Już ci gratulowałem ale się powtórzę :)
Ambitnie podszedłeś do tematu, no i bardzo dobrze bo ludzi kreatywnych jest coraz to mniej..

Maniek_88   9 #14 08.10.2013 11:55

@Over a co, boisz sie ze dla Ciebie darmowego piwa braknie?? :p

Samurai   16 #15 08.10.2013 12:14

@Maniek_88, Axles i Over
Można się przyłączyć w piątek do spotkania?

PAMPKIN   11 #16 08.10.2013 13:41

A Trójka?

  #17 08.10.2013 13:43

To trzeba mieć wielki łeb !!!

PAMPKIN   11 #18 08.10.2013 13:53

Szacunek bo troszkę oprogramować trzeba te klocki, choć dupy nie urywa. Klocki standardowe. Opisałeś, że wiesz dlaczego rwie dźwięk itp, to dlaczego nie zbuforowałeś danych. Siła tego projektu powinna tkwić w oprogramowaniu, platforma której użyłeś ma dużo większe możliwości. Sprzęt to pospinane klocki i tyle, równie dobrze można by to zrobić na jakiejś większej ATmedze. Wygląda na szybki projekt!

Ogólnie mi się podoba! Pozdrawiam

Dimatheus   22 #19 08.10.2013 13:59

Hej,

Gratulacje, Maniek. Trzeba będzie to oblać przy najbliższym spotkaniu soczkiem jabłkowym - a spotkanie już za kilka dni. :)

Pozdrawiam,
Dimatheus

Maniek_88   9 #20 08.10.2013 17:24

@Pampkin
Opisałem że wiem dlaczego, i własnie nie chodzi o zwiększenie buforowania, a przepełnienie bufora. Protokół radia internetowego po wysłaniu żądania danych zaczyna wysyłanie danych od nagłówka z którego muszę odczytać kilka ważnych dla działania urządzenia danych, w tym momencie kolejne dane są już wysyłanie i zapełnienie 50kb bufora następuje błyskawicznie. A wśród danych w buforze znajdują się jeszcze metadane których miejsc występowania nie mogę zgubić. W związku z tym muszę początkowo wyrzucać część danych z bufora żeby się nie zgubić, ale robić to z głową żeby się nie zgubić bo wtedy już będzie kompletny klops. Po kilku sekundach układ dochodzi do równowagi nie gubiąc metadanych i odtwarzając stabilnie dźwięk. Rozwiązań jest kilka, wymyślić szybszą metodę wyszukiwania w nagłówku ważnych informacji aby działo się to szybciej, opóźnić rozpoczęcie odtwarzania stacji (ew wyciszyć na czas aż nie dojdzie do równowagi), bądź znaleźć lepszy algorytm kontroli przepełnienia bufora. Tak jak mówiłem to był mój pierwszy projekt na STMie, wcześniej robiłem najwyżej proste układy na atmedze, i tak na prawdę na tym projekcie uczyłem się ARMów i protokołów sieciowych. Aczkolwiek żadna ATMEGA wg mnie by tego nie pociągła :) Dodatkowo presja czasu związana z potrzebą napisania pracy spowodowała że nie miałem już czasu na dalsze eksperymenty.

Maniek_88   9 #21 08.10.2013 17:25

Troche nieskładny ten komentarz, ale nie da się komentować :/
@Samurai, naturalnie zapraszamy :)

Maniek_88   9 #22 08.10.2013 17:25

-nie da się edytować, coś ze mną nie tak :)

clubber84   5 #23 08.10.2013 20:14

@Maniek_88
"Rozwiązań jest kilka..."
A właśnie, przyjrzyj się softwarowe'ym aplikacjom do odtwarzania radia internetowego - początki odtwarzania stacji radiowych są wyciszane do momentu wyszukania potrzebnych danych do odtwarzania danej stacji (metadane, strumień danych audio, itp) i dopiero zaczyna się odtwarzanie stacji - wtedy dźwięk jest już ustabilizowany i wszystkie dane odczytane przez dekoder.

Projekt świetnie się zapowiadający - jeszcze kilka tygodni pracy i byłby idealny stacjonarny odtwarzacz internetowych stacji radiowych :D

Gratuluję obrony i życzę dalszych sukcesów w tworzeniu m.in. takich jak w/w projektów.

Pozdrawiam

Maniek_88   9 #24 08.10.2013 21:01

@clubber84 Wiem że wiele rzeczy jeszcze trzeba by poprawić, dużo defektów wynika z tego że pracę programu zrealizowałem po swojemu, i domniemam że odpowiednia optymalizacyjna znacznie zwiększyła by wydajność :)

GBM MODERATOR BLOGA  20 #25 09.10.2013 18:42

Brawo za podjęcie wyzwania :)

Swoją drogą, jakbyś fajną obudowę na to zrobił - to nawet i sprzedawać byś mógł ;> (sam bym chętnie sprawił sobie taki przydatny gadżet :P)

PAMPKIN   11 #26 10.10.2013 11:23

Maniek_88
"Aczkolwiek żadna ATMEGA wg mnie by tego nie pociągła :) " nie żebym się czepiał, ale sprawdź sobie AVT-6242 z 2010 roku. Wprawdzie to nie ATmega tylko PIC ale są zbliżone 8-bit 10MIPS!

AndrzejG   10 #27 10.10.2013 11:28

Ile zł wyniósł łączny koszt projektu?

PAMPKIN   11 #28 10.10.2013 11:59

Wg mnie to koszta

http://kamami.pl/index.php?ukey=product&productID=185132 89 zł

http://kamami.pl/index.php?ukey=product&productID=179457 99 zł

http://allegro.pl/vlsi-vs1053-dekoder-mp3-wma-aac-midi-nowy-f-ma-i3570251594.html 80 zł

wyświetlacz około 20 zł laminat/wytawiacz cynowanie 30 zł

+ koszty przesyłek

oprogramowanie bezcenne

PAMPKIN   11 #29 10.10.2013 12:00

@Maniek_88
Moja pomyłka, chodzi o AVT-5242!

  #30 11.10.2013 09:54

Gliwice! Swój chłop :D Pewnie Polibuda :)

Maniek_88   9 #31 12.10.2013 11:48

@PAMPKIN
Nie sprzeczam się, może ktoś by potrafil zrobić to na Atmedze, ja wolałem zrobić na STMie. Zdaje sobe sprawę że wiele rzeczy mogło być obsłużone dużo optymalniej ale tak jak napisałem, był to mój pierwszy tak zaawansowany projekt który robiłem na STMie. Tak na prawdę na tym projekcie uczyłem sie STM'ów i obsługi sieci.
@AndrzejG
Co do kosztów, same koszty tego urządzenia to mniej więcej to co napisal PAMPKIN, cały proces projektowy w którym kilkukrotnie zmieniałem koncepcje przez co straciłem trochę pieniędzy i czasu i musiałem kupować dodatkowe elementy wycenił bym w sumie na 1000 zł chociaż tego tak na prawdę nie liczyłem. Samo to że układ z dekoderem VS do którego link podał PAMPKIN zepsuł mi się 2 razy i musiałem go zakupić 3krotnie to już około 250 zł. No niestety samodzielna praca projektowa osoby bez dużego doświadczenia generuje dużo kosztów, przy okazji... mam pomysł na kolejny wpis :)

Maniek_88   9 #32 12.10.2013 11:48

@luckiblueee
Chyba Cię zawiodę... jestem z Sosnowca :P ale fakt, studiowałem w Gliwicach :)

Maniek_88   9 #33 12.10.2013 12:02

@PAMPKIN
Zobacz co w tym kicie AVT jest jeszcze bo akurat w pracy magisterskiej opisywałem też krótko tą realizację. Do Atmegi bym tego za bardzo nie porównał ale wg uznania :) Po pierwsze 1Mb pamięci flash (nie wiem która Atmega ma tyle), zintegrowana obsługa warstwy fizycznej w picu (w atmedze trzeba by dołaczyć coś w stylu ENC28j60 na SPI które też powinno chodzić dosyć szybko zeby odbierać dane). Dodatkowo jednocześnie Atmega potrzebowałaby drugiego dosyć szybkiego SPI żeby nadążyć wysyłać dane do dekodera (w moim projekcie SPI jest taktowane 8MHz). Jeszcze sam układ który zaproponowałeś posiada dodatkowe 2 pamięci RAM bo procek nie ma wystarczająco pamięci na obsługę TCP/IP (również podpięte na SPI). Maksymalna częstotliwość taktowania rdzenia w PIC 41.667 Mhz przy czym z tego co pamiętam (mogę się mylić) w nielicznych ATMEGAch max było 24 MHz. Oprogramowanie tego, obsługa TCP/IP + zrobienie jakiegoś interfejsu na ATMEGA wydaje mi się mimo wszystko karkołomnym zadaniem. Na Atmegach co najwyżej można zrobić prosty serwer HTTP gdzie nie ma wymagania co do prędkości, co najwyżej strona będzie się długo ładowała jesli procek będzie za wolno wysyłał dane. A w radiu nie można sobie pozwolić na jakiekolwiek opóźnienia bo jeden błąd i odtwarzanie się sypie :)

kodijak   6 #34 14.10.2013 21:13

Ile kosztuje telefon z Androidem? Sztuka dla sztuki.

TomaszK-Poz   8 #35 15.10.2013 00:24

@Maniek_88
Mysle, ze mniejsze ATMega (te 8 bitowe) poradziloby sobie; gdzies w necie krazyl projekt mp3, a radio internetowe to w skrocie siec + mp3 (czy jakas inna kompresja).

@kodijak
Dawno temu robilem podobny projekt na 8 bitowej ATMega + pamięć szeregowa + LCD 2x16 + ADC na RS232 (takie warunki).
Niezle się wk**wialem na drobiazgi: a to na początku pomyliem rozkład nozek z wersja zgodna z 8051, albo układ był czuly na wylaczanie lampki na biurku. Musialem się trochę nauczyć Protela bo plytki robilem od zera. Soft pisałem w gcc w Eclipcie z jakims uwalonym pluginem cdt (pokazywal rejestry 32 bity) lacznie z wstawkami asemblerowymi. Do tego doszedł soft w Borland C++ na WIndows.
Po obronie calosc wyladowala gdzies ma dole szafy w instytucie.

Wracajac do tematu - masz racje i nie masz racji.
Masz, bo to trochę bez sensu (i wtedy tez tak rozumowałem) wywazac otwarte drzwi.
Nie masz racji, bo skoro temat był w stylu zbudować z mikroprocesora i czegos tam, to chodzilo o proces zbudowania takiego urządzenia a nie wyklikania apki, gdzie szczegoly (boot loader, timery sprzętowe, PWM, watchdog, wyjątki przy braku wyrównania słowa) ukrywa OS.

Ale to nic - mój brat na metrologii miał zbudować radio bezbateryjne (cos jak w latach 20-tych zeszłego wieku). Jaja jak berety - poszukiwanie dobrej diody germanowej a jeszcze lepiej detektora kryształkowego, metry kabla w pokoju...

Echhh polska nauka...

AndrzejG   10 #36 16.10.2013 16:06

@Maniek_88 @Pampkin
Dzięki!

@Maniek_88
Szczerze mówiąc (tak odnośnie Twojego pomysłu na następny wpis) proces projektowy, te błędy i potknięcia wydają mi się bardziej interesujące niż prezentacja działającego urządzenia ;)

Maniek_88   9 #37 18.10.2013 19:35

I właśnie planuję opisać to w najbliższym czasie, na przykładzie tego rpojektu :) Tyle że będzie to dłuuuuuuuugi wpis :)

  #38 08.03.2014 12:05

http://www.elektroda.pl/rtvforum/topic2513268.html
Nie obyło się bez małej pomocy na elekrodzie :P

michal.d98   8 #39 08.03.2014 12:06

http://www.elektroda.pl/rtvforum/topic2513268.html
Nie odbyło się bez małej pomocy :P

Maniek_88   9 #40 08.03.2014 12:21

Trzeba sobie jakoś radzić :)