Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
TermopastyTermopasty
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .

adambehnke 08 Mar 2010 16:18 94263 328
  • #181
    atom1477
    Level 43  
    ARMy na pewno lepsze. Ale dla Ciebie. Tutaj AVR był lepszy bo adambehnke je lepiej zna i już miał układ zrobiony więc po co miał zmieniać procesor.
    A u Ciebie to jak wstawiasz ARMa to jakiegoś mocniejszego. Bo ilość filtrów i innych cudów jakie trzeba będzie zaimplementować jest raczej duża.
    Najlepiej żeby miał >= 64Kb FLASHa.
    Ilość zabawy jest raczej duża i zastanawiam się czy jest sens nad tym siedzieć zamiast zrobić zwykłe sklejanie głosek.
    Ratuje Cię tylko to że język Polski jest językiem fontycznym. Inaczej nie było by sensu się w to bawić na własny użytek.
  • TermopastyTermopasty
  • #182
    PiotrEtenM500
    Level 19  
    Nie ARM nie będzie lepszy. Lepszy będzie X86 ja stawiam na AMD choć wyznacznikiem jest INTEL. A tak na poważnie to do tego projektu ATM32 jest wystarczający, do komunikatów jakość jest zadawalająca,, koszt budowy tego układu to mniej niż 10zł+karta(15zł). Podniesienie jakości podniesie też koszty jeśli ma to lepiej grać trzeba zastosować DAC, lub VS1003(5$+5$ przesyłka)
  • #183
    WOBI
    Level 19  
    A oto działający kod dla bufora 128 bajtów (można zrobic mniejszy, 64 dziala ale tylko przy Clockrate = 4 , Spsr.0 = 1 i samplu do 16kHz) zależny od prędkości z jaką odczytujemy dane po Spi z karty, im wolniej tym bufor musi byc wiekszy, zależy też od częstotliwości próbkowania pliku dźwiękowego, im szybsze tym bufor większy. Wzorowałem sie na przykładzie z tego postu ale wszystko bez wstawek asm. Działa na plikach WAV czystych RAW 8bit bez nagłówka lub druga wersja procedury pliki wav z nagłówkiem. Użyłem timera3 i ATMega128 dla innych procesorów zmienić w programie deklaracje Timera/przerwania i wyjścia portu PWM. Dołączylem plik wav dla testów(11,025KHz 8 bit mono). Pamietać też należy że jakość dźwięku zależy od częstotliwości próbkowania i zależnie do czego używamy (jaką jakośc chcemy uzyskać) stosować odpowiednią do potrzeb. Np. jesli przesylłamy mowę przez telefon (stacjonarny lub gsm) to nie jest nam potrzebna jakość i wystarczy próbkowanie 8kHz czyli pasmo przenoszenia 4kHz bo w tel. pasmo i tak jest ograniczane do 3,3kHz. Ważne więc jest jak przekonwertujemy pliki z wiekszych prędkości próbkowań do mniejszych. Przed konwersja dobrze by było najpierw poddac plik fitracji pasma. Np. jesli mamy plik wav 44,1 lub 32Khz a chcemy przerobic na 16kHz(pasmo8kHz) to poddajemy go fitracji (wycieciu czestotliwości powyżej pasma przenoszenia) w programie np. cooledit wycinamy częstotliwości powyżej 8kHz i dopiero taki plik poddajemy konwersji do próbek 16kHz. Wtedy mamy dobra jakość, mało szumów i innych zjawisk o których można poczytać w literaturze dotychacej przetwarzania czyfrowego dźwieku.

    Code:

    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    '--------WAV PLAYER RAW unsigned -----11,025kHz 8bit mono-----------------------
    '------------------------- dla kwaru 11,0592MHz --------------------------------
    '------------------ Dla 16MHz 16kHz 8 bit mono ---------------------------------
    '---PROCESOR--------------------------------------------------------------------
    $regfile = "m128def.dat"
    $crystal = 11059200
    $hwstack = 128
    $swstack = 64
    $framesize = 64
    $baud = 19200
    '-------------------------------------------------------------------------------

    '---DEKLARACJE ZMIENNYCH--------------------------------------------------------

    Dim Plik As String * 12 ' dlugosc nazwy pliku 8 + 3 (np. 12345678.wav)

    Dim Poz_lad As Byte
    Dim Pozycja As Byte
    Dim Bufor(128) As Byte
    Dim Probka As Byte
    Dim Probka_lad As Byte
    Dim A As Byte
    Dim Dzielnik As Byte

    Dim Buf_dol As Bit , Buf_gora As Bit , Play As Bit

    '-------------------------------------------------------------------------------

    Declare Sub Odtworz
    Declare Sub Timer3_przerwanie

    '---TIMER 3------------------------------ Konfig PWM ---------------------------

    On Timer3 Timer3_przerwanie
    Config Timer3 = Pwm , Pwm = 8 , Compare C Pwm = Clear Down , Prescale = 1
    Pwm3c = 0
    Config Porte.5 = Output                                     ' wyjscie pwm 3C

    '-------------------------------------------------------------------------------

    '--------------------------- ZEGAR ---------------------------------------------
    ' Config Clock = User
     'Config Date = Dmy , Separator = /

    '-------------------------------------------------------------------------------

    '---SPI-HW----------------------------------------------------------------------
    Const Cmmc_soft = 0                                         'SPI sprzetowy

       ' define Chip-Select Pin
       Config Pinb.0 = Output                                   ' definicja Pinu jako CS dla MMC/SD Karty
       Mmc_cs Alias Portb.0
       Set Mmc_cs

       ' Define SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
       Config Pinb.0 = Output                                   ' definicja Pinu SPI SS
       Spi_ss Alias Portb.0
       Set Spi_ss                                               ' Set SPI-SS jako wyjscie i ustawienie w stan wysoki H
                                                      ' SPI jako Master

       ' HW-SPI is configured to highest Speed
      Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
       Spsr.0 = 1

       Spiinit

    '--- PLIKI ZEWNĘTRZNE I BIBLIOTEKI ---------------------------------------------
    '-------------------------------------------------------------------------------
    Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
    Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
    Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
    Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
    Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
    Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
    Const Cperrdrive = 231
    Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet
    Waitms 500
    Dim Gbdriveerror As Byte                                    ' General Driver Error register
    Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
    Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
    Dim Gbdrivedebug As Byte

    $lib "MMC.LIB"                                              ' link driver library
    $external _mmc
    '-------------------------------------------------------------------------------
    $include "CONFIG_AVR-DOS.Bas"

    '---WŁĄCZENIE GLOBALNE PRZERWAŃ-------------------------------------------------
    Enable Interrupts

    Printbin 12
    Print "inicjuje karte"
    '-------------------------------------------------------------------------------

    '---SD-INICJACJA KARTY I SYSTEMU PLIKÓW-----------------------------------------
    Do

    Gbdriveerror = Driveinit()

    Print "kod bledu- " ; Hex(gbdriveerror)
    Loop Until Gbdriveerror = 0

    A = Initfilesystem(1)                                       ' normally 1, but use 0 on mediums without Master boot record
    '-------------------------------------------------------------------------------

    Waitms 500

    '--- miekki soft start PWM eliminacja stuku glosnika ---------------------------

    For A = 0 To 128                                            ' miekki start pwm
                 Pwm3c = A
                 Waitus 100
              Next A
    '-------------------------------------------------------------------------------

    Plik = "cze.wav"                                            ' Przykladowy Plik Na Karcie
    Play = 1                                                    ' start

    Print " Start  " ; Chr(13)


    '---PĘTLA GŁÓWNA PROGRAMU-------------------------------------------------------
    Do

    Wait 1

    If Play = 1 Then Gosub Odtworz                              'SKOK DO ODTWARZANIA

    Loop
    '-------------------------------------------------------------------------------
    End

    '===============================================================================
    ' procedura odtwarzajaca pliki WAV 8bit ----------------------------------------
    ' plik wav z karty SD w formacie RAW probki 8bit unsigned (0 do 255) -----------

    Odtworz:

     Open Plik For Binary As #1                                 'otwieramy plik

     Buf_dol = 1                                                ' ustawienia znacznikow i poczatkowych zmiennych
     Buf_gora = 1
     Dzielnik = 1
     Pozycja = 1

      For Poz_lad = 1 To 128               ' ladujemy pierwszy raz caly bufor od 1 do max
       Get #1 , Bufor(poz_lad)             ' ale uwaga zmienna bufor liczymy w Bascom od 1 do max!!!
      Next Poz_lad

     Enable Timer3                                 ' wlaczenie przerwan timera
    '=====================================
      Do
         If Pozycja > 65 And Pozycja < 128 And Buf_dol = 0 Then ' czekamy na flage zwolnienia dolnej polowy bufora

           For Poz_lad = 1 To 64              ' ladujemy pierwsza polowe bufora od 1 do polowy
            Get #1 , Bufor(poz_lad)
           Next Poz_lad
             Buf_dol = 1                           ' ustawiamy flage by nie ladowac ponownie
          End If
        '=================
         If Pozycja > 1 And Pozycja < 64 And Buf_gora = 0 Then  ' czekamy na flage zwolnienia gornej polowy bufora

           For Poz_lad = 65 To 128                              ' ladujemy druga polowe bufora  od polowy do konca
            Get #1 , Bufor(poz_lad)
           Next Poz_lad
            Buf_gora = 1                                        ' ustawiamy flage by nie ladowac ponownie
         End If

      Loop Until Eof(#1) <> 0                                    ' i tak do konca pliku petla a przerwanie laduje sobie PWM
    '=====================================

      Disable Timer3                                            'wylaczenie przerwan timera
      Pwm3c = 128                                               ' ladujemy do pwm spoczynkowa wartosc
     Play = 0                                                   ' kasujemy flage
     Close #1                                                   ' zamykamy plik
                                                                 ' koniec procedury
     Return
    '===============================================================================

    '---PRZERWANIE OD TIMERA_3 numer zalezny jakiego uzywamy, tu Timer3-------------
    ' czestotliwosc liczymy dla 8 bit pwm fosc/510 dla prescale =1 czyli dla 16MHz = 31,37kHz / dzielnik (2) = 15,68kHz blisko 16kHz
    ' dla 11,0952MHz = 21,68kHz / dzielnik (czyli 2) = 10,84KHz blisko 11,025KHz / dla 8kHz dzielnik 4 dla kwarcu 16MHz

    Timer3_przerwanie:

     If Dzielnik > 2 Then           ' dzielnik F pwm /2 czyli ladowanie probek co drugie przerwanie
                                            'ustalamy czestotliwosc wystawiania probek do pwm
      Dzielnik = 1

      Pwm3c = Bufor(pozycja)     ' ladujemy probke z bufora do pwm

        If Pozycja = 128 Then Pozycja = 0  'wskaznik bufora zerujemy gdy doszedl do konca
         If Pozycja = 64 Then Buf_dol = 0   'gdy polowa buforu juz oprozniona
                                       'kasujemy flage, nastapi ladowanie dolnej polowy bufora
          If Pozycja = 1 Then Buf_gora = 0    ' ustawiamy flage ladowanie gornej     
                                                   'polowy bufora

          Incr Pozycja     ' zwiekszamy wskaznik bufora

          End If

          Incr Dzielnik                  ' dzielnik przerwanie pwm/liczba= wav probkowanie

    Return
    '-------------------------------------------------------------------------------
     End



    a tu zmieniona procedura ATMega32 dla plikow WAV z naglowkiem (nie RAW) omijamy naglowek. Wazne by byly to pliki 8bit mono. Tu link do opisu struktury naglowka wav http://www.yaotzin-steganografia.yoyo.pl/tekst/wavean/wavnag.htm

    Pliki konfiguracji AVR_DOS i MMC_SD w rar

    Code:
     '-------------------------------------------------------------------------------
    
    '-------------------------------------------------------------------------------
    '---------- WAV PLAYER  unsigned -----16 kHz 8bit mono -------------------------
    '------------------------- dla kwaru 16 MHz ------------------------------------
    '------------------ Dla 16MHz 16kHz 8 bit mono ---------------------------------
    '---PROCESOR--------------------------------------------------------------------
    '$regfile = "m128def.dat"
    $regfile = "M32Def.dat"
    $crystal = 16000000
    $hwstack = 128
    $swstack = 64
    $framesize = 64
    $baud = 19200
    '-------------------------------------------------------------------------------


    '---DEKLARACJE ZMIENNYCH--------------------------------------------------------

    Dim Plik As String * 12

    Dim Poz_lad As Byte
    Dim Pozycja As Byte
    Dim Bufor(128) As Byte
    Dim Probka As Byte
    Dim Probka_lad As Byte
    Dim A As Byte
    Dim Dzielnik As Byte

    Dim Buf_dol As Bit , Buf_gora As Bit , Play As Bit
    '-------------------------------------------------------------------------------

    Declare Sub Odtworz
    Declare Sub Timer1_przerwanie

    '--- TIMER 1 --------------- Konfiguracja PWM ----------------------------------

    On Timer1 Timer1_przerwanie
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    Pwm1a = 0                                    ' zero na nodze by nie było stuku

    '-------------------------------------------------------------------------------
    '--------------------------- ZEGAR
    ' Config Clock = User
     'Config Date = Dmy , Separator = /
    '-----------------------------Moje dekralacje plikow ---------------------------

    $include "CONFIG_MMC_SD_SPI.Bas"
    $include "CONFIG_AVR_DOS_1.Bas"

    '--- WŁĄCZENIE GLOBALNE PRZERWAN -----------------------------------------------
    Enable Interrupts

    Printbin 12
    Print "inicjuje karte i  system AVR Dos"
    '-------------------------------------------------------------------------------

    '---SD-INICJACJA KARTY I SYSTEMU PLIKÓW-----------------------------------------

    Do

    Gbdriveerror = Driveinit()                   ' sprawdzenie poprawnosci inicjacji karty
    Waitms 500
    Print "kod bledu karty - " ; Hex(gbdriveerror)
    Loop Until Gbdriveerror = 0

    A = Initfilesystem(1)                        ' normally 1, but use 0 on mediums without Master boot record
    '-------------------------------------------------------------------------------

    Waitms 500

    '--- USTAWIENIA WSTEPNE --------------------------------------------------------

    For A = 0 To 128                                  ' miekki start pwm
                 Pwm1a = A
                 Waitus 100
              Next A

    Play = 1
    Plik = "cze.wav"                             'przykladowy plik
    '-------------------------------------------------------------------------------

    Print " Start  " ; Chr(13)

    '---PĘTLA GŁÓWNA PROGRAMU-------------------------------------------------------
    Do

    Wait 1

    If Play = 1 Then Gosub Odtworz               'ZEZWOLENIE I SKOK DO ODTWARZANIA

    Loop
    '-------------------------------------------------------------------------------
    End                                          'KONIEC PROGRAMU

    '===============================================================================
    ' procedura odtwarzajaca pliki WAV 8bit ----------------------------------------
    ' plik wav z karty SD w formacie WAV probki 8bit unsigned (0 do 255) -----------

    Odtworz:

     Open Plik For Binary As #1                  'otwieramy plik

     Buf_dol = 1                                 ' ustawienia znacznikow i poczatkowych zmiennych
     Buf_gora = 1
     Dzielnik = 1
     Pozycja = 45                                ' omijamy naglowek pliku WAV 44bajty

      For Poz_lad = 1 To 128                     ' ladujemy pierwszy raz bufor caly od 1 do max bufor
       Get #1 , Bufor(poz_lad)                   ' ale uwaga bascom liczy od 1
      Next Poz_lad

     Enable Timer1                               ' wlaczenie przerwan timera, start ladowania do pwm
    '========================================
      Do

         If Buf_dol = 0 Then                    ' czekamy na flage zwolnienia dolnej polowy bufora

           For Poz_lad = 1 To 64                ' ladujemy pierwsza polowe bufora od 1 do polowy
            Get #1 , Bufor(poz_lad)
            If Eof(#1) <> 0 Then Exit For

           Next Poz_lad
             Buf_dol = 1                         ' ustawiamy flage by nie ladowac ponownie
         End If
    '==============================
         If Buf_gora = 0 Then                    ' czekamy na flage zwolnienia gornej polowy bufora

           For Poz_lad = 65 To 128               ' ladujemy druga polowe bufora  od polowy do konca
            Get #1 , Bufor(poz_lad)
            If Eof(#1) <> 0 Then Exit For

           Next Poz_lad
            Buf_gora = 1                         ' ustawiamy flage by nie ladowac ponownie
         End If

      Loop Until Eof(#1) <> 0 ' i tak do konca pliku petla a przerwanie laduje sobie PWM
    '========================================
      If Buf_dol = 1 Then Bitwait Buf_gora , Reset
       If Buf_gora = 1 Then Bitwait Buf_dol , Reset


     Play = 0                                    ' kasujemy flage
      Disable Timer1                             'wylaczenie przerwan timera
      Pwm1a = 128                                ' ladujemy do pwm spoczynkowa wartosc
     Close #1                                    ' zamykamy plik

     Return
    '===============================================================================

    '---PRZERWANIE OD TIMERA_ numer zalezny jakiego uzywamy, tu Timer1 -------------
    ' czestotliwosc liczymy dla 8 bit pwma fosc/510 dla prescale =1
    ' czyli dla 16MHz = 31,37kHz / dzielnik (2) = 15,68kHz blisko 16kHz
    '-------------------------------------------------------------------------------
     Timer1_przerwanie:

     If Dzielnik > 2 Then                        ' dzielnik F pwm /2 czyli ladowanie probek co drugie przerwanie
                                                  ' ustalamy czestotliwosc wystawiania probek do pwm
      Dzielnik = 1

      Pwm1a = Bufor(pozycja)                     ' ladujemy do pwm probke z bufora

        If Pozycja = 128 Then Pozycja = 0
         If Pozycja = 64 Then Buf_dol = 0
          If Pozycja = 0 Then Buf_gora = 0

          Incr Pozycja                           ' zwiekszamy wskaznik / nastepna probka

          End If

          Incr Dzielnik                          ' dzielnik przerwanie pwm/liczba= wav probkowanie

    Return
    '-------------------------------------------------------------------------------
     End
  • TermopastyTermopasty
  • #184
    Tomekddd
    Level 23  
    Witam, poskładałem własnie ten odtwarzacz i jutro będę próbował zaprogramować Atmege32 ale już dziś chciałbym się dowiedzieć jak ostawić jej FUSEBITY. Gdzieś w tym temacie pisało ze trzeba coś jeszcze z PWM ostawić żeby był mocniejszy czy coś również nie wiem jak to zrobić. Mam AVR Burn o mate z nakładką graficzną.
  • #186
    Tomekddd
    Level 23  
    a jak wyłączę JTAG to da się przez ISP zaprogramować?

    Dodano po 43 [sekundy]:

    i jaki głośnik dałeś, jaką impedancje i moc
  • #189
    Tomekddd
    Level 23  
    Teraz mam problem z BASCOMEM, wrzuciłem kod do kompilatora i najpierw wywalało mi błąd z biblioteka CONFIG_AVR_DOS.bas ale po skopiowaniu jej do miejsca w którym zapisuje program problem ustąpił teraz wywala mi błędy OUT OF SRAM space in file CONFIG AVR DOS.bas co tu poradzić?

    Dodano po 10 [minuty]:

    A tak ogólnie to jak to wszystko skompilować poprawnie łącznie z bibliotekami?
  • #190
    adambehnke
    Level 24  
    a jaki masz procek? M32 czy M16? Biblioteki kopiujesz do katalogu w którym masz swój plik program i po prostu kompilujesz. A w tym momencie zabrakło ci pamięci w procku.

    W załączniku masz lekko zmodyfikowaną bibliotekę avr-dos i powinno Ci się skompilować poprawnie.
  • #191
    Tomekddd
    Level 23  
    o teraz się skompilowało. Mam M32

    Dodano po 1 [godziny] 51 [minuty]:

    Atmega już zaprogramowana ale mam problem ze złączem karty, karta ciężko wchodzi i nie bardzo chce wyjść, chyba uszkodziłem to złącze. Druga sprawa to taka ze dioda podłączona do karty SD ciągle świeci tak ma być ?
  • #192
    adambehnke
    Level 24  
    No chyba chociaż przestudiowałeś schemat?? Jak karta jest włożona to ma świecić (ale dałem ją raczej z nadmiaru diod w szufladzie niż ze względów funkcjonalności). Ale ja stawiam że usmażyłeś złącze :) i pozwierały się piny. Lepiej dokładnie to sprawdź zanim stracisz kartę.
  • #193
    dasioo
    Level 14  
    wracajac do syntezatora mowy, to sklejanie glosek nie daje ladnych efektow, za duuuzo roboty :( Czy ta atmega dala by rade odtwarzac i nagrywac mowe na karte SD ?? Czy tutaj trzeba robic wszystko na AVR aby mozna bylo pisac??
  • #194
    atom1477
    Level 43  
    dasioo wrote:
    wracajac do syntezatora mowy, to sklejanie glosek nie daje ladnych efektow, za duuuzo roboty :( Czy ta atmega dala by rade odtwarzac i nagrywac mowe na karte SD ??

    Dała by radę.

    dasioo wrote:
    Czy tutaj trzeba robic wszystko na AVR aby mozna bylo pisac??

    Że co?
  • #195
    dasioo
    Level 14  
    pytałem czy warunkiem rozmowy tutaj jest prowadzenie projektu na procku AVR
  • #197
    Tomekddd
    Level 23  
    adambehnke wrote:
    No chyba chociaż przestudiowałeś schemat?? Jak karta jest włożona to ma świecić (ale dałem ją raczej z nadmiaru diod w szufladzie niż ze względów funkcjonalności). Ale ja stawiam że usmażyłeś złącze :) i pozwierały się piny. Lepiej dokładnie to sprawdź zanim stracisz kartę.


    Schemat przestudiowałem i właśnie ta dioda mi coś nie pasowała ona świeci nawet jak karty nie ma w złączu, a można tu założyć złącze SD nie mikro? bo by go było łatwiej przylutować a mikro już dwa popsułem i więcej nie mam
  • #198
    adambehnke
    Level 24  
    No używasz oczywiście takiego złącza jakiego potrzebuje twoja karta. Ale dobra rada, jak Ci nie idzie lutowanie złącza to kup sobie przejściówkę z mikrosd na SD i ją sobie przylutuj za pomocą paru kabelków. I w sumie to nie wiem jak chcesz założyć pełnowymiarowe złącze SD na pady przygotowane pod microSD ?? Chyba że robisz to sobie na płytce uniwersalnej lub prototypowej. Reasumując: to czy używasz karty SD czy mikroSD nie ma znaczenia. Zwróć uwagę na pinologię i to wszystko.
  • #199
    Tomekddd
    Level 23  
    No to przerobie na SD. Złącze dam na małą płytkę a połączę taśmą.
  • #200
    ugh123
    Level 13  
    Witam :D
    Bardzo mi się podoba pomysł z tym odtwarzaniem Wav :) projekt super ale mam pytanie czy dało by się przerobić ten kod tak żeby atmega8 potrafiła odczytać powiedzmy jakiś plik *.txt ?? Sorki za offtop ale widzę że w dyskusji uczestniczy wiele osób które maja sporo doświadczenia . Pozdrawiam serdecznie Bartek
  • #202
    ugh123
    Level 13  
    Aha no w moim przypadku to tylko Bascom a C odpada , ale dzięki za odpowiedź ;) czyli jutro kupuje Atmege 32 i ogień :D a czy Atmega 32 będzie się nadawać do tego co pisałem ?? Chodzi mi o otwieranie plików *.txt i powiedzmy jakieś obrazki *.bmp
  • #205
    Tomekddd
    Level 23  
    Mam kłopot z tym odtwarzaczem i nie wiem gdzie szukać. Odtwarzacz po wciśnięciu przycisku TEST zaczyna grać ale straszna jest jakość, słabo słychać i zbyt szybko gra , głośnik 8Ohm 1W. I co mnie jeszcze zastanawia to temperatura 7805 dosyć mocno wzrasta.
  • #206
    polprzewodnikowy
    Level 26  
    Tomekddd wrote:
    Mam kłopot z tym odtwarzaczem i nie wiem gdzie szukać. Odtwarzacz po wciśnięciu przycisku TEST zaczyna grać ale straszna jest jakość, słabo słychać i zbyt szybko gra , głośnik 8Ohm 1W. I co mnie jeszcze zastanawia to temperatura 7805 dosyć mocno wzrasta.


    A kwarc 16MHz dałeś czy inny? Może inne próbkowanie WAVa?
  • #207
    Tomekddd
    Level 23  
    Kwarc 16MHz i kondy do niego 33pF
    cały odtwarzacz ciągnie ok 100mA z zasilacza

    Dodano po 1 [minuty]:

    a przy wciskaniu TEST 170mA

    Dodano po 27 [sekundy]:

    plik mam WAV 8kHz mono

    Dodano po 5 [minuty]:

    Wina była pliku, dałem 16kHz mono 8 bit i prędkość jest ok tylko nadal jakość kiepska
  • #208
    polprzewodnikowy
    Level 26  
    Korzystasz z tranzystora jako wzmacniacza czy z np. LM386?
  • #209
    Tomekddd
    Level 23  
    LM386 teraz dałem głośnik 4Ohm 3W jest trochę lepiej

    Dodano po 47 [sekundy]:

    ale pobór wzrósł do 130mA i 7805 bardziej się grzeje
  • Helpful post
    #210
    WOBI
    Level 19  
    Stabilizator grzeje się, bo za duże napięcie na jego wejście podajesz i są duże straty mocy. Na 7805 optymalnie jest 9V podawać, a jak dajesz 12V lub więcej to masz duże straty mocy. P=U*I czyli (napięcie które podajesz - 5V) * prąd = moc strat jakie się wydziela na lm7805. np .podajesz 12V - 5V = 7V 7V*0,15A = 1,05W a to juz niezła moc która Cię "parzy". Co do jakości to nie jest HiFi i to tylko 8bitów rozdzielczości więc mowa, komunikaty będą dobrej jakości (akceptowalnej), a muzyka przy 16kHz próbkowania to tylko 8kHz pasma. Pisałem że przed konwesją w dół, trzeba poddać plik dźwiękowy obróbce bo inaczej masz duże szumy i słabą jakość. Wykonałeś mormalizację poziomu sygnału do 100% przed konwersją? To ważna czynność i do tego ograniczenie pasma do 8kHz. I taki plik będzie dopiero dobry.