TDA7313 Audio procesoriaus valdymas AVR mikrokontrolerio pagalba

Įvadas

Nors TDA7313 yra ganėtinai senstelėjusi mikroschema, tačiau vis dar sėkmingai naudojama. Audio procesorius pasižymi neblogu valdomų funkcijų rinkiniu, taip pat jai būdingi nedideli iškraipymai bei žemas triukšmo lygis. Audioprocesorius puikiai tinka automobilinėj garso aparatūroj, bei kitose HI-FI prietaisuose įskaitant ir mikšerius.

TDA7313 mikroschema turi programiniu būdu pasirenkamus 3 stereo įėjimus ir 4 išėjimus LF, LR, RF, RR. Kiekvieno įėjimo kanalo slopinimas gali būti reguliuojamas programiškai (įskaitant Loudness funkciją), atitinkamai kiekvieno išėjimo slopinimas taip pat gali būti paderinamas. Tokiu būdu galima suderinti sistema optimaliam skambėjimui. Čia taip pat numatytas garso lygio reguliavimas 1.25dB žingsniu, BASS ir Treble kontrolė. Visas audioprocesoriaus valdymas vyksta naudojant I2C (TWI) prievadą. AVR Atmega8 mikrokontroleris tam puikiai tinka.

board3.jpg

Aprašymas

Pagrindinė šio projekto mintis buvo sukonstruoti paprasta, universalų su intuityviu valdymo audioprocesorių, kurį daug negalvojant būtų galima jungti prie bet kokios sistemos – ar tai būtų stiprintuvas, ar tai būtų aktyvios kompiuterio kolonėlės ar mikšerinis pultas. Svarbu kad audio procesorius veikia kaip atskiras prietaisas kuris priima signalą, jį apdoroja ir siunčia toliau. Valdymas atliekamas 5 mygtukų pagalba, o valdymo informacija pateikiama 2X16LCD displėjuje.

Labiausiai norėjosi padaryti prieinama visą audio procesoriaus funkcionalumą paprastu ir intuityviu valdymu.

Schema ir PCB plokštė

Schema buvo pasirinkta tokia pati kaip ir TDA7313 aprašyme. Gal būt precizinių elementų elementų pasirinkimas ir įtakotų kokybę, tačiau į tai dėmesys nebuvo kreiptas.

Schema

Kuriant PCB didžiausias dėmesys buvo kreipiamas į Analoginio ir skaitmeninio signalo takelių bei analoginio ir skaitmeninio GND atskyrimą. Būtent šis faktorius daugiausiai įneša triukšmo į naudingą signalą.

gnds.jpg

Pati plokštė suprojektuota viename sluoksnyje. Todėl ją nesunku pagaminti namų sąlygomis.

pcb.png

Realus plokštės vaizdas

board1.jpg

Programos rašymas

Sunkesnė užduotis – programos rašymas. Pirmiausia buvo mintis LCD ekrane atvaizduoti decibelus skaitmeniškai, pvz, Volume -21dB. Tačiau galiausiai nusprendžiau panaudoti progress bar funkcija ir atvaizduoti parametro dydį grafiškai. Tai ne tik patraukliau atrodo, bet ir paprasčiau suprantama. Kaip minėjau pagrindinis tikslas visų galimų parametrų valdymas. Taigi parametrai ir jų ribos:

  • Garsas(Volume) [-78.75dB to 0dB] + Mute;

  • BASS [-14dB to 14dB];

  • Treble [-14dB to 14dB];

  • Įėjimai [Ch1, Ch2, Ch3];

  • Įėjimo lygis [0dB to +11.25dB] +Loudness;

  • LF išėjimo slopinimas [-38.75dB to 0dB];

  • RF išėjimo slopinimas [-38.75dB to 0dB];

  • LR išėjimo slopinimas [-38.75dB to 0dB];

  • RR išėjimo slopinimas [-38.75dB to 0dB];

Parametrų valdymui puikiai tinka linijinis meniu kai viršutinėje LCD eilutėje vaizduojamas parametro pavadinimas, o apatinėje parametro lygio indikatorius. Meniu modelis:

menu.jpg

Meniu valdymas atliekamas specialiai išdėstytais mygtukais:

panel.jpg

Apie patį valdymą nėra daug ką ir rašyti, nes manau pakankamai intuityvu. [UP] ir [DOWN] mygtukai skirti vaikščioti po meniu, o [+] ir [-] skirti esamo parametro keitimui. Jeigu parametro keitimo mygtukas laikomas nuspaustas ilgesnį laiką tai parametras tolygiai keičiasi automatiškai.

[Mute] mygtukas atlieka dvejopą funkciją. Jeigu aktyvus meniu yra Volume, tai nuspaudus [Mute], garsas yra išjungiamas ir meniu lieka neaktyvus kol Mute nėra išjungiamas pakartotinai paspaudus [Mute]. Kai aktyvus meniu yra Input gain, tai mute paspaudimas įjungia Loudness funkciją aktyviam įėjimo kanalui. Mute ir Loudness nustatymai matomi Volume meniu kaip MT ir LD indikatoriai.

Jeigu norite išbandyti meniu veikimą, tai galite parsisiųsti Proteus simuliatoriaus failą kartu su hex byla (Meniu simulatoriaus bylos). Hex byla turi būti užkraunama į modelį. (išbandyta su Proteus 7.1 SP2)

Audioprocesorius išsisaugo paskutines parametrų reikšmes EEPROM atmintyje praėjus apie 10s po paskutinio parametro keitimo. Todėl kas kart įjungus audioprocesorių, bus atsimenamos paskutiniai nustatymai.

Išvados

Kiek išbandžiau viskas veiki. Bandydamas adioprocesorių į įėjimą padaviau garsą iš MP3 grotuvo o išėjimą pajungiau prie aktyviu kompiuterio garsiakalbių. Maitinimą ėmiau iš kompiuterio maitinimo blogo, tad apie kokybę nelabai ka ir pasakysi. Jeigu jungsite garsiakalbius prie audioprocesoriaus išėjimo be tarpinių stiprintuvų – tai garso negirdėsit, nes išėjimas tiri būti jungiamas prie didelės įėjimo varžos prietaiso, pvz., stiprintuvo.

Programos kodas nėra optimalus, nenustebčiau jeigu ir kokia klaida išlįstų, tačiau pirmieji bandymai parodė, kad visų funkcijų valdymas veikia. Jeigu kas norės pasigaminti šį prietaisą -komentarai, klaidų pastebėjimai visada laukiami.

Projekto bylos(Eagle projektas+WinAVR projektas+TDA7313.hex).

Skelbta Elektronika Pažymėti: , ,
51 comments on “TDA7313 Audio procesoriaus valdymas AVR mikrokontrolerio pagalba
  1. Ignas parašė:

    Gal gali mestelt programa ASCII formatu ?

  2. admin parašė:

    Truputi nesupratau kodel reikia programos ASCII formatu. Yra Archyve C kodas, sukompiliuotas hex failas, kuris gali buti konveruojamas i .bin jeigu reikia.

  3. Matas parašė:

    Gal gali paaiškinti kaip reikia atskirti skaitmenini ir analogini GND?

  4. admin parašė:

    Na keliais žodžiais čia labai nepaaiškinsiu. Aišku nesu specialistas tame reikale, bet vistiek yra bendri principai kurių laikantis galima žymiai išvengti triukšmo:
    1. Stengtis atskirti analoginę žemę nuo skaitmeninės. Patogu kai yra daroma dvipusė plokštė. Šios žemės gali būti trapusavyje sujungtos mažos varžos rezistoriumi;
    2. Stengtis kad skaitmeninio signalo takeliai nesikirstu su analoginiais. Analoginė dalis turi būti visiškai atskirta nuo skaitmeninės (atskiras regionas plokštėje). Paimk bet kokį mikrokontrolerį kad ir Atmega8 QFP korpuse ir pamatysit kaip graziai analoginiai išvadai yra viename kampe. Neatsitiktinai tiap.
    3. Stengtis kad žemės būtų kuo solidesnės. Vėl gi esant daugiasluoksnei plokštei paprasta užduotis, o vienpusei sunkiau įgyvendinama. Tai aiškinama tuo, kad kuo žemės takeliai storesni, tuo mažesnis jų impedansas, tuo mažesnis elektromagnetinis spinduliavimas dėl įtampos kritimo.
    4. Reikia stengtis kad analoginiai ir skaitmeniniai takeliai neitų lygiagrečiai plokštėje. Vien dėl to kad nepasigautų vienas nuo kito triukšmo.
    5. Na ir paskutinė taisyklė būtų ta jog trasuojant plokštę reikia atidžiai kad nebūtų GND uždarų ciklų. Žemė turi šakotis tarsi medis iš vieno taško.
    Šiame audioprocesoriuje stengiausi atskirti skaitmeninę ir analoginę dalį, kaip pavyko – patys matote 🙂

  5. Ryciukas parašė:

    Neveikia LD laudnes. kai nuspaudi tai dingsta garsas. Ar programa pats rasei? kaip padaryti hex faila paciam?

  6. Ryciukas parašė:

    gal zinai kokia schema kad mp3 info isvestu i LCD. Kad ir dainos laikas ir tekstas butu rodomas?

  7. admin parašė:

    Programą pats rašiau, pas manes Laudness veikia kai testavau. Laudness nusistato toj meniu vietoj kur pasirenki Audio kanalą. Tada spaudant Mute mygtuką LD junginėjasi. Hex failas yra projekto archyve. O jei nori pats kompiliuoti, Ta reikia daryti su WinAVR programa.
    ……
    Del MP3 info tai kaip suprantu nori nuo winamp nuskaityti. Tai pasieskok paprastos jungimo schemikes prie LPT (http://lcdsmartie.sourceforge.net/circuits.htm) ar net USB porto. O valdymas ten su LCD smartie (lcdsmartie.sourceforge.net) ar kita panašia programa vykdomas.

  8. Ryciukas parašė:

    jo jo tai taip , spaudziu ten kur yra audio chanels, uzsidega LD bet izkarto uzsimutina. Na nzn klaida kur gali buti juk schema tai paprasta.
    hm man yra noras padaryti sudetingiau, kad nuo nesiojamo grotuvo rodytu info. beje gal padetum su programavimu ? man reikia nemokamos programos kad pradziai paprastai issiaiskinti kaip sukompiliuoti. winavr ir avr studio bandziau bet kolkas nesupratau kur yra hex, kai pradedavau make all tai kazko neranda ir fsio 😀

  9. admin parašė:

    Programa reikia kompiliuoti su WinAVR. Gal gali konkrečiau kokias klaidas ten meta. Ka tik išbandžiau perkompiliuoti – be klaidų. Jeigu šviežiai susiinstaliavai WinAVR taiperkrauk kompa, galil buti kad sisteminiai kintamieji nebuvo detektuoti. Jeigu vistiek neina, tai mestelk kokios klaidos … žiūrėsim.

  10. Ryciukas parašė:

    gaila dabar ne namie , o darbe, tai neturiu po ranka LCD , BET atsimenu kad gliukas toks buvo: kai nuspaudi LD uzsiziebia viskas gerai, bet garsas pradingsta ir tada kai eini per meniu tai rodo hieroglifus visokius ё?*?%%;“№“№!№!“Ё№. tada nuemu LD ir vel viskas gerai.
    Siaip turiu du norus is taves : kad padetum pamodifikuoti programa biski, nes man pvz nereikia RR ir LR kaip juos panaikinti? gal galima padaryti tada tik viena punkta balance for LF ir RF. kitas noras ismokti programuoti paciam. Tik nenoriu cia tersti diskusijos ne i TEMA !! 🙂

  11. admin parašė:

    Šitą audioprocą dariau norėdamas padengti visą jo funkcionalumą. Aišku specifiniams reikalams to yra per daug. Turėtų būti nesunku modifikuoti į paprastesnį variantą.
    Tada siūlau persikelti i forumą ir ten gvildenti tą reikalą.
    http://diskusijos.dreifas.net/viewtopic.php?t=178&start=105&postdays=0&postorder=asc&highlight=

  12. Aivaras parašė:

    Sveiki, sorry esu truputeli zhialias todel domina keli klausimai del zhemes. Mazhdaug priesh kelis men pasidariau shita projekta, viskas veikia +/- puse bedos, tik kai pajungdavau ishsipuzdavo dinamikas, nes pastoviai tekedavo apie 0.2V. Ir apskirtai nelabai zhinau kaip junkti zhemes, yra 3 maitinimai nuo AVR kontrolerio +|-5 nuo TDA7313 +|- 9 bei signalo iejimas +|- dabar idomu kaip jukti visus minusus, taprasme kurie skaitos kaitmeniniai kurie analoginiai, kiek suprantu skaitmeninis tai nuo AVR microcontrolerio, o kaip tada sujunkti koloneliu bei iejimo ir 9V minusus ar i kruva ar tai tik iejimo bei ishejimo (kolonkiu) – turi but kruvoj o 9V minusas i digital.. ar kaip..
    Isanksto dekui, bei atsiprasau uz toki zhalia klausima.

  13. Ryciukas parašė:

    S.O.S reikia kad padarytum (perkompiliuotum programke) .
    Man reiktu kad:
    1. Vietoj atskiru LF RF, kad butu priekinis stereo reguliuotusi t.y. kaip paprastas balansas su viena meniu funkcija balance .
    2. Vietoj atskiru RL RF. kad butu pavadinimas BASS ir jie vienu metu reguliuotusi. t.y. kaire ir desine vienu metu, kad butu galima prie subo prijungti. stipriakas su stereo iejimu uztiltintas.
    AR aisku ? 🙂
    paciam sunku padaryti nes neikertu kaip .

    • admin parašė:

      Gaunasi biski „custom“ programavimas. Laiko turiu neperdaugiausiai be to nebeturiu pačios plokštės kad būtų galima išbandyti.

      Realiai 2. variantas turėtų būti labai paprastai sutvarkomas – sukelti RL ir RF i viena meniu funkciją o 1. reikia pertvarkyti meniu kazkiek. Su geru noru padaromas dalykas. Pabandysiu laiko turėdamas.

      P.S. Tai bandai pajungti šį audioprocesorių į darbą. pasidalink mintimis kaip ten realizuoji. Įdomu gi 😉 O jei dar aprašymą kokį nepatingėtum parašyti šiam puslapiui – tikrai labiau pasistengčiau padėti su programa 🙂

      • Ryciukas parašė:

        tai vat kad nezianu kaip pasidaryti, nes ankciau tai dar kazka pats programinau, bet nebeprisimenu kaip tai daryti. Gal primink kokiu programkiu reikia? as turiu avr studio bet negaliu atitaryti main_elf , kazkodel nuluzta. Tai jeigu bendrom jegom as tau irgi padeciau. Tiesiog pasidares ankciau sia schema bet taip ir gulejo po lova. dabar nusprendziau pajungti i darba kad netinginiaustu :). VNZ. padarysiu nieko naujo  2.1 sistemike. Galeciau ir aprasyti, kai viska padarysiu :))) .

        • admin parašė:

          Programa rašiau su WINAVR Programmers Notepad. Norint kad eitu su AVRStudio biski reiketu projekto failus pertvarkyti. Bet kokiu atveju WinAVR reikalingas. pabandziau eprkompiliuoti koda – klaidu neismete.

          O siaip manau damušim koda kaip nors. Bent su tuo balanse tavo pasiūlytas variantas skamba geriau nei kiekvieno išėjimo lygio reguliavimas. Tik kaip sakau apsunkina viska kad neturiu platos kur pabandyti.

          Darykis hardwara – jei ka pakompiliuosiu ir siusiu tau tikrinti :). Diskusija galime perkelti i foruma – ten eina prisegti failus.

          • Ryciukas parašė:

            gerai tada, tik kaip parsisiusti is taves koda?

          • Ryciukas parašė:

            isirasiau,bet nepasikeite , ar reikia pasijunkti kalaskes kad pajusciau valdymo skirtuma?

            MAn gi reikia meniu punkto balance ir subwoofer . 🙂 beje, gal galima pabendrauti per skaipa?

          • admin parašė:

            Ten tame kode kol kas niekas nepakeista – ta itik paskutine versija senojo, kuris turi teisingai veikti pagal seną įdėją. Su nauju taip greitai neis 🙂 Permeciau akimis koda – reikia nemazai perprograminti – praktiskai atkrenta du meniu kuriuos reikia graziai ismesti kad negriutu visas kodas. Kitas dalykas balanso vaizdavimas – galvoju kaip protingiau ir greiciau realizuoti. Kai bus pirmas pakeistas variantas rimciau ziuresim. Sunku laiko rasti dabar – remontais apsivertes…

          • Ryciukas parašė:

            hm.. tai bent sakei kad gali lengvai padaryti kad reguliuotusi abu kanalai, tai man pradziai to pakaks. o kai turesi laiko likusia dali.

          • admin parašė:

            Pasistengsiu

          • Ryciukas parašė:

            ……….i am waiting 🙂

          • admin parašė:

            Palikim sita reikala iki 2009 😀 niekaip dabar neatsilaisvinu is darbu.

          • Ryciukas parašė:

            ar keiti ka nors kode? Cool

  14. admin parašė:

    Naujausias kodas yra čia: http://www.dreifas.net/audioprocesorius-mikrokontroleris#comment-1101
    Parsisiųsti gali tik registruotas vartotojas. Jei kils keblumu duok zinia.

  15. Ryciukas parašė:

    o kaip sukurti nauja tema ? :> nes noriu papoustinti keleta temu 🙂

  16. deiwx parašė:

    Sveiki, iskilo man problema (gal ne problema bet mano nemoksiskumas 😐 ) tai va, vargais negalais pasidariau as si audio procesoriu uzprogramavau, bet lcd ekranelyje nerodo nieko, t.y. pirmoj eilutej rodo juodus langelius (cia taip buna kj tarkim pajungi 3 koja i gnd). viska pertikrinau ir niekur neatradau jokios klaidos, tai itariu kad blogai uzprogramavau atmega. programavau taip: ponyprog->setup->interfeice setup->nustaciau programatoriaus tipa-> calibration->nuskaiciau atmega-> atsidariau tda7313.hex->write. Gal ka kitaip reikejo daryt? kamnors buvo taip? kame problema?

  17. deiwx parašė:

    gal kas galetumet parasyt detaliau, kaip reik uzprogramuot?

  18. deiwx parašė:

    dar bandziau programuot pagal sita totoriala http://www.active-robots.com/products/controllr/atmel-avr/pony-prog-guide.pdf …bet vel gi nesekmingai/// ;(

  19. deiwx parašė:

    deja, nepadejo…ekranas tiesiog nereguoja 😐 ,ai dar pastebejau toki dalyka, kai pajungi apsvietima lcd, jis vos vos sviecia, pamatavus su testeriu rodo 3.5v o atjungus rodo 4.97v … kazkokia nesamone cia… buvo sovus man tokia mintis kad kaltas lcd, tj nusprendziau pajunkti prie lpt, pajungus ir nustacius lcd smartie viskas veike idealiai…pertikrinau dar karta plokste ir visas varzas…viskas buvo gerai…

  20. deiwx parašė:

    na ka, praejau su testeriu visas atmegos kojales ir pastebejau kas 2 kojales nesiliecia prie plokstes, ryt pabandysiu prilituot ir tikekimes kad veiks 🙂 , o del ekrano sviesumo, tj nuimk 500ohm varza ir uztrumpink tada svies normalei, arba koki potenca uzmesk, galesi reguliuot sviesuma ( as taip pasidariau 😉 …)

  21. deiwx parašė:

    na ka, uzdejau daugiau lytmetalio ant koju atmegos pajungiau ir veikia 😀 ! Ryciukas dekui uz patarimus 😉

    • Ryciukas parašė:

      Kokie patarimai ? 😀 juk sakiau viska patikrink !! siaip as pats neseniai sudejau viska i korpusa ir klausausi dabar :). Tik idomu ar pas tave nesnypscia kai atsuki max ant aukstu? nes kazkaip man atrodo biski per daug.  

  22. deiwx parašė:

    kode nieko nekeiciau, nes nemoku, nors reiktu pakeisti is rr ir rl kanalu i viena uzvadinta subwoofer ar pan… klausyt dar nebandziau nes neturiu ant ko….reikia isigyt kodiku savajai sistemai kad pabaigt dalinai ja, bet vat kainuos jie 66lt 😐 ….

    • Ryciukas parašė:

      Crytai ir as prasiau dreifo kad pakeistu  LF LR , RF RR i balance ir subwoofer. ,bet.. nesulaukiuCry

  23. deiwx parašė:

    tai gal jei daugiau zmoniu atsiras norinciu kad pakeistu ta balansa ir padarytu subwoofer, gal jis ir padarys…esam jau du kuriems reikia to ;D

  24. admin parašė:

    Entuziastai renkasi… 😀 … koda sutvarkysim kaip nors. Man didziausias stabdis yra kad neturiu plokstes prie saves – sunku testuoti. O ir laiko dabar mazai turiu prisesti. Kaip matau dar turit ka veikti su stiprintuvo dalimi – softas sioks toks veikia patikrinimui kol kas.

    • Ryciukas parašė:

      Na tai negali tiesiog pakeisti koda ir atsiusti emailu pvz as greitai patikrinu ir pasakau kas blogai. Nes taip nezinau kada ir prisesi…

  25. deiwx parašė:

    pabandymui tj tikrai tinka, tiesiog nesinori kad kai bus stiprius padarytas tik tada valdyma tvarkyt….bandyt gi softa galima simuliuojant ji su proteus 7…

  26. deiwx parašė:

    dar greiciau butu per skype 🙂

  27. admin parašė:

    Forume įdėjau kodo variantą. Pabandykit.

  28. ketvirtasis parašė:

    Gal galit kas pasakyti kokius „foose bit-us“ reikia nustatyti irasant naujausia HEX faila, naudojant PonyPROG 2.07a

    • Markus parašė:

      Kuom skiriasi main hexas is sukompiliuoto  projekto nuo main hexo kuris kartu su proteus projektu? nes veikia tik su hexu kuris proteusui skirtas.

  29. Markus parašė:

    Pas mane uzfliasinus main hexa is sukompiliuoto projekto bilos neveikia migtukai, uzfliasinus main hexa is folderio su proteus failiuku – tada veikia. kame reikalas?

    • admin parašė:

      Sunku pasakyti. nebeturiu tos plokstes kad patikrinti.

      [quote=Markus]

      Pas mane uzfliasinus main hexa is sukompiliuoto projekto bilos neveikia migtukai, uzfliasinus main hexa is folderio su proteus failiuku – tada veikia. kame reikalas?

      [/quote]

Palikti atsakymą: Ryciukas Atšaukti atsakymą