Sisukord:
- Samm: nõuded
- 2. samm: spetsifikatsioonid
- 3. samm: alustamine
- 4. samm: väike vooluring
- Samm: võtke jootekolb välja
- 6. samm: DAC -i testimine
- Samm 7: Wav päise lugemine
- Samm: katkestage, katkestage…
- 9. samm: katkestused ja kahekordne puhverdamine
Video: Helifailide esitamine (Wav) Arduino ja DAC -iga: 9 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Esitage wav -faili heli oma Audino SD -kaardilt. See juhend annab teile teada, kuidas teie SdCardil olevat wav -faili saab lihtsa vooluahela kaudu kõlarisse esitada.
Wav -fail peab olema 8 -bitine mustvalge. Mul pole olnud probleeme 44 KHz failide esitamisega.
Kuigi helikvaliteet pole ülitruudus, on see väga rahuldav.
Faili valimiseks kasutatakse jadamonitori. Failid peavad olema kaustas nimega adlog.
See juhis tuleneb varasemast projektist, kus salvestasin Wav-salvestused SdCardile:
Vooluahel kasutab odavat 8 -bitist digitaal -analoogmuundurit (DAC) ja ühe kiibiga helivõimendit.
Katkestuste seadistamise võtmejaotised on võetud Amanda Ghassaei suurepärasest artiklist:
Samm: nõuded
Arduino- ma kasutan Megat, kuid pole põhjust, miks Uno ei peaks töötama.
SdCardi lugeja-programm on konfigureeritud: MicroSD Breakout Board Regulated with Logic Conversion V2
Vaadake seda juhendit SdCardi seadistamise üksikasjade kohta:
DAC0832 LCN- suurepärane 8-bitine digitaal-analoogmuundur- paar naela.
LM386 N-1 Op amp- odav kiipidena
20 -suunaline kiibipesa
8 -suunaline kiibipesa
9-voldine toide- aku sobib.
LM336 2,5 V pinge võrdlus
10uF kondensaator * 3 (pinge üle 9V)
10 oomi takisti
50 nF kondensaator- (Või kusagil 47nF, 56nf, 68nf lähedal)
220uF kondensaator
64 oomi kõlar
10K lineaarne potentsiomeeter
Kaabel 8 andmeliini ühendamiseks Arduino ja vooluahela vahel
Unol on 8 ühendust reas, Megal paarikaupa.
Megas kasutasin 10 -suunalist lintkaablit 10 -suunalise IDC -päisega. (2 juhet on varuks)
Pistikupesad 0V, 9V ja DAC väljundiks
Vaskriba, jootmine, traat, lõikurid jne
2. samm: spetsifikatsioonid
Seerianumber 115200 baud.
Toetatakse Mega abil töötavat Hobbytronics MicroSD Breakout Boardi. Kiibi valik ja muud pordid muutuvad Mega ja Uno vahel.
Wav-failid peavad eksisteerima kataloogis nimega adlog- nimetage see julgelt millekski muuks ja korraldage vajalik kodeerimine uuesti.
Wav -fail peab olema 8 -bitine mustvalge. Olen testinud kuni 44KHz.
Sarjamonitor kuvab wl -failid kaustas adlog. Failide nimed saadetakse monitori väljundliinilt.
Faili suurust piirab ainult SdCardi suurus.
3. samm: alustamine
Ühendage SD -kaardilugeja. Need on Mega ühendused.
0, 5V
CLK kuni tihvtini 52
D0 kuni tihvt 50
D1 kuni tihvt 51
CS kuni tihvtini 53
(Uno pordiühenduse leiate tarnijate veebisaidilt)
Soovite testida, kas teie kaart töötab selles etapis- kasutage müüja pakutavaid skripte.
Peame tegema väikese ahela
Saadame Arduino helibaitide voo.
Need numbrid on vahemikus 0 kuni 255. Need tähistavad pinget.
Vaikus on 127-128.
255 on kõlari koonus ühes suunas raske.
0 on kõlari koonus teistpidi raske.
Nii salvestatakse heli salvestatud numbritena, mis tekitavad erineva pinge, mis tekitab liikuvaid kõlarikoonuseid.
Võime saata numbrid Arduino 8 realt korraga, kasutades "porti".
Kui sisestame 8 rida digitaalsest analoogmuundurisse, siis teeb see tinale öeldut ja annab analoogpinge, mis on proportsionaalne digitaalse numbriga.
Kõik, mida peame tegema, on pinge pakkimine väikesesse operatsioonivõimendisse ja seejärel kõlarisse.
4. samm: väike vooluring
DAC0832 LCN
See on suurepärane, odav 8 -bitine digitaal -analoogmuundur. (DAC)
Seda saab täielikult juhtida massiivse andmemahutiga, andmete näidisliinidega.
Või saab selle seadistada nii, et see teeks kõik automaatselt jaotises „Vool läbi toimingu”.
Kasutusjuhendi tsiteerimiseks:
CS, WR1, WR2 ja XFER lihtsalt maandamine ja ILE kõrge sidumine võimaldab mõlemal siseregistril järgida rakendatud digitaalseid sisendeid (läbivool) ja mõjutada otseselt DAC analoogväljundit.
OK, neli kiibiühendust on madal ja üks 9V - lihtne.
Me ei soovi negatiivseid pingeid välja, nii et käsiraamat ütleb, et peaksime kasutama "pinge lülitusrežiimi" ja need annavad skeemi.
Kõik, mida peame tegema, on nende soovitatud asemel asendada väike helivõimendi.
Helivõimendi LM386-N
Võimendi käsiraamat sisaldab minimaalset osade skeemi- võimendust 20 (meie jaoks liiga palju, kuid sellel on helitugevuse regulaator).
Kõik, mida peame tegema, on kondensaatori lisamine DAC -i ja võimendi vahele, nii et võimendame ainult vahelduvvoolu signaale.
Peame iga kiibi toitepistiku lähedale lisama ka paar kondensaatorit, vastasel juhul saame 9 V toiteallikast suminat.
Samm: võtke jootekolb välja
Kuna vooluring on lihtne, ei kavatse ma löögikontoga lööki anda.
Siin on mõned näpunäited:
- Valmistage tükk vasest ribaplaati vähemalt 28 x 28 auguga. (Jah, ma tean, et ajukirurgid võivad selle väiksemaks muuta)
- Kui kavatsete seda kruvidega kinnitada, lubage need alguses!
- Paigaldage kiibid pistikupesadele. Sisestage kiibid alles siis, kui kõik on kontrollitud.
- Hoidke sisendjuhtmed väljundist eemal.
- Jälgige kondensaatorite õiget polaarsust.
- Vaadake diagrammilt LM336 pinge võrdlusbaasi põhivaadet. Reguleerimisjalga ei kasutata ja seda saab lõigata.
- Pange tähele otseühendust DAC-i tihvtiga 8- see on testimiseks väga kasulik.
- Ühendasin Audino lintkaabli ja 10 -suunalise IDC -pistikuga.
- Uno ühendused on sirgjoonelised - võite avastada, et 8 sisendühenduse paigutamine ühele sirgjoonele võimaldab teil Arduinoga linkida ostetud, valmis 8 -suunalise ühendusega,
Kui see on tehtud- kontrollige jootmist ja kontrollige vaskradade vahede vahel.
Leian, et 36 tpi juunioride häkkimissael on väga kasulik prahi puhastamiseks. Eemaldan lõiketera tihvtid ja libistan teraotsa rööbasesse- Ilmselgelt pole tera raamis.
6. samm: DAC -i testimine
Jätke ühendus vooluahela ja Arduino vahel välja.
Seadke oma vooluahela helitugevuse regulaator poole peale.
Lülitage 9 V alalisvool sisse oma uuele vooluringile.
Kontrollige, kas vooluring on korras- ma ei võta teie vooluringi eest mingit vastutust!
Lülitage toide välja
Ühendage oma vooluring Arduinoga.
Kasutage Mega tihvte 22-29. (PORTA) Ärge eksitage kahte ülaltoodud 5V kontakti!
Uno-l kasutage tihvte 0-7. See on PORTD
Ühendage oma toiteallika 0V Arduino 0V -ga.
Lülitage sisse.
Avage see testprogramm DAC_TEST
UNO puhul asendage kõik viited PORTA -le PORTD -iga
Asendage DDRA DDRD-ga- see käsk määrab kõik 8 rida ühe korraga. See on andmete suundade register.
Seadistage seeriamonitoriks 115200.
Ühendage voltmeeter DAC -väljundi ja OV vahel
Programm seab väljundiks 255 - kõik liinid on sisse lülitatud - maksimaalne pinge.
Väljund 128- pool maksimaalsest pingest.
Väljund 0- nullpinge (või tõenäoliselt peaaegu null).
Seejärel liigub see bitide kaupa: 1, 2, 4, 8, 16, 32, 64, 128
Pinge peaks pidevalt tõusma.
Kui pinge langeb arvu suurenemise ajal tagasi, on tõenäoliselt kaks omavahel ühendatud juhtmest tagurpidi.
Samuti peaksite kuulma, kuidas pinge muutudes kõlar vaikselt klõpsab
Samm 7: Wav päise lugemine
Wav -failid salvestatakse kindla sageduse ja andmete suurusega.
See teave sisaldub 44 -baidises päises wav -faili alguses.
Kuigi mõni tarkvara laiendab päist (pärast baiti 35), muutes andmete suuruse asukoha raskemaks.
Päise lugemiseks loome puhver ja kopeerime faili alguse.
Sagedus salvestatakse faili 4 baiti, alustades 24 baidist.
// lugemise sagedus, mis on määratud wav -faili päises
bait headbuf [60]
tempfile.seek (0);
tempfile.read (headbuf, 60);
retval = headbuf [27];
retval = (retval << 8) | headbuf [26];
retval = (retval << 8) | headbuf [25];
retval = (retval << 8) | headbuf [24];
Serial.print (F ("Faili sagedus"));
Serial.print (kordus);
Parim viis andmete suuruse leidmiseks on otsida päisest sõna "andmed".
Seejärel eraldage sellele järgnevad 4 baiti, mis moodustavad pika väärtuse
allkirjata pikk retval;
int mypos = 40;
jaoks (int i = 36; i <60; i ++) {
kui (headbuf == 'd') {
kui (headbuf [i+1] == 'a') {
if (headbuf [i+2] == 't') {
kui (headbuf [i+3] == 'a') {
// lõpuks on see meil olemas
mypos = i+4;
i = 60;
}
}
}
}
}
tempfile.seek (mypos);
retval = headbuf [mypos+3];
retval = (retval << 8) | headbuf [mypos+2];
retval = (retval << 8) | headbuf [mypos+1];
retval = (retval << 8) | headbuf [mypos];
OK, meil on andmete pikkus ja sagedus!
Heliandmed järgivad andmebaasi pikkuse väärtust moodustavat 4 baiti.
Samm: katkestage, katkestage…
Kasutame sagedusteavet, et luua tarkvara katkestus nõutaval sagedusel või selle lähedal.
Katkestust ei saa alati täpselt määrata, kuid see on piisav. Failist loetud sagedus edastatakse alamprogrammile setintrupt.
void setintrupt (float freq) {float bitval = 8; // 8 8 -bitiste taimerite 0 ja 2 jaoks, 1024 taimer 1 baidi jaoks
setokroo = (16000000/(sagedus*bitval)) - 0,5;
// Setokroa väärtus nõuab lahutamist -1. Kuid lisades 0,5 ringi 0,5 täpsusega
// Taimeri eraldusvõime on piiratud
// Lõppkokkuvõttes määrab bitvalli suurus
cli (); // keelata katkestused // seada taimer2 katkestus
TCCR2A = 0; // määrake kogu TCCR2A register väärtuseks 0
TCCR2B = 0; // sama TCCR2B puhul
TCNT2 = 0; // lähtestada loenduri väärtus väärtuseks 0
// määrake võrdluse vasteregister sageduse (hz) juurdekasvude jaoks
OCR2A = setokroo; // = (16*10^6) / (sagedus*8) - 1 (peab olema <256)
// lülitage CTC -režiim sisse
TCCR2A | = (1 <WGM21); // Määra CS21 bit 8 eelskalerile
TCCR2B | = (1 <CS21); // lubage taimerite võrdlus katkestada
// TIMSK2 | = (1 << OCIE2A); // see toimib, nagu ka järgmine rida
sbi (TIMSK2, OCIE2A); // katkestuse lubamine taimeril 2
sei (); // katkestuste lubamine
Teadlikumad lugejad on märganud sbi (TIMSK2, OCIE2A)
Seadistan paar (Interneti kaudu omandatud) funktsiooni registribittide seadistamiseks ja kustutamiseks:
// Määrab registribittide kustutamiseks#ifndef cbi
#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
#endif
// Määrab registribittide seadistamiseks
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))
#endif
Need funktsioonid võimaldavad katkestuse seadistamiseks või kustutamiseks hõlpsalt helistada.
Nii et katkestus töötab, mida me saame teha?
9. samm: katkestused ja kahekordne puhverdamine
Kiirusel 22 khz väljastatakse iga 0,045 ms tagant audioandmete bait
512 baiti (puhvri suurus) loetakse 2,08 ms jooksul.
Seega ei saa puhvrit ühe kirjutamistsükli jooksul SDCardilt lugeda.
Siiski kirjutatakse sadamasse 512 baiti 23,22 ms jooksul.
Nii et kõik, mida me peame tegema, on seadistada uus fail, mida loetakse iga kord, kui puhver tühjeneb, ja meil on piisavalt aega andmete hankimiseks enne uue andmeploki nõudmist … Eeldades, et kasutame kahte puhvrit, tühjendame ühe, kui täidame teist.
See on kahekordne puhverdamine.
Faili lugemist aeglustab korduv katkestamine, kuid see saab tehtud.
Mul on seadistatud kaks 512 -baitilist puhvrit bufa ja bufb.
Kui lipp on halb, loeme portast, vastasel juhul loeme portbist
Kui puhverpositsioon (bufcount) jõuab puhvri suurusele (BUF_SIZE 512), seadistame lipu readit väärtuseks true.
Tühjusringi rutiin otsib seda lippu ja alustab ploki lugemist:
if (readit) {if (! aready) {
// algatada SDCardi ploki lugemine bufaks
tempfile.read (bufa, BUF_SIZE);
} muud {
// algatada bufb -le loetud SDCardi plokk
tempfile.read (bufb, BUF_SIZE);
}
readit = vale;
}
Kui see on lõpetanud rutiinsed lipud readit = false.
Katkestusrutiini raames peame kontrollima, kas tühjustsükkel on lõppenud, kontrollides, kas readit == false.
Sel juhul anname märku, et on vaja uuesti lugeda, ja lülitame puhvrite vahetamiseks aready lipu.
Kui SD-kaarti veel loetakse, peame ühe näidu (loendur--; bufcount--;) tagastama ja katkestusest väljuma, et hiljem uuesti proovida. (Heliväljundi signaalil tehtud klõpsud viitavad sellele, et see on toimunud.)
Kui kõik andmed on loetud, katkestatakse katkestus, seadistatakse port uuesti keskpinge väärtusele 128 ja helifail suletakse.
Enne dac2.ino skripti esmakordset käivitamist seadke helitugevus 50%. See on liiga vali, kuid parem kui 100%!
Kui helitugevuse regulaator töötab tagurpidi, vahetage 10K potentsiomeetri vastassuunalised juhtmed.
Andke mulle teada, kuidas see kõlab.
Soovitan:
Fordi Audiophile stereoraadio esitamine MP3 -failide esitamiseks .: 7 sammu
Kuidas teha Fordi Audiophile stereoraadio MP3-failide esitamiseks. See juhend annab teile mõned olulised üksikasjad selle kohta, kuidas täita Ford Audiophile'i (ja tõenäoliselt Mach 300, Shaker 500 ja Shaker 1000) MP3 CD-R ühilduvusnõudeid ) tehase stereo, nii et saate CD-plaadil MP3-faile põletada ja nautida
MP3 -heli esitamine FX -sein: 12 sammu (piltidega)
MP3 -heli esitamine FX -sein: looge lõbus ja interaktiivne helisein, mis esitab MP3 -sid lihtsa puudutusega! Mida teha tühja seinaga? Kas saaksite sinna lisada mõnusaid pilte? Või katta värvika toataimega. Oleme isegi näinud, kuidas mõned inimesed raamatu taha paljaid seinu peidavad
Rääkiv Arduino - MP3 esitamine Arduinoga ilma moodulita - Mp3 -faili esitamine Arduino'st PCM -i abil: 6 sammu
Rääkiv Arduino | MP3 esitamine Arduinoga ilma moodulita | Mp3 -faili esitamine Arduino'st PCM -i abil: Selles juhendis õpime, kuidas mängida MP3 -faili arduino abil ilma helimoodulit kasutamata, siin kasutame Arduino jaoks PCM -i teeki, mis mängib 16 -bitist PCM -i 8 kHz sagedusega, nii et saate seda teha
Laulude esitamine (MP3) Arduino abil PWM -i kasutamine kõlaris või tagasitransformaatoris: 6 sammu (piltidega)
Esitage laule (MP3) koos Arduinoga, kasutades kõlaris või Flyback -trafos PWM -i: Tere poisid, see on minu esimene juhendatav, ma loodan, et teile meeldib see !! Põhimõtteliselt olen selles projektis kasutanud oma Arduino ja sülearvuti vahelist jadaühendust, muusikaandmete edastamiseks sülearvutist Arduino. Ja kasutades Arduino TIMERS t
Kuidas peatada Facebooki videote automaatne esitamine Androidis !!: 10 sammu
Kuidas peatada Facebooki Androidi videote automaatse esitamise eest !!: See juhend annab teile teada, kuidas peatada Facebooki Androidi seadmetes nii andmete kui ka wifi videote automaatne esitamine. Palun tellige minu kanalTänan