logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega8515][Bascom]Odtwarzacz mp3 na bazie VMusic2 zakłócenia

artursz 19 Paź 2011 10:08 3584 7
  • #1 10042592
    artursz
    Poziom 12  
    Witam.
    Wykonałem odtwarzacz mp3 na bazie modułu VMusic2 (zintegrowany odtwarzacz sterowany przez UART lub SPI).
    Wewnątrz "siedzi" dekoder VS1003. Sterowanie wykonałem po UART z ATMega8515, program napisany w Bascomie.
    Wszystkie polecenia sterujące działają bez zastrzeżeń, działa również odczyt ID3 Tag.
    Problem polega na tym, że podczas odtwarzania muzyki pojawiają się w słuchawkach takie cyfrowe "ćwierkania".
    Nie są ciągłe pojawiają się z różną częstotliwością, są pliki w których wcale nie występują.
    Dodam, że te same pliki odtwarzane czy na komputerze czy na innym odtwarzaczu są odtwarzane bez zakłóceń.
    Podejrzewam, że problem tkwi w dekoderze VS1003. Moduł umożliwia zmianę w rejestrze dekodera.
    Przejrzałem datasheeta VS1003 i nie wiem których wartości w rejestrze się czepić.
    Może ktoś przerabiał podobny problem?
  • #2 10045440
    And!
    Admin grupy Projektowanie
    Czy "ćwierkania" są skorelowane ze sterowaniem układem,
    czy bardziej są uzależnione od rodzaju utworu ?

    Dobrze by było zamieścić schemat rozwiązania,
    nagranie efektu "ćwierkania" też może być pomocne.

    Fragmenty kodu lub kod,
    również może być przydatny.
  • #3 10045912
    artursz
    Poziom 12  
    "Ćwierkanie" moim zdaniem nie jest związane ze sterowaniem, ale nie twierdzę że tak jest na pewno.
    Sterownie wygląda następująco: uC wysyła komendę po UART i zaczyna się odtwarzanie w tym czasie nie przesyłam żadnych innych poleceń.
    W czasie odtwarzania jedynie uC odbiera informacje z VMusic, w kolejności (nazwa pliku, nr. ścieżki, wykonawca, tytuł, album, a następnie aż do zakończenia odtwarzania utworu tylko czas trwania co 1s).
    Schemat i kod oczywiście zamieszczę , "ćwierkanie" spróbuję nagrać na telefonie mam nadzieję że będzie dobrej jakości.

    W załączniku schemat (całość na razie na płytce prototypowej).
    
    $regfile = "m8515.dat"
    $crystal = 4000000
    $hwstack = 32
    $swstack = 8
    $framesize = 24
    
    $lib "glcdKS108.lbx"
    
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 5 , Ce2 = 4 , Cd = 1 , Rd = 2 , Reset = 3 , Enable = 0
    Config Portb = Input
    
    Enable Interrupts
    
    Declare Sub Serial0charmatch()
    
    A Alias Pinb.0
    B Alias Pinb.1
    C Alias Pinb.2
    D Alias Pinb.3
    E Alias Pinb.4
    
    Dim Cr As Byte
    Dim In_data As String * 48
    Dim Text As String * 6
    Dim Files As String * 12
    Dim Track As String * 6
    Dim Title As String * 48
    Dim Artist As String * 24
    Dim Album As String * 24
    Dim Licznik As Byte
    
    Config Serialin = Buffered , Size = 32 , Bytematch = 13
    
         Cr = &H0D
         Licznik = 0
    
    Setfont Font5x5
    
    Print "vsv 32" ; Chr(cr);
    
    Do
              Debounce A , 0 , Play_all , Sub
              Debounce B , 0 , Stop_ , Sub
              Debounce C , 0 , Next_ , Sub
              Debounce D , 0 , Back_ , Sub
              Debounce E , 0 , Pause_ , Sub
    Loop
    
    Play_all:
                                  Print "vrr" ; Chr(cr);
    Return
    
    Stop_:
                                  Print "vst" ; Chr(cr);
    Return
    
    Next_:
                                  Print "vsf" ; Chr(cr);
    Return
    
    Back_:
                                  Print "vsb" ; Chr(cr);
    Return
    
    Pause_:
                                 Print "vp" ; Chr(cr);
    Return
    
    Lcd_:                                                       ' wysyla dane na LCD
          Cls
              Lcdat 2 , 1 , Files , 0
              Lcdat 3 , 1 , Track , 0
              Lcdat 4 , 1 , Title , 0
              Lcdat 6 , 1 , Artist , 0
              Lcdat 8 , 1 , Album , 0
    Return
    
    Dane:                                                       ' przepisuje dane z bufora do zmiennych string
        Text = Mid(in_data , 1 , 7)
               If Text = "Playing" Then Licznik = 0             ' sprawdza w danych z bufora czy jest ciag znakow "playing"
                Licznik = Licznik + 1                           ' jesli tak to zapisuje 5 pierwszych informacji
                Lcdat 1 , 1 , Licznik ; "  " , 0
              If Licznik = 1 Then Files = In_data
              If Licznik = 2 Then Track = In_data
              If Licznik = 3 Then Title = In_data
              If Licznik = 4 Then Artist = In_data
              If Licznik = 5 Then Album = In_data
              If Licznik = 6 Then Gosub Lcd_
    Return
    
    ' ****************************************************************************
    
    Sub Serial0charmatch()
          Input In_data Noecho
          Gosub Dane
    End Sub
    
    End
    $include "font5x5.font"
    


    Jeszcze co zauważyłem.
    "ćwierkanie" jest efektem dodanym do muzyki, nie zniekształca dźwięku jest tylko na niego nałożony.
  • #4 10051511
    artursz
    Poziom 12  
    Sprawdziłem jeszcze sterowanie z COM komputera przez Hyperterminal.
    Jest tak samo jak z ATMegi.
    Sprawdziłem również: w trakcie odtwarzania odłączyłem TX i RX od kontrolera.
    Moduł nadal odtwarza w pętli wszystkie utwory ale problem zakłóceń pozostaje.
    Zaczynam się zastanawiać czy moduł nie jest uszkodzony.
  • #5 10052414
    And!
    Admin grupy Projektowanie
    Faktycznie wyeliminowałeś całkowicie wpływ zakłóceń zewnętrznych,
    może poza zasilaniem ale to raczej mało prawdopodobne,
    (można podejrzeć czy na zasilaniu w momencie zakłóceń pojawiają się problemy).

    Ostatnia sprawa poza uszkodzeniem modułu jaka przychodzi mi na myśl,
    to podmiana pamięci z której korzysta VMusic2.
  • #6 10052792
    artursz
    Poziom 12  
    Też podejrzewałem pamięć.
    Używałem 2GB pendrive noname, zamieniłem go na kartę SD 2GB Kingston (poprzez adapter USB/SDCard), nie ma praktycznie różnicy.
    Nawet wgrałem najnowsze firmware do modułu i nic się nie zmienia.
  • #7 10053214
    And!
    Admin grupy Projektowanie
    Przed wyjściem sygnału audio zastosowany jest jakiś wzmacniacz ?
    Można sprawdzić jak wygląda sygnał na jego wejściu.

    Warto sprawdzić czy podczas zakłóceń pojawiają się jakieś problemy,
    w szynie zasilania, można użyć np. oscyloskopu, w ostateczności
    nawet takiego z karty dźwiękowej.
  • #8 10053753
    artursz
    Poziom 12  
    Z zasilaniem nie robiłem w sumie nic, i sterownik i moduł zasilam z tego samego źródła.
    Sprawdzę z dwóch różnych, chociaż nie jestem przekonany że to pomoże, moduł sterowany z PC zachowuje się podobnie. Chociaż, konwerter RS232 i moduł był zasilany z tego samego źródła. Dlatego nie zaszkodzi spróbować.
    W załączniku schemat modułu VMusic2. Niestety sygnał na słuchawki jak i na wyjście pinowe jest wyprowadzony bezpośrednio z VS1003.
    Sprawdzę jeszcze napięcia na stabilizatorach 3V3 modułu i podepnę oscyloskop.

    Dodane.

    Sprawdziłem jeszcze podłączając wzmacniacz na wyjście Line, jest tak samo.
    Przylutowałem kondensator 100n bezpośrednio na styki zasilania modułu dalej nic.
    Na oscyloskopie nie widać żadnych zakłóceń na szynie zasilania.

    Dodane.

    Przetestowałem jeszcze na różnych kartach SD (512MB i 1GB) zauważyłem, że zakłócenia pojawiają się przez pewien okres czasu przez klikanaście sekund potem ich nie ma wcale.
    Ich ilość i czas trwania są różne dla różnych utworów.
    I jeszcze jedno spostrzeżenie, dla utworów 48kbps zakłóceń albo nie ma wcale a jeśli są bo bardzo mało i każde jedno trwa ułamek sekundy tak, że trzeba się bardzo wsłuchiwać aby je usłyszeć. Pozostało mi jeszcze pogrzebanie w rejestrach VS1003, ale to raczej będzie metoda prób i błędów bo kompletnie nic mi nie mówią hasła zawarte w datasheecie.

    Zamykam temat.

    Moduł jest uszkodzony. Miałem możliwość sprawdzenia na innym module nie ma tego problemu.
    Dla zainteresowanych tematem - nowo zakupiony u polskiego dystrybutora moduł ma stare firmware warto zaktualizować do najnowszego, można pobrać ze strony FTDI. Aktualizacja jest bardzo prosta, trwa kilkanaście sekund i co ważne można ją wykonać z pendrive.
REKLAMA