Orodha ya maudhui:
- Hatua ya 1: Mahitaji
- Hatua ya 2: Maelezo
- Hatua ya 3: Kuanza
- Hatua ya 4: Mzunguko Mdogo
- Hatua ya 5: Toka nje ya Chuma cha Kufundisha
- Hatua ya 6: Kupima DAC
- Hatua ya 7: Kusoma Kichwa cha Wav
- Hatua ya 8: Kukatisha, Kukatisha…
- Hatua ya 9: Usumbufu na Bajaji Mbili
Video: Kucheza Faili za Sauti za Sauti (Wav) Na Arduino na DAC: Hatua 9
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:54
Cheza faili ya wav Sauti kutoka kwa kadi yako ya Audino SD. Agizo hili litaonyesha jinsi faili ya wav kwenye SdCard yako inaweza kuchezwa kupitia mzunguko rahisi kwa spika.
Faili ya wav lazima iwe mono kidogo 8. Sikuwa na shida kucheza faili 44 KHz.
Wakati sio uaminifu wa hi, ubora wa sauti unaridhisha sana.
Mfuatiliaji wa serial hutumiwa kuchagua faili. Faili lazima ziwe kwenye folda inayoitwa adlog.
Hii inaweza kufundishwa kutoka kwa mradi wa mapema ambapo nilihifadhi rekodi za wav kwa SdCard: https://www.instructables.com/id/Arduino-Mega-Audio ……
Mzunguko hutumia dijiti ya bei rahisi ya 8 kwa kibadilishaji cha analog (DAC) na kipaza sauti kimoja cha sauti.
Sehemu muhimu za kuanzisha usumbufu zilichukuliwa kutoka kwa nakala bora na Amanda Ghassaei:
Hatua ya 1: Mahitaji
Arduino- ninatumia Mega, hata hivyo hakuna sababu kwa nini Uno haipaswi kufanya kazi.
Msomaji wa SdCard- mpango umeundwa kwa: Bodi ya Kuzuka ya MicroSD Inayodhibitiwa na Logic Conversion V2 https://www.hobbytronics.co.uk/microsd-card-regula ……..
Tazama hii inayoweza kufundishwa kwa maelezo ya usanidi wa SdCard: https://www.instructables.com/id/Arduino-Mega-Audio ……
DAC0832 LCN - bora zaidi ya 8 kwa dijiti kwa kibadilishaji cha analog- Paundi chache.
LM386 N-1 Op amp- nafuu kama chips
Njia 20 ya tundu la chip
Njia 8 ya tundu la chip
Ugavi wa volt 9 - betri itafanya.
LM336 2.5 V kumbukumbu ya voltage
10uF Capacitor * 3 (voltage yoyote zaidi ya 9V)
Kuzuia 10 ohm
50nF capacitor- (Au mahali pengine karibu-47nF, 56nf, 68nf- itafanya)
Msimamizi wa 220uF
Spika ya 64 ohm
Potentiometer yenye urefu wa 10K
Cable kuunganisha laini za data 8 kati ya Arduino na mzunguko-
Kwenye Uno unganisho 8 ziko kwenye mstari, kwenye Mega ziko kwenye jozi.
Kwenye Mega nilitumia njia 10 ya Ribbon na kichwa cha njia 10 cha IDC. (Waya 2 ni za ziada)
Viunganisho vya tundu kwa 0V, 9V na DAC nje
Bodi ya shaba ya shaba, solder, waya, wakataji nk
Hatua ya 2: Maelezo
Seti iliyowekwa kwa baud ya 115200.
Msaada umewekwa kwa Bodi ya Kuzuka ya MicroSD ya Hobbytronics inayotumia Mega. Chagua chip na bandari zingine zitabadilika kati ya Mega na Uno.
Faili za Wav lazima ziwepo kwenye saraka inayoitwa adlog- Jisikie huru kuiita kitu kingine na upange upya usimbuaji unaohitajika.
Faili ya wav lazima iwe mono kidogo 8. Nimejaribu hadi 44KHz.
Mfuatiliaji wa serial huonyesha faili za wav kwenye folda ya adlog. Majina ya faili yametumwa kutoka kwa laini ya pato la ufuatiliaji.
Ukubwa wa faili umepunguzwa tu na saizi ya SdCard.
Hatua ya 3: Kuanza
Unganisha msomaji wa kadi ya SD. Hizi ni viunganisho vya Mega.
0, 5V
CLK kubandika 52
D0 kubandika 50
D1 kubandika 51
CS kubandika 53
(Tazama wauzaji wa waunganisho wa unganisho la bandari la Uno)
Utataka kujaribu kuwa kadi yako inafanya kazi katika hatua hii- tumia maandishi yaliyotolewa na muuzaji.
Tunahitaji kufanya mzunguko mdogo
Tutatuma mtiririko wa ka za sauti kutoka Arduino.
Nambari hizi ni kati ya 0 na 255. Zinawakilisha voltage.
Ukimya ni 127-128.
255 ni koni ya spika kwa njia moja.
0 ni koni ya spika ngumu kwa njia nyingine.
Kwa hivyo sauti inarekodiwa kama nambari zilizohifadhiwa, ambazo huunda voltages tofauti, ambazo huunda koni za spika zinazohamia.
Tunaweza kutuma nambari kutoka kwa mistari 8 kwenye Arduino, wakati huo huo, kwa kutumia "bandari".
Ikiwa tunalisha mistari 8 ndani ya dijiti kwa kibadilishaji cha analog, inafanya kile inachosema kwenye bati na inazalisha voltage ya analog ambayo ni sawa na nambari ya dijiti.
Tunachohitaji kufanya basi ni kupakia voliti kwenye kifaa kidogo cha kuongeza nguvu na kisha kwa spika.
Hatua ya 4: Mzunguko Mdogo
DAC0832 LCN
Hii ni ya hali ya juu, ya bei rahisi ya 8 bit kwa ubadilishaji wa analog. (DAC)
Inaweza kudhibitiwa kikamilifu na safu ya kushikilia data, mistari ya sampuli za data.
Au inaweza kusanidiwa kuifanya yote kiatomati katika "Flow through operation".
Kunukuu mwongozo:
Kutuliza tu CS, WR1, WR2, na XFER na kufunga ILE juu huruhusu sajili zote za ndani kufuata pembejeo za dijiti (mtiririko) na kuathiri moja kwa moja pato la analog ya DAC.
Sawa hiyo ni unganisho nne kwa chip iliyowekwa chini na moja imewekwa kwa 9V - rahisi.
Hatutaki voltages hasi nje kwa hivyo mwongozo unasema tunapaswa kutumia "hali ya kubadili voltage" na wanatoa mchoro.
Tunachohitaji kufanya ni kubadilisha sauti ndogo ya sauti badala ya ile wanayopendekeza.
LM386-N Sauti ya Sauti
Mwongozo wa Amp hutoa mchoro wa sehemu ya chini- kutoa faida ya 20 (Njia nyingi sana kwetu - lakini ina udhibiti wa sauti).
Tunachohitaji kufanya ni kuongeza capacitor kati ya DAC na amp ili tu tuongeze ishara za AC.
Lazima pia tuongeze capacitors kadhaa karibu na pini ya usambazaji wa kila chips zetu vinginevyo tutapata hum kutoka kwa usambazaji wetu wa 9V.
Hatua ya 5: Toka nje ya Chuma cha Kufundisha
Kwa kuwa mzunguko ni rahisi sikusudii kutoa pigo kwa akaunti ya pigo.
Hapa kuna vidokezo kadhaa:
- Andaa kipande cha bodi ya Shaba ya Shaba angalau mashimo 28 na 28. (Ndio najua waganga wa ubongo wanaweza kuifanya ndogo)
- Ikiwa unakusudia kuiweka na vis, uiruhusu mwanzoni!
- Panda chips kwenye soketi. Ingiza chips tu wakati kila kitu kimekaguliwa.
- Weka waya wa pembejeo mbali na pato.
- Angalia polarity sahihi kwa capacitors.
- Rejea mchoro kwa mtazamo wa msingi wa kumbukumbu ya voltage ya LM336. Mguu wa kurekebisha hautumiwi na unaweza kukatwa.
- Kumbuka unganisho la moja kwa moja kwa kubandika 8 ya DAC- Ni muhimu sana kwa upimaji.
- Niliunganisha Audino na kebo ya Ribbon na kiunganishi cha IDC cha njia 10.
- Kwenye Uno unganisho liko sawa - unaweza kupata kuwa kupanga viunganisho 8 vya pembejeo kwenye laini moja moja hukuruhusu kuunganisha kwa Arduino na kiunganishi kilichonunuliwa, kilichotengenezwa tayari cha njia 8,
Wakati umekwisha - angalia soldering na uangalie mapungufu kati ya nyimbo za shaba.
Ninaona blade ndogo ya tpi ya 36 tpi muhimu sana kwa kusafisha uchafu. Ninaondoa pini za kutafuta blade na kutelezesha ncha ya blade kwenye wimbo- Ni wazi kwamba blade haiko kwenye fremu.
Hatua ya 6: Kupima DAC
Acha Uunganisho kati ya Mzunguko na Arduino imezimwa.
Weka udhibiti wa sauti kwenye mzunguko wako hadi katikati.
Washa umeme wa 9V DC kwenye mzunguko wako mpya.
Angalia kuwa mzunguko uko sawa - siwezi kukubali dhima yoyote kwa mzunguko wako!
Zima umeme
Unganisha mzunguko wako na Arduino.
Kwenye pini za matumizi ya Mega 22-29. (PORTA) Usikosee pini mbili za 5V hapo juu!
Kwenye pini za Uno tumia 0-7. Hii ni PORTD
Unganisha 0V ya usambazaji wako wa umeme kwa 0V kwenye Arduino.
Anzisha.
Fungua mpango huu wa jaribio DAC_TEST
Kwa UNO, badilisha marejeleo yote kwa PORTA kwa PORTD
Badilisha DDRA na DDRD- maagizo haya huweka mistari yote 8 ili kutoa kwa njia moja. Hii ndio rejista ya mwelekeo wa data.
Weka mfuatiliaji wako wa serial saa 115200.
Unganisha voltmeter kati ya DAC nje na OV
Programu itaweka pato kwa 255- mistari yote juu - kiwango cha juu cha voltage.
Pato 128- nusu ya kiwango cha juu cha voltage.
Pato 0- zero voltage (Au labda karibu sifuri).
Kisha itaenda kidogo: 1, 2, 4, 8, 16, 32, 64, 128
Voltage inapaswa kuongezeka kwa kasi.
Ikiwa voltage inashuka nyuma wakati idadi inaongezeka labda una waya mbili zinazounganisha zimebadilishwa.
Unapaswa pia kusikia mzungumzaji akibofya kimya kimya wakati voltage inabadilika
Hatua ya 7: Kusoma Kichwa cha Wav
Faili za Wav zinahifadhiwa na masafa na saizi maalum ya data.
Habari hii iko katika kichwa cha baiti 44 mwanzoni mwa faili ya wav.
Ingawa programu zingine hupanua kichwa (baada ya baiti 35), na kufanya eneo la saizi ya data kuwa ngumu kupata.
Kusoma kichwa tunaunda bafa na kunakili mwanzo wa faili.
Masafa huhifadhiwa kwa ka 4 kuanzia baiti 24 kwenye faili.
// kusoma masafa yaliyotajwa katika kichwa cha faili ya wav
kichwa cha kichwa [60]
tafuta.tafuta (0);
faili ya kusoma (kichwa cha kichwa, 60);
retval = kichwa cha kichwa [27];
retval = (kumbukumbu << 8) | kichwa [26];
retval = (kumbukumbu << 8) | kichwa [25];
retval = (kumbukumbu << 8) | kichwa cha kichwa [24];
Serial.print (F ("Faili Frequency"));
Serial.print (kumbukumbu);
Njia bora ya kupata habari ya saizi ya data ni kutafuta neno "data" kwenye kichwa.
Kisha toa ka 4 zifuatazo, ambazo hufanya thamani ndefu
kumbukumbu ya muda mrefu isiyosainiwa;
int mypos = 40;
kwa (int i = 36; i <60; i ++) {
ikiwa (headbuf == 'd') {
ikiwa (headbuf [i + 1] == 'a') {
ikiwa (headbuf [i + 2] == 't') {
ikiwa (headbuf [i + 3] == 'a') {
// mwishowe tunayo
mypos = i + 4;
i = 60;
}
}
}
}
}
tempfile.seek (mypos);
retval = kichwa cha kichwa [mypos + 3];
retval = (kumbukumbu << 8) | kichwa cha kichwa [mypos + 2];
retval = (kumbukumbu << 8) | kichwa cha kichwa [mypos + 1];
retval = (kumbukumbu << 8) | kichwa cha kichwa [mypos];
Sawa tuna urefu wa data na masafa!
Takwimu za sauti hufuata ka 4 zinazounda thamani ya urefu wa data.
Hatua ya 8: Kukatisha, Kukatisha…
Tunatumia habari ya masafa kuunda programu kukatiza, au karibu, masafa yanayotakiwa.
Usumbufu hauwezi kuwekwa kila wakati haswa, lakini inatosha. Masafa yaliyosomwa kutoka kwa faili hupitishwa kwa subroutine iliyosababishwa.
batili setintrupt (kuelea freq) {kuelea bitval = 8; // 8 kwa vipima muda 8 0 na 2, 1024 kwa kipima muda 1 byte
setocroa = (16000000 / (freq * bitval)) - 0.5;
// Thamani ya setocroa inahitaji uondoaji wa -1. Walakini kuongeza raundi 0.5 kwa karibu 0.5
// Azimio la kipima muda ni mdogo
// Hatimaye imedhamiriwa na ukubwa wa bitval
cli (); //lemaza kukatiza // kuweka timer2 kukatiza
TCCR2A = 0; // weka rejista yote ya TCCR2A hadi 0
TCCR2B = 0; // sawa kwa TCCR2B
TCNT2 = 0; // anzisha thamani ya kaunta hadi 0
// kuweka kulinganisha rejista ya mechi ya nyongeza za masafa (hz)
OCR2A = setocroa; // = (16 * 10 ^ 6) / (masafa * 8) - 1 (lazima iwe <256)
// washa hali ya CTC
TCCR2A | = (1 << WGM21); // Weka CS21 kidogo kwa daktari 8
TCCR2B | = (1 << CS21); // kuwezesha kipima muda kulinganisha kukatiza
// TIMSK2 | = (1 << OCIE2A); // hii inafanya kazi, kama vile mstari unaofuata
sbi (TIMSK2, OCIE2A); // kuwezesha kukatiza kwenye kipima saa 2
jinsi (); // kuwezesha usumbufu
Wasomaji wenye utambuzi watakuwa wameona sbi (TIMSK2, OCIE2A)
Ninaweka kazi kadhaa za (mtandao zilizopatikana) kwa kuweka na kusafisha bits:
// Inafafanua kwa kusafisha bits # ifndef cbi
#fafanua cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
# mwisho
// Inafafanua kwa kuweka bits
#fndef sbi
#fafanua sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (kidogo))
# mwisho
Kazi hizi hutoa simu rahisi kuweka au kusafisha usumbufu.
Kwa hivyo usumbufu unaendelea, tunaweza kufanya nini?
Hatua ya 9: Usumbufu na Bajaji Mbili
Saa 22 Khz baiti ya data ya sauti hutolewa kila ms 0.045
Baiti 512 (saizi ya bafa) inasomwa kwa msamba 2.08.
Kwa hivyo bafa haiwezi kusomwa kutoka kwa SDCard katika mzunguko mmoja wa kuandika.
Walakini baiti 512 zimeandikwa kwa bandari kwa milimita 23.22.
Kwa hivyo tunachohitajika kufanya ni kusanidi faili mpya iliyosomwa kila wakati bafa inapomaliza na tuna muda wa kutosha kupata data kabla ya kizuizi kipya cha data kinahitajika… Kwa kudhani tunatumia viboreshaji viwili, tukitupa moja tunapojaza nyingine.
Hii ni kubatiza mara mbili.
Faili iliyosomwa itapunguzwa na usumbufu unaorudiwa, lakini utamaliza.
Nina usanidi wa bafa mbili 512 zilizoitwa bufa na bufb.
Ikiwa bendera ya bendera ni kweli tunasoma kutoka porta vinginevyo tunasoma kutoka portb
Wakati nafasi ya bafa (bufcount) inafikia saizi ya bafa (BUF_SIZE 512) tunaweka bendera inayoitwa readit kuwa kweli.
Utaratibu wa kitanzi batili hutafuta bendera hii na kuanza kusoma kusoma:
ikiwa (soma) {ikiwa (! aready) {
// kuanzisha kizuizi cha SDCard kusoma kwa bufa
jifunze faili (bufa, BUF_SIZE);
} mwingine {
// kuanzisha kizuizi cha SDCard kusoma kwa bufb
soma faili (bufb, BUF_SIZE);
}
kusoma = uwongo;
}
Wakati imemaliza bendera za kawaida kusoma = uwongo.
Ndani ya utaratibu wa usumbufu lazima tuangalie kwamba kitanzi batili kimemaliza kwa kuangalia ikiwa kusoma == uwongo.
Kwa hali hii tunaashiria kwamba kusoma tena kunahitajika na kugeuza bendera ya uwanja ili kubadili bafa.
Ikiwa SDCard bado inasoma tunapaswa kufuata usomaji mmoja (counter--; bufcount--;) na uondoke kukatiza kujaribu tena baadaye. (Bonyeza kwenye ishara ya pato la sauti inamaanisha kuwa hii imetokea.)
Wakati data yote inasomwa ukatishaji umeghairiwa, bandari imewekwa tena kwa thamani ya katikati ya 128 na faili ya sauti imefungwa.
Kabla ya kuendesha hati ya dac2.ino kwa mara ya kwanza, weka sauti yako hadi 50%. Hii itakuwa kubwa sana, lakini ni bora kuliko 100%!
Ikiwa udhibiti wako wa sauti unafanya kazi kwa kubadilisha ubadilishaji unaongoza kwenye ncha tofauti za potentiometer ya 10K.
Napenda kujua jinsi inasikika.
Ilipendekeza:
Jinsi ya Kutengeneza Redio ya Ford Audiophile Stereo kucheza faili za Mp3: Hatua 7
Jinsi ya Kutengeneza Redio ya Ford Audiophile Stereo Play Mp3 Files. stereo ya kiwanda ili uweze kuchoma na kufurahiya faili za MP3 kwenye CD-
Arduino Bascis - Sauti za kucheza na Tani: Hatua 5
Arduino Bascis - Sauti za kucheza na Toni: Nilitaka kucheza athari za sauti, na nikagundua kuwa hii ni moja ya maeneo yaliyopuuzwa linapokuja suala la mafunzo. Hata kwenye Youtube, kuna ukosefu wa mafunzo mazuri kwenye Arduino na sauti, kwa hivyo, mimi ni mtu mzuri, niliamua kushiriki maarifa yangu
Badilisha (Karibu tu) Faili yoyote ya media kuwa (tu kuhusu) faili nyingine yoyote ya media bure !: Hatua 4
Badilisha (Karibu tu) Faili yoyote ya Media kuwa (tu Kuhusu) Faili nyingine yoyote ya media bure!: Kufundisha kwangu kwanza, shangwe! Kwa hivyo, nilikuwa kwenye Google nikitafuta mpango wa bure ambao ungeweza kubadilisha faili zangu za Youtube.flv kuwa muundo ambao ni ya ulimwengu wote, kama.wmv au.mov.nilitafuta mabaraza mengi na wavuti na kisha nikapata programu inayoitwa
Jinsi ya kubana faili zako za ISO za Psp 'ISO kwenye faili za CSO ili Kuokoa Nafasi. 4 Hatua
Jinsi ya kubana faili zako za ISO za Psp 'ISO kwenye Faili za CSO ili Kuokoa Nafasi.: Katika hii inayoweza kufundishwa nitakuonyesha jinsi ya kubana nakala zako za psps kutoka ISO hadi CSO ili kuhifadhi nafasi kwenye fimbo yako ya kumbukumbu, ukitumia programu moja tu ambayo inatumika na Mvinyo Katika Ubuntu. Utahitaji pia CFW (Cusstom Firm-Ware) psp kutengeneza
Jinsi ya Kurekebisha Faili za Takwimu zisizoungwa mkono, na Pakua Faili Zako Za Video Unazopenda kwa PSP Yako Inayobebeka: Hatua 7
Jinsi ya Kurekebisha Faili za Takwimu zisizoungwa mkono, na Pakua Faili Zako za Video Unazopenda kwa PSP Yako Inayoweza Kusafirishwa: Nilitumia Media Go, na nilifanya ujanja wa kupata faili za video zisizoungwa mkono kufanya kazi kwenye PSP yangu. Hizi ni hatua zangu zote ambazo nilifanya , wakati mimi kwanza nilipata faili zangu za video zisizoungwa mkono kufanya kazi kwenye PSP yangu. Inafanya kazi kwa 100% na faili zangu zote za video kwenye PSP Po yangu