Elektroda.pl
Elektroda.pl
X
PCBway
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 20 Gru 2007 09:29 20286 62
  • #31
    krsytar
    Poziom 10  
    adamusx napisał:
    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


    Tak dokładnie, dzięki temu projektowi dowiedziałem się że można uruchomić na at91sam7s256 codec mp3 i starczy pamięci ram wewnątrz układu, ale mimo wszystko mój player jest zmodyfikowany i lepiej zoptymalizowany, gdyż dekodowanie mp3 zajmuje mniej więcej połowę mocy obliczeniowej procesora, także zostaje jeszcze sporo wolnych cykli zegara, na korekcję audio, gdyż bez korekcji dźwięk wychodzący z wyjść liniowego i słuchawkowego jest dość płaski.

    Karta graficzna jest raczej ciekawym projektem niż wydajnym układem generującym grafikę 2D, ale do zrobienia szybkiej wersji użyłbym pamięci dwuportowej (jednak nie mogłem takowej zdobyć w interesującej mnie pojemności i organizacji), aby procesor główny i graficzny mogły niezależnie odczytywać i zapisywać dane. w tej chwili pamięć jest współdzielona kosztem prędkości zapisu z ARM'a, gdyż priorytet ma wyświetlanie obrazu, musi się odbywać cyklicznie na okrągło. ARM ma dość ograniczony czas na zapis danych, ale zapisując cały obraz w rozdzielczości 512x384x2bajty (16-bit koloru) uzyskuje jakieś 2 FPS :) Niewiele, ale do wyświetlania obrazków i obsługi ładnego graficznego menu wystarczy, gdyż modyfikowane są jedynie małe obszary pamięci.
  • PCBway
  • #32
    naviservice
    Poziom 10  
    rozwinę trochę projekt nad którym pracujemy do odtwarzacza o multimedialnego obsługującego SD, USB, AUX, napęd slim DVD, Ipod apple, dodajemy sterownik OS8104 MOST50 z gniazdem optycznym YAZAKI oraz procesor do obróbki obrazu LVDS i otrzymujemy zestaw multimedialny do audi MMI, nowych bmw i mercedesa. jesli jesteś zainteresowany rozwinąć swoją pasje i projekt to napisz co o tym sądzisz do naviservice - jozefow znajdziesz kontakt w google :)
  • #33
    krsytar
    Poziom 10  
    http://www.propox.com/products/t_163.html

    Procesor w tym module - rewelacja. ARM9, kod wykonywany z FLASH'a tak samo szybko jak z RAM'u. Do 96 MIPSów, 96 KB RAM. Obsłuży spokojnie codec AAC+ (SBR + PS). Natępny projekt stworzę już na tym kontrolerze :)
  • #34
    kitor
    Poziom 34  
    96mhz arm v9
    tu juz naprawde mógłbyś nad CE pomyśleć
  • #35
    Pocieszny
    Poziom 38  
    Może to mały offtop ale zapytam czy przypadkiem pan Krzysztof ma coś wspólnego z Nokią? ;)
  • PCBway
  • #36
    krsytar
    Poziom 10  
    zenobeusz napisał:
    Może to mały offtop ale zapytam czy przypadkiem pan Krzysztof ma coś wspólnego z Nokią? ;)


    W rzeczy samej :)
  • #37
    diablokomis
    Poziom 19  
    Mega szacunek ! Jeśli to tylko hobby to naprawde jesteś zdolny.
  • #38
    NeoX
    Poziom 15  
    Mam pytanie bo ktoś tutaj mówił na temat WinCE...
    No ok nawet gdyby autor miał proc aby odpalić wince, to skąd ma wziąść jakieś źródła?
    Na google nic nie widzę aby były dostępne jakieś darmowe materiały nt. jak załadować wince do ARMa

    Ma ktoś może jakąś dokumentację???
  • #39
    kitor
    Poziom 34  
    WinCE ładuje się do zewnętrznego (flash)romu. Obraz ma od kilku MB do ok 45mb zależnie od tego co będziemy chcieli wbudować. Skąd wziąść źródła? Platform Builder for WindowsCE 5 (CE6 nie ma sensu) - 120dniowy trial, ale romy nim zbudowane nie wygasają. A dlaczego trial? Pełna wersja kosztuje 995$ jak dobrze pamiętam :P

    Tu:
    http://pdaclub.pl/forum/index.php?topic=86268.0
    opisałem jak zrobić rom do CE na przykładzie CEPC czyli peceta opartego o CE

    Jako szczegół podam że w PB są żródła całego systemu WinCE jak i aplikacji w niego wbudowanych
  • #40
    cinek810
    Poziom 11  
    Fe-no-me-na-lne

    Ja zajmuję się mikrokontrolerami od jakiegoś roku, i...
    marzę o dojściu do poziomu prezentowanego przez autora projektu.

    Zapytam więc, ile poświęcasz czasu na elektronikę? Z czego się uczysz?
  • #41
    karol12b
    Poziom 16  
    Tak z ciekawosci ile czasu to robiles
  • #42
    JacekCz
    Poziom 37  
    Autorowi gratuluję, rzeczywiście jest frajda wyciskania oprogramowania na 'małym' sprzęcie... dawno to było ale 2-4KB ROM-a pod Z80 to długopisem umiało się disasemblować (i wykrywać błędy!), ech łezka się kręci a czasy oczywiście poszły do przodu.

    Offtopicowo trochę, skorzystam z zainteresowanego tematyka towarzystwa: spotkaliście się z otwartymi/DIY procesorami dźwięku na podobnej bazie sprzętowej?
    Od studiów nie siedzę w tematyce sygnałowej :(
    Czy algorytmy sygnałowe w C są dobrze przenośne ?
  • #43
    krsytar
    Poziom 10  
    Od momentu kiedy prezentowałem swój projekt uległ on znacznym modyfikacjom. Dodałem menu, w którym można włączyć funkcję playera (odtwarza mp3, wave i wyświetla bmp, jpeg - opisywałem to wcześniej) oraz taki mały efekcik 3D, tzn. sześcian z nałożoną teksturą birujący wokół każdej z osi XYZ (ze względu na małą ilość ram w mikrokontrolerze tekstura nałożona na sześcian ma rozdzielczość 96x96x16bit-kolor) Bryła obraca się z przyzwoitą szybkością, uzyskuje jakieś 15FPS, gdyż sporo czasu zajmuje zapisanie pixeli do pamięci video RAM (opisywałem wcześniej dlaczego). Karta graficzna ustawiona w tryb 320x240x16bit bez przeplotu. Niestety nie mogłem zrobić podwójnego buforowania i kasowania pamięci po narysowanej klatce w trakcie kiedy wyświetlana jest następna, gdyż byłoby zbyt wolno, ale jest to raczej taka ciekawostka i miło patrzeć jak w czasie rzeczywistym generuje się obraz trójwymiarowy na mojej własnej platformie :) Dodałem jeszcze parę mniej istotnych funkcjonalności "systemu", ale to już nieistotne.

    Menu główne wygląda tak (w pełniej rozdzielczości karty 512x384x16bit):
    Odtwarzacz multimedialny oparty na ARM

    A tak wygląda obracjący się sześcian w 3D z nałożoną teksturą (karta w trybie 320x240x16bit):
    Odtwarzacz multimedialny oparty na ARM
  • #44
    mwsoft
    Poziom 10  
    A ja mam inne pytanie propo karty graficznej.

    Piszesz ze potrafi ustawic dowolna rozdzielczosc w pionie i poziomie. Nie znam DSPIC, ale jak robisz skalowanie w poziomie? On ma jakis wbudowany PLL ktorego mozna dowolnie ustawic dla rdzenia? A pion? Masz tam jakis algorytm deinterlace (jak tak to skad wziales?)? Czy tylko pelne potegi dwojki? ;>
  • #45
    krsytar
    Poziom 10  
    mwsoft napisał:
    A ja mam inne pytanie propo karty graficznej.

    Piszesz ze potrafi ustawic dowolna rozdzielczosc w pionie i poziomie. Nie znam DSPIC, ale jak robisz skalowanie w poziomie? On ma jakis wbudowany PLL ktorego mozna dowolnie ustawic dla rdzenia? A pion? Masz tam jakis algorytm deinterlace (jak tak to skad wziales?)? Czy tylko pelne potegi dwojki? ;>


    Z racji tego, że adres generuje programowo i ilość wysyłanych punktów w linii wynosi zawsze 512, ale stosując interpolację poprostu obliczam szybko jaki pixel (czyli jego adres w vram) wysłać dla danego pixela obrazu (1 z 512), i dlatego mogę ustawić dowolną rozdzielczość w poziomie, w pionie jest dokładnie tak samo, gdyż zawsze wysyłam 274 linie dla danego półobrazu (w interlace, bądź pełnego obrazu gdy nie generuję w przeplocie), ale obliczam którą linię wysłać, interpolując. Czyli technika czysto programowa, a zależności czasowe są na stałe ustalone dla 512 pixeli w poziomie oraz 274 linii dla jednego półobrazu. W ogóle nie wykorzystuje timerów, tylko odpowiednio napisałem kod.
    Deinterlace'u nie trzeba stosować, gdyż osobno zajmuję się każdym z półobrazów (czyli raz dla linii nieparzystych i drugi raz dla linii parzystych).
  • #46
    mwsoft
    Poziom 10  
    Blech - pozna pora byla - oczywiscie o algorytm interpolacji mi chodzilo :) Mozesz napisac kilka slowa jak to dziala? Zawsze wydawalo mi się to dosc skomplikowane i trudne do realizacji "w locie".
  • #47
    krsytar
    Poziom 10  
    mwsoft napisał:
    Blech - pozna pora byla - oczywiscie o algorytm interpolacji mi chodzilo :) Mozesz napisac kilka slowa jak to dziala? Zawsze wydawalo mi się to dosc skomplikowane i trudne do realizacji "w locie".


    Prosta sprawa (wersja stałoprzecinkowa, dlatego przesunięcie o 16bitów na przykład):

    xscr - szerokość ekranu (docelowo)
    xpix - szerokość linii (źródło)

    xdelta = (xpix << 16) / xscr;
    xs = 0;
    for (short i = 0 ; i < xscr, i++)
    {
    buftarget [i] = bufsource [xs >> 16];
    xs += xdelta;
    }


    I w tym momencie mamy dla każdego pixela z linii ekranu przypisany proporcjonalnie pixel z bufora źródłowego (czyli pixele źródłowe zmapowane na ekran), jest to w sumie najprostrzy sposób, ale można stosować również algorytmy wygładzania i filtracji, jest tego cała masa.
  • #48
    mwsoft
    Poziom 10  
    Mhm, no to nie o tym myslalem. Bo taki algorytm produkuje poszarpany i mocno spixelowany obraz (szczegolnie widoczne na cienkich liniach) - wlasnie o to wygladzanie mi chodzilo - antyaliasing? Nie wiem czy dobrego slowa uzylem :)
  • #49
    krsytar
    Poziom 10  
    mwsoft napisał:
    Mhm, no to nie o tym myslalem. Bo taki algorytm produkuje poszarpany i mocno spixelowany obraz (szczegolnie widoczne na cienkich liniach) - wlasnie o to wygladzanie mi chodzilo - antyaliasing? Nie wiem czy dobrego slowa uzylem :)


    Dokładnie, ale nie wygląda najgorzej. Mając jednak 3 instrukcje na pixel za dużo nie mogłem zrobić :)
  • #50
    krsytar
    Poziom 10  
    Witam ponownie.
    Uporałem się z podwójnym buforowaniem, przez co obracający się sześcian wygląda przyjemnie, dopisałem też kilka efektów:

    Oto cieniowanie Gourauda ze światłem świecącym z przodu.
    Odtwarzacz multimedialny oparty na ARM

    Tutaj narzucona tekstura.
    Odtwarzacz multimedialny oparty na ARM

    Tutaj tekstura + oświetlanie z przodu.
    Odtwarzacz multimedialny oparty na ARM

    Tekstura + źródło światła przesunięte lekko do góry.
    Odtwarzacz multimedialny oparty na ARM

    Tekstura + światło przesunięte w lewo.
    Odtwarzacz multimedialny oparty na ARM

    światłem można świecić z różnych stron, ilość klatek na sekundę jaką uzyskuję to około 12 :) ale ARM się w zasadzie "nudzi", poprostu wąskim gardłem jest zapis do pamięci Video RAM w mojej karcie graficznej. Ale wygląda naprawdę przyjemnie.
    Jak coś dopiszę, to znów się odezwę.

    Acha jeśli chodzi o część playera to dopisałem odtwarzanie plików wave skompresowanych ima/dvi adpcm (tylko 4 bity na próbke bo lepiej brzmi).słuchając na słuchawkach stwierdzam że jakość dźwięku nie jest dużo gorsza niż mp3 a dekompresja i kompresja jest bardzo prosta. Adpcma dorzuciłem dlatego ze dopisze jeszcze nagrywanie dźwięku z wejścia liniowego i mikrofonowego, kompresja adpcm w locie do pliku na kartę sd.
  • #51
    Freddie Chopin
    Specjalista - Mikrokontrolery
    no to terraz juz przesadziles totalnie [;

    ARM7 i czyste C, czy musiales jakies wstawki assemblera pododawac? oczywiscie mowie teraz jedynie o procku liczacym obrazki, bo ze w graficznym dsPICu jest asm to juz wiem [;

    0x41 0x56 0x45!!
  • #52
    krsytar
    Poziom 10  
    Freddie Chopin napisał:
    no to terraz juz przesadziles totalnie [;

    ARM7 i czyste C, czy musiales jakies wstawki assemblera pododawac? oczywiscie mowie teraz jedynie o procku liczacym obrazki, bo ze w graficznym dsPICu jest asm to juz wiem [;

    0x41 0x56 0x45!!


    Jeśli chodzi o wyświetlanie grafiki to w asm napisałem tylko funkcję stawiania piksela w pamięci karty.arm jest tak szybki ze radzi sobie z efektami 3d oprogramowanymi w c bez minimalnego problemu Naprawdę pobawiłbym sie bardziej skomplikowanymi objektami ale niestety ramu mało :)
  • #53
    Freddie Chopin
    Specjalista - Mikrokontrolery
    no to czemu takiego kiepskiego arma wziales ? <:

    te od philipsa albo od ST maja do 64kB ramu i do 72MIPSow

    np STR711FR2 - http://www.st.com/mcu/inchtml-pages-str710.html

    wywal tego i zmien ARMa na lepszego [; bedziesz mial na czym poszalec <: powiedzialbym o tym ARMie cos jeszcze, ale ogolnie to na eletrodzie nie wolno mowic o tym, ze firma ST ma podobna polityke dotyczaca ARMow jak firma Microchip [; chyba mnie rozumiesz [;

    moze sam sie zaczne bawic troche ARMami jak skoncze magisterke ... kto wie kto wie [; moze Microchip wprowadzi tez do sprzedazy PICe 32 i okaza sie lepsze od ARMa, to tez mozliwe... w kazdym razie - na razie po prostu masakra jak dla mnie [; gratz

    0x41 0x56 0x45!!
  • #54
    krsytar
    Poziom 10  
    Freddie Chopin napisał:
    no to czemu takiego kiepskiego arma wziales ? <:

    te od philipsa albo od ST maja do 64kB ramu i do 72MIPSow


    No właśnie at91sam7s256 którego używam posiada 64kb ramu i ponad 60mipsów (taktuje go zegarem 63mhz). Następny proc którego użyje to będzie arm9 i zewnętrznie podłączany ram.
  • #55
    Freddie Chopin
    Specjalista - Mikrokontrolery
    wlasnie zauwazylem, ze troche z tymi mipsami przesadzilem [; niemniej jednak Cortexy maja do 72MHz przy 1.25DMIPS/MHz

    moj blad [;

    0x41 0x56 0x45!!
  • #56
    vertim
    Poziom 23  
    szkoda ze zrobione jst na uniwersce
  • #57
    krsytar
    Poziom 10  
    vertim napisał:
    szkoda ze zrobione jst na uniwersce


    To dlatego że prototyp, wiele zmian wprowadzałem :)
  • #58
    UDMA
    Poziom 16  
    krsytar napisał:
    Witam ponownie.
    Uporałem się z podwójnym buforowaniem, przez co obracający się sześcian wygląda przyjemnie, dopisałem też kilka efektów:

    Oto cieniowanie Gourauda ze światłem świecącym z przodu.


    Świetna robota.
    Do obliczeń 3D używałeś zmiennego przecinka (float/double w C) czy arytmetyki fixed point?
  • #59
    krsytar
    Poziom 10  
    UDMA napisał:
    krsytar napisał:
    Witam ponownie.
    Uporałem się z podwójnym buforowaniem, przez co obracający się sześcian wygląda przyjemnie, dopisałem też kilka efektów:

    Oto cieniowanie Gourauda ze światłem świecącym z przodu.


    Świetna robota.
    Do obliczeń 3D używałeś zmiennego przecinka (float/double w C) czy arytmetyki fixed point?


    Nie ma sensu używać zmiennego przecinka, dokładność słowa 32 bitowego int spokojnie wystarcza.
  • #60
    krsytar
    Poziom 10  
    Witam ponownie.
    Tym razem duuuże zmiany w oprogramowaniu urządzenia.

    Po pierwsze zmienione menu ze skalowanymi w czasie rzeczywistym ikonkami (ikona jest płynnie powiększana w momencie podświetlenia danej funkcji).

    Odtwarzacz multimedialny oparty na ARM


    Player odtwarza to co odtwarzał wcześniej (czyli WAVE, WAVE skompresowany IMA/DVI ADPCM, MP3, JPEG, BMP), ale dorobiłem menu, gdzie w "okienku" na środku ekranu wyświetla się w zalęzności czy jest odtwarzane audio: ikona MP3, lub ikona WAVE. Jeśli jest to obrazek JPEG, BMP - wyświetlany jest on w oknie (oczywiście skalowanie i trzymanie aspektu), można w tym przypadku przełączyć wyświetlanie w trub pełno ekranowy i przeglądać obrazki na całym ekranie.
    Dostępne również przełączanie się pomiędzy kolejnymi katalogami na karcie.
    Dodatkowo zoptymalizowałem jeszcze codec mp3, poprzez przepisanie kilku krytycznych funkcji w assemblerze (imdct, antialiasing, dekwantyzacja, itd.)

    Odtwarzacz multimedialny oparty na ARM

    Odtwarzacz multimedialny oparty na ARM


    Dorobiłem funkcję recordera. Można wybrać źródło dzwięku (mikrofon lub wejście liniowe), wybrać częstotliwość próbkowania oraz czy dźwięk ma być nagrywany w stereo czy mono. Dźwięk nagrywany jest na kartę SD (FAT16, lub FAT32 z pełnym zachowaniem specyfiki systemu FAT) w formacie WAVE z kompresją w locie IMA/DVI 4 bity na próbkę (kompresja w przybliżeniu 1:4) - jakość jest dość przyzwoita zwłaszcza przy 44 kHz w stereo. Nagrany utwór można przesłuchać i skasować od razu z karty, lub rozpocząć nagrywanie następnego. Nazwa pliku automatycznie zwiększana jest o 1 (pierwszy dzwięk to SOUND000.WAV, kolejny to SOUND001.WAV, itd.). W trakcie nagrywania można dać pauzę, tak jak i w przypadku odtwarzania. Nagrane utwory można oczywiście słuchać poprzez funkcję playera, bądź na PC.

    Odtwarzacz multimedialny oparty na ARM


    Dorobiłem też ustawienia, do których można wejść z poziomu menu głównego, bądź z poziomu playera, czy recordera.
    Można ustawić poziom rozszerzania sceny stereo (kilka instrukcji w assmeblerze, a bardzo przyjemny efekt).
    Dostępny jest również 3-pasmowy equalizer.
    Oprócz equalizera dostępne są jeszcze predefiniowane ustawienia charakterystyki dzwięku (ale to było akurat dostępne we wcześniejszej wersji softu).
    Menu playera można wyłączyć, aby player zachowywał się tak jak we wcześniejszej wersji oprogramowania - przydatne kiedy chcę sobie posłuchać muzyki na słuchawkach bez podłączania TV do urządzenia - wtedy karta graficzna podczas odtwarzania plików audio jest uśpiona, a uaktywnia się tylko w momencie kiedy ma być wyświetlony obrazek.
    Ustawienia można zapisać do flasha, lub przywrócić ostanio zapisane.

    Odtwarzacz multimedialny oparty na ARM

    Narazie to tyle, ale cały czas coś poprawiam :)