Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Odtwarzacz multimedialny oparty na ARM

krsytar 16 Gru 2007 14:19 20424 62
  • Odtwarzacz multimedialny oparty na ARM
    Witam,
    Tym razem mój nieco bardziej zaawansowany projekt od poprzedniego.
    Konstrukcja oparta tym razem na kontrolerze ARM Atmel'a at91sam7s256 z racji tego że spodobała mi się właśnie ta rodzina mikrokontrolerów i sam rdzeń arm7tdmi.
    Wykorzystałem tutaj również własny pomysł na kartę graficzną generującą obraz w PALU (R,G,B, CSYNC), cały sterowaniem zajmuje się kontroler Microchip'a dsPIC30F4013, który generuje adresy do pamięci obrazu (SRAM 512KB o organizacji 256K x 16 bitów, kość SAMSUNGA, czas dostępu 10ns), 16bitowe słowa z pamięci wędrują na przetwornik cyfrowo-analogowy w układzie 5bitów czerwony, 6bitów zielony, 5bitów niebieski, przez co powstaje analogowy sygnał rgb. dsPIC generuje również sygnał CSYNC i zajmuje się pilnowaniem dostępu do pamięci SRAM, czyli w momencie generowania linii obrazu pamięć w trybie odczytu wysyła pixele na przetwornik, a w momencie wygaszenia poziomego, lub pionowego pamięć przełączana jest w tryb zapisu, a dsPIC daje znać głównemu procesorowi ARM, że pamięć jest wolna i można zapisywać do niej dane (bądź odczytywać oczywiście). Układ działa bezproblemu, chociaż nie grzeczy szybkością zapisu danych do pamięci ram, gdyż samo współdzielenie pamięci z jednym portem jest kłopotliwe i wymaga paru buforów 74245 oraz zatrzasków 74575, można było zrobić to na układach FPGA, ale tak było prościej :) Generowany obraz ma rodzielczość do 512x512 pixeli przy 65536 kolorach (dokładnie tyle pomieści pamięć graficzna w mojej karcie, a poza tym nie byłbym w stanie szybciej generować danych na linii adresowej pamięci SRAM :) ), wygląda rewelacyjnie na telewizorach CRT, z LCD i plazmą jest trochę gorzej, ale i tak wygląda super. W samym dsPIC'u zawarłem również automatyczne skalowanie obrazu, czyli mogę ustawić dowolną rozdzielczość w pionie i w poziomie, a układ automatycznie i proporcjonalnie rozciągnie obraz na pełny ekran. Procesor główny ustawiając tryb graficzny podaje zatem szerokość w poziomie, w pionie oraz czy obraz ma być generowany z przeplotem (interlace), czy bez przeplotu, oczywiście z interlacem mamy dwa razy tyle linii obrazu. W przypadku obrazu o aspekcie 4:3 ustawiam rozdzielczość 512x384 i w takiej rozdzielczości wyświetlane są obrazki na telewizorze (screenshot'y poniżej). Tyle może o karcie graficznej

    Samo urządzenie oparte na armie posiada jeszcze kodek audio z wyprowadzonymi wejsciami i wyjsciami liniowymi, słuchawkowym, itd.
    W obecne jfazie układ wyświetlaobrazki w formacie JPEG i BMP (dowolna rozdzielczość, automatyczne skalowanie i trzymanie proporcji obrazu), dekoder jpeg oczywiście napisany własnoręcznie przeze mnie (no za wyjątkiem odwrotnej transformaty cosinusowej IDCT :) źródło wziąłem z internetu)
    Odtwarzane są również pliki w formacie WAVE, oraz MP3 oczywiście dekodowaniem zajmuje się z powodzenie ARM, zaimplementowałem również 3 charakterystyki korektora, poprostu próbki przepuszczam przez filtr FIR. rdzeń arm7tdmi w atmelu radzi sobie spokojnie z dekodowaniem mp3 i obliczaniem filtru FIR w czasie rzeczywistym, jednak musiałem algorytm napisać w assemblerze i trochę podtaktować ARMa na 64 MHz, to maks co udało mi się wycisnąć przy stabilnej pracy układu :)
    Urządzenie czyta karty pamięci MMC/SD do 4GB (32bity adresu) w formacie FAT16 oraz FAT32. Pliki mogą być umieszczone w katalogach, pomiędzy którymi można się spokojnie przełączać.

    Rozwijanie tego projektu sprawia mi dużo przyjeności i mam zamiar oczywiście dorobić ładne menu graficzne z ikonami oraz obsługę USB w trybie pamięci masowej, tak aby pliki można było ładować do karty pamięci nie wyciągając jej z urządzenia. Planuję również dorzucić włąsnoręcznie zrobiony i oprogramowany konroler IDE/ATAPI, aby można było czytać pliki z CD oraz HDD.

    Software dla procesora graficznego napisałem oczywiście w assemblerze ze względu na ścisłe zależności czasowe, które należy zachować generując obraz oraz oczywiście dlatego, że potrzebowałem maksymalnie dużej szybkości, aby wygenerować linie adresu dla każdego wyświetlanego pixela (dsPIC'a troche podtaktowałem do 32MHZ - czyli wydajność 32MIPS)

    Kod główny, czyli dla ARM'a napisałem w C dorzucając kilka wstawek assemblerowych w celu maksymalnej optymalizacji.

    Odtwarzacz multimedialny oparty na ARM

    Odtwarzacz multimedialny oparty na ARM

    Odtwarzacz multimedialny oparty na ARM

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    krsytar
    Poziom 10  
    Offline 
    krsytar napisał 55 postów o ocenie 62, pomógł 0 razy. Mieszka w mieście Warszawa. Jest z nami od 2005 roku.
  • #2
    Villen
    Poziom 21  
    Nic tylko bić pokłony przed twórcą...

    Takie pytanie: programowaniem/mikrokotrolerami zajmujesz sie zawodowo czy to tylko hobby?

    Jaka by odpowiedź nie była to podziwiam, podziwiam...
  • #3
    jgrupa
    Poziom 15  
    Konstrukcja ponad moja skale ocen czyli 7/6 :) Mam pytanie ile sie nad tym "meczyles", jezeli mozna to nazwac meka. Drugie pytanie to ile wydales na te konstrukcje?

    Pozdrawiam

    P.S. Wstaw zdjecie na poczatek.
  • #4
    krsytar
    Poziom 10  
    Villen napisał:
    Nic tylko bić pokłony przed twórcą...

    Takie pytanie: programowaniem/mikrokotrolerami zajmujesz sie zawodowo czy to tylko hobby?

    Jaka by odpowiedź nie była to podziwiam, podziwiam...


    Dzięki serdeczne.
    Mikrokontrolerami zajmuję się od 4 lat czysto hobbystycznie (na początku PIC, potem dsPIC i ostatnio ARM) i najbardziej pochłaniają mnie konstrukcje związane z multimediami, czyli przetwarzanie, wyświetlacznie dźwięku i obrazu. Pisanie programów na peceta to nie sztuka, gdyż wiadomo że dzisiejsze komputery mają niesamowite pokłady mocy obliczeniowej. Natomiast wyciskanie z mikrokontrolerów i własnych konstrukcji tego typu rzeczy jest dużo przyjemniejsze i bardziej satysfakcjonujące. :)
  • #5
    Deepone
    Poziom 22  
    Poprostu niesamowite, ten projekt zrobił na mnie niesamowite wrażanie (tak jak i mp3 player). Świetnie wykonane, dużo pracy musiało kosztować i tutaj odrazu pytanie ile kosztują mniej więcej części by takie coś zrobić?
    Pogratulować zdolności.
    Takie pytanie, jest napisane w opisie karta graficzna generująca obraz w PAL, czy np przewidujesz dołożenia wyjścia np VGA?
  • #6
    krsytar
    Poziom 10  
    jgrupa napisał:
    Konstrukcja ponad moja skale ocen czyli 7/6 :) Mam pytanie ile sie nad tym "meczyles", jezeli mozna to nazwac meka. Drugie pytanie to ile wydales na te konstrukcje?

    Pozdrawiam

    P.S. Wstaw zdjecie na poczatek.


    Tak naprawde to myślałem nad tym intensywnie jakiś rok temu, a konstrukcję i samo programowanie (najpierw proca graficznego) zacząłem około pół roku temu. Najgorzej było oprogramować grafikę, gdyż pierwszy raz tworzyłem coś co generuje obraz telewizyjny, ale potem jak już się udało i zobaczyłem pierwszy śmietnik (odzwierciedlenie danych zawartych w pamięci SRAM) na ekranie to zabawa nabrała tempa.
  • #7
    *seba*
    Poziom 12  
    No no, Suuuuuupppppppeeeeeeeeer

    Odrazu pare pytan:
    Jak moi poprzednicy. 1- Koszt budowy ?
    2- Czy bedziesz udostepnial Schemacik i oprogramowanie ?

    Naprawde Respekt.
  • #8
    Kazimierz123
    Poziom 2  
    piękne cacko ile cali ma tv na fotce
  • #9
    krsytar
    Poziom 10  
    Deepone napisał:
    Poprostu niesamowite, ten projekt zrobił na mnie niesamowite wrażanie (tak jak i mp3 player). Świetnie wykonane, dużo pracy musiało kosztować i tutaj odrazu pytanie ile kosztują mniej więcej części by takie coś zrobić?
    Pogratulować zdolności.
    Takie pytanie, jest napisane w opisie karta graficzna generująca obraz w PAL, czy np przewidujesz dołożenia wyjścia np VGA?


    Z droższych elementów to sam kontroler ATMEL'a at91sam7s256 - zakupiłem gotowy moduł z propox'a MMsam7s (cena 97zł), zaleta - łatwość montażu oraz zinstalowane 4MB flash (przyda mi się jak będę tworzył menu i cały interfejs użytkownika);
    pamięć SRAM 10ns K6R4016c10ns - jakieś 20zł;
    dsPIC - próbka z Microchip'a
    codec TLV320aic23b - próbka z Texas Instruments
    i pozostałe drobne elementy

    Całość wyniosła mnie jokoło 200 zł

    Niestety aby dorzucić wejście VGA to trzeba by zwiększyć pixelclock, gdyż w przypadku obrazu w palu jedna widoczna linia pozioma trwa około 52us - zatem w ciągu tego czasu musze szybko generować kolejne adresy do pamięci SRAM, aby ta wysyłała odczytane z danej komórki słowo 16-bitowe na przetwornik i na ekran (w przypadku 512 pixeli i 32 mipsów procesora, jest to mniej więcej 3 instrukcje na jeden pixel). W przypadku VGA odświeżanie w poziomie jest co najmniej dwa razy większe także nie nadążyłbym generować dwa razy szybciej takiej ilości pixeli. Ale oczywiście używając szybszego procesora można to jak najbardziej wykonać, gdyż samo generowanie obrazu dla monitorów VGA nie różni się prawie niczym od generowania obrazu w PAL, oczywiście nie używalibyśmy już wtedy wybierania międzyliniowego (interlace'u). Przy tym procesorze, którego obecnie używam (32MIPS) generując obraz z częstotliwością poziomą około 31 kHz i odświeżaniem 60Hz na ramkę (bez interlace'u) uzyskałbym może 256 pixeli w poziomie i dwa razy mniej linii (niż w palu). Tak mi się wydaje, gdyż nie mam pod ręką jakiejkolwiek specyfikacji generowania obrazu VGA.

    Dodano po 3 [minuty]:

    *seba* napisał:
    No no, Suuuuuupppppppeeeeeeeeer

    Odrazu pare pytan:
    Jak moi poprzednicy. 1- Koszt budowy ?
    2- Czy bedziesz udostepnial Schemacik i oprogramowanie ?

    Naprawde Respekt.


    Nad obudową jeszcze nie myslałem, ale chciałbym podłączyć panoramiczny lcd od przenośniego odtwarzacza DVD, po to między innymi zrobiłem kartę generującą obraz w PAL'u, aby podpiąć to do takiego LCD bez kontrolera.
    Całość z LCD możnaby zamknąć w plastikowej obudowie.

    Narazie raczej nie będę udostępniał achematu i źródłówek, gdyż wszystko jest w fazie tworzenia i rozwijania :)

    Dodano po 1 [minuty]:

    Kazimierz123 napisał:
    piękne cacko ile cali ma tv na fotce


    Urządzenie podpiołem przez SCART do 32" LCD
  • #10
    redart
    Poziom 23  
    Szacun...
    Nie wiem czym zajmujesz się na codzień, że pozostaje Ci tyle wolnego czasu na hobby, ale fakt, że robisz to amatorsko wzbudza mój najszczerszy podziw. Gratuluję wiedzy i samozaparcia. Ten projekt jast biegunowo odmienny od 99.9% zamieszczanych tu konstrukcji. Jestem pod wrażeniem.
    Sama konstrukcja z zapasem stanowi interaktywną ramkę na zdjęcia z podkładem muzycznym - a jakie jest ostateczne przeznaczenie projektu?
    Mówisz o jakimś menu (interfejsie użytkownika?) - więc co to cudo ma jeszcze robić?
    Pzdr.
  • #11
    andrzej3393
    Poziom 16  
    super ;) myślałeś o startowaniu z tymi projektami do jakichś konkursów??
    [hefid]
  • #12
    Xaveri
    Poziom 17  
    Wspaniały projekt :).
    Mógłbyś napisać coś więcej o obsłudze kart pamięci z poziomu ARMa?
    Szczególnie interesuje mnie implementacja FAT'a na nich...
  • #13
    kitor
    Poziom 34  
    Ładny projekt. Możesz powiedzieć coś więcej o procesorze? Szczególnie interesuje mnie szybkość - może możnaby było na tym odpalić WindowsCE
  • #14
    krsytar
    Poziom 10  
    redart napisał:
    Szacun...
    Nie wiem czym zajmujesz się na codzień, że pozostaje Ci tyle wolnego czasu na hobby, ale fakt, że robisz to amatorsko wzbudza mój najszczerszy podziw. Gratuluję wiedzy i samozaparcia. Ten projekt jast biegunowo odmienny od 99.9% zamieszczanych tu konstrukcji. Jestem pod wrażeniem.
    Sama konstrukcja z zapasem stanowi interaktywną ramkę na zdjęcia z podkładem muzycznym - a jakie jest ostateczne przeznaczenie projektu?
    Mówisz o jakimś menu (interfejsie użytkownika?) - więc co to cudo ma jeszcze robić?
    Pzdr.


    Rozwijam ten projekt dlatego ze sprawia mi to satysfakcje poprostu, zamierzam zrobic menu cos w rodzaju dzisiejszych DVD palyerów, tak aby mozna bylo swobodnie przegladac pliki. Chciałbym też sprobować animacjami, ale to byłaby raczej ciekawostka, gdyż ten procesor ma jedynie 64k ramu, co jest pojemnoscia znikoma. Dorobie jeszcze dekompresje AAC (wersja bez SBR, gdyż zabrakłoby mocy obliczeniowej i oczywiście ramu).

    Dodano po 2 [minuty]:

    kitor napisał:
    Ładny projekt. Możesz powiedzieć coś więcej o procesorze? Szczególnie interesuje mnie szybkość - może możnaby było na tym odpalić WindowsCE


    Nie sądzę aby można było odpalić na tym Windows CE, za mało ramu, polecam wejść na stronę Atmela i poczytać o at91sam7s256

    Dodano po 4 [minuty]:

    Xaveri napisał:
    Wspaniały projekt :).
    Mógłbyś napisać coś więcej o obsłudze kart pamięci z poziomu ARMa?
    Szczególnie interesuje mnie implementacja FAT'a na nich...


    Jest masa informacji na temat FAT16/32 na sieci, także wystarczy poszukać w googlach, np. "fat16+specification" i od razu znajduje masę dokumentów.

    Jeśli chodzi o obsługę kart SD/MMC w trybie SPI to również google są nie zastąpione :)
    przykładowy link:
    http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/
  • #15
    ice466
    Poziom 12  
    Witam,

    Świetna konstrukcja.
    Mam do Ciebie takie pytanie z jakich korzystałeś materiałów żeby nauczyć się pisać pod ARM. Jak zacząć przygodę z tego typu procesorami.

    Dzięki za odpowiedź


    Pozdrawiam

    ice466
  • #16
    nikus666
    Poziom 12  
    Mam pytanko wie ktoś może co zrobić z lcd (np z siemensa cx 70 bo taki mam) żeby wyświetlał obraz tak jak telewizor??
  • #17
    krsytar
    Poziom 10  
    ice466 napisał:
    Witam,

    Świetna konstrukcja.
    Mam do Ciebie takie pytanie z jakich korzystałeś materiałów żeby nauczyć się pisać pod ARM. Jak zacząć przygodę z tego typu procesorami.

    Dzięki za odpowiedź


    Pozdrawiam

    ice466


    Polecam specyfikację producenta mikrokontrolerów ATMEL opartych o rdzeń ARM. Na stronie ATMEL'a jest cała masa dokumentów i przykładów, polecam też nauczyć się C.
    Do tworzenia kodu wykorzystuje darmowe środowisko WinARM.
    Stronka na której można znaleźć linki do odpowiednich materiałów i co najważniejsze - masy przykładów:

    http://www.propox.com/products/t_137.html

    Ja korzystam właśnie z tego modułu i jestem bardzo zadowolony.
  • #18
    michalko12
    Specjalista - Mikrokontrolery
    nikus666 napisał:
    Mam pytanko wie ktoś może co zrobić z lcd (np z siemensa cx 70 bo taki mam) żeby wyświetlał obraz tak jak telewizor??


    Tak, ja wiem. Trzeba podłaczyć go do odpowiedniego układu, i odpowiednio go oprogramować. To powinno wystarczyć.

    Czekałem na tego typu pytania :lol:
    Ciekawe jakie jeszcze LCD bedą tu wymienione?


    *************************************************************
    Do autora watku:

    Kawał dobrej roboty!!! Brawo!

    Gdzie namierzyłeś kod kodeka MP3?
  • #20
    pidpawel
    Poziom 26  
    Brawo, brawo, brawo ;) Jak na mój gust jednak koszty troszku duże, ale pewnie radość jeszcze większa. Ostatnio, jak zauważyłem, pojawia się coraz więcej takich perełek w tym dziale ;) Jedyne co w tym projekcie mnie gnębi pytaniem to zasilanie: ile trzyma ;) A właściwie ile prawdopodobnie by trzymała gdybyś ten lcd do montował. I jaka jest waga całości??
  • #21
    krsytar
    Poziom 10  
    pidpawel napisał:
    Brawo, brawo, brawo ;) Jak na mój gust jednak koszty troszku duże, ale pewnie radość jeszcze większa. Ostatnio, jak zauważyłem, pojawia się coraz więcej takich perełek w tym dziale ;) Jedyne co w tym projekcie mnie gnębi pytaniem to zasilanie: ile trzyma ;) A właściwie ile prawdopodobnie by trzymała gdybyś ten lcd do montował. I jaka jest waga całości??


    Ale to nie jest projekt mobilny, takze zasilam to normalnym zasilaczem 5V, pobór prądu nie ma tu dla mnie znaczenia. Sam dspic w karcie graficznej zasilany napięciem 5V i jeszcze podtaktowany (32MHz zegar instrukcji) pobiera sporo, bo się robi ciepły. Sam ARM z kodekiem audio i pozostałe elementy mają dużo mniejszy pobór prądu. W momencie kiedy odtwarzane są pliki mp3 i nie jest używane wyświetlanie obrazu, karta graficzna przechodzi w tryb uśpienia automatycznie i procesor dspic usypiany jest instrukcją "pwrsav #SLEEP_MODE", takze spokojnie i "nieprądożernie" czeka na przerwanie :) Więc wtedy pobór prądu jest minimalny.
  • #22
    ogordarek
    Poziom 14  
    Mam takie pytanie jak zaczołeś przygode z assemblerem... bo jak by nie było jest on trudny ...
  • #23
    badworm
    Poziom 18  
    Cóż to za scalak siedzi tam w obudowie DIP40? :)
  • #24
    Rysio4001
    Specjalista - systemy grzewcze
    Piękny projekt.
    Gratulacje.
    Cena trochę wysoka biorąc pod uwagę że można kupić za niecałe 200 zł. odtwarzacz DVD z czytnikiem kart np. MANTE. No cóż, ale to robią Chińczycy. A czy nie zastanawiałeś się nad wykorzystaniem procesora z np. podobnego odtwarzacza DVD?
    Pozdrawiam.
  • #25
    Deepone
    Poziom 22  
    @Rysio4001 myślę, że jednak wykorzystanie mogło by być niemożliwe, często są to układy dedykowane i znaleźć o nich informacje mogło by być trudno - jeżeli się mylę to proszę mnie poprawić.
  • #26
    krsytar
    Poziom 10  
    badworm napisał:
    Cóż to za scalak siedzi tam w obudowie DIP40? :)


    no wlasnie dsPIC30F4013 - kontroler sterujący pracą "karty graficznej"

    Dodano po 2 [minuty]:

    ogordarek napisał:
    Mam takie pytanie jak zaczołeś przygode z assemblerem... bo jak by nie było jest on trudny ...


    Assembler jest bardzo logiczny i naprawdę nie jest trudny. Warto rozpocząć zabawę na jakimś prostym mikrokontrolerze, np. PIC16F84.
  • #27
    naviservice
    Poziom 10  
    taki projekt był by ciekawszy, gdyby zastosować go w przemysle motoryzacyjnym jako np. dvd-mp3 player sterowany z poziomu podstawowej obslugi w aucie ( dodac sterownik do swiatlowodów i już mamy sprzęt do audi Q7 :) )
  • #28
    gnom321
    Poziom 10  
    Konstrukcja bardzo fajna, ale ja mam małe pytanie, jak to jest zasilane, bo chyba musi być :) ??
  • #29
    adamusx
    Poziom 27  
    Ja równiez musze złożyc pokłon przed twórcą tego urządzonka. Duzo pracy w to włożone !!

    Jesli chodzi o implementacje MP3/AAC na SAM7S256 to mysle ze posiłkowałe ś się projektem z tej strony :
    http://www.mikrocontroller.net/articles/ARM_MP3/AAC_Player :) ( player na AT91SAM7S256 , dekoder MP3/AAC, obsługa kart SD/MMC z fatem).

    Mnie bardziej zaciekawila czesc zwiazana z Twoja "kartą graficzna". Z jaką prędkością jestes w stanie zmieniac wyświeltane obrazy? Całośc na dsPICa w assemblerze?
    Powodzenia przy rozwijaniu projektu.

    Pozdrawiam
  • #30
    wojio
    Poziom 12  
    Napisz, w której części Warszawy mieszkasz, a w tym kierunku będę bił pokłony.

    Pełen szacunek.

    Bardzo rzadko komentuję projekty innych użytkowników, ale Twój mnie normalnie rozłożył i musiałem ocenić. Poprostu skala ocen się skończyła, wskazówka wlnęła w ogranicznik i ocenometr idzie do serwisu.

    Szacunek.