Sadržaj:
- Korak 1: Zahtjevi
- Korak 2: Specifikacije
- Korak 3: Početak
- Korak 4: Mali krug
- Korak 5: Izvadite lemilicu
- Korak 6: Testiranje DAC -a
- Korak 7: Čitanje zaglavlja Wava
- Korak 8: Prekini, Prekini …
- Korak 9: Prekidi i dvostruko međuspremljenje
Video: Reprodukcija audiozvučnih datoteka (Wav) s Arduinom i DAC -om: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Reproducirajte wav datoteku Audio sa svoje Audino SD kartice. Ovaj Instructable pokazat će vam kako se wav datoteka na vašoj SdCard kartici može reproducirati kroz jednostavno kolo do zvučnika.
Wav datoteka mora biti 8 bitna mono. Nisam imao problema s reprodukcijom datoteka od 44 KHz.
Iako nije visokokvalitetan, kvaliteta zvuka je vrlo zadovoljavajuća.
Za odabir datoteke koristi se serijski monitor. Datoteke moraju biti u mapi koja se zove adlog.
Ovo uputstvo proizlazi iz ranijeg projekta gdje sam spremao wav snimke na SdCard:
Krug koristi jeftini 8 -bitni digitalno -analogni pretvarač (DAC) i jednočipno audio pojačalo.
Ključni dijelovi za postavljanje prekida preuzeti su iz izvrsnog članka Amande Ghassaei:
Korak 1: Zahtjevi
Arduino- Ja koristim Mega, međutim nema razloga zašto Uno ne bi radio.
SdCard čitač-program je konfiguriran za: MicroSD Breakout Board reguliran logičkom pretvorbom V2
Za detalje o postavljanju SdCard kartice pogledajte ovo uputstvo:
DAC0832 LCN- izvrstan 8-bitni digitalno-analogni pretvarač- Nekoliko kilograma.
LM386 N-1 Op amp- jeftino kao čipovi
20 -struka utičnica za čip
8 -smjerna utičnica za čip
Napajanje od 9 volti- dovoljna je baterija.
LM336 Referenca napona 2,5 V
10uF kondenzator * 3 (bilo koji napon veći od 9V)
Otpor 10 ohma
50nF kondenzator- (Ili negdje blizu-47nF, 56nf, 68nf- može)
220uF kondenzator
64 ohmski zvučnik
Linearni potenciometar 10K
Kabel za povezivanje 8 podatkovnih linija između Arduina i strujnog kruga-
Na Unu je 8 veza u liniji, na Megi su u paru.
Na Mega -i sam koristio 10 -kraki ribbon kabel s 10 -putnim IDC zaglavljem. (2 žice su rezervne)
Utičnice za 0V, 9V i DAC izlaz
Bakrena ploča, lemljenje, žica, rezači itd
Korak 2: Specifikacije
Serijski postavljen na 115200 bauda.
Podrška je dostupna za Hobbytronics MicroSD Breakout Board koji koristi Mega. Odabir čipa i drugi priključci mijenjat će se između Mega i Uno.
Wav datoteke moraju postojati u direktoriju koji se zove adlog. Slobodno ga nazovite drugim imenom i preuredite potrebno kodiranje.
Wav datoteka mora biti 8 bitna mono. Testirao sam do 44KHz.
Serijski monitor prikazuje wav datoteke u adlog mapi. Nazivi datoteka šalju se s izlazne linije monitora.
Veličina datoteke ograničena je samo veličinom kartice SdCard.
Korak 3: Početak
Priključite čitač SD kartica. To su veze za Mega.
0, 5V
CLK za pin 52
D0 na pin 50
D1 na pin 51
CS na pin 53
(Za povezivanje porta Uno pogledajte web stranicu dobavljača)
U ovoj fazi želite provjeriti radi li vaša kartica- upotrijebite skripte koje je dostavio dobavljač.
Moramo napraviti mali krug
Poslat ćemo niz audio bajtova s Arduina.
Ti su brojevi između 0 i 255. Oni predstavljaju napon.
Tišina je 127-128.
255 je konus zvučnika tvrd u jednom smjeru.
0 je konus zvučnika tvrdi na drugi način.
Dakle, zvuk se snima kao spremljeni brojevi, koji stvaraju različite napone, koji stvaraju pokretne konusne zvučnike.
Možemo poslati brojeve iz 8 redaka na Arduinu, istovremeno, koristeći "port".
Ako unesemo 8 linija u digitalno -analogni pretvarač, on radi ono što piše na limu i proizvodi analogni napon koji je proporcionalan digitalnom broju.
Sve što trebamo učiniti je spakirati napon na malo operativno pojačalo, a zatim na zvučnik.
Korak 4: Mali krug
DAC0832 LCN
Ovo je vrhunski, jeftin 8 -bitni digitalno -analogni pretvarač. (DAC)
Može se u potpunosti kontrolirati nizom podataka o linijama uzorka podataka.
Ili se može postaviti da sve to radi automatski u "Protok kroz rad".
Da citiram priručnik:
Jednostavno uzemljenje CS, WR1, WR2 i XFER te visoko povezivanje ILE-a omogućuje da oba unutarnja registra prate primijenjene digitalne ulaze (protočni) i izravno utječu na analogni izlaz DAC-a.
U redu, četiri veze na nisko postavljeni čip i jedna na 9V - jednostavno.
Ne želimo izlaz negativnih napona pa priručnik kaže da bismo trebali koristiti "način prebacivanja napona", a oni daju dijagram.
Sve što trebamo učiniti je zamijeniti malo audio pojačalo umjesto onog koje predlažu.
Audio pojačalo LM386-N
Priručnik za pojačalo daje dijagram minimalnih dijelova- osiguravajući dobitak od 20 (za nas previše, ali ima kontrolu glasnoće).
Sve što trebamo učiniti je dodati kondenzator između DAC -a i pojačala tako da pojačavamo samo izmjenične signale.
Moramo također dodati nekoliko kondenzatora blizu napajanja svakog našeg čipa, u protivnom ćemo dobiti brujanje iz našeg napajanja od 9V.
Korak 5: Izvadite lemilicu
Kako je sklop jednostavan, ne namjeravam zadavati udarac udarcem.
Evo nekoliko smjernica:
- Pripremite komad bakrene ploče najmanje 28 x 28 rupa. (Da, znam da ga kirurzi mozga mogu smanjiti)
- Ako ga namjeravate pričvrstiti vijcima, dopustite ih na početku!
- Postavite čipove na utičnice. Umetnite čips tek kad je sve provjereno.
- Držite ulazne žice dalje od izlaza.
- Pazite na pravilan polaritet kondenzatora.
- Pogledajte dijagram za prikaz baze referentnog napona LM336. Noga za podešavanje se ne koristi i može se rezati.
- Obratite pozornost na izravnu vezu s pinom 8 DAC-a. Vrlo je korisno za testiranje.
- Spojio sam se na Audino pomoću vrpčnog kabela i 10 -putnog IDC konektora.
- Na Uno -u su veze u ravnoj liniji - možda ćete otkriti da raspoređivanje 8 ulaznih veza u jednu ravnu liniju omogućuje povezivanje s Arduinom pomoću kupljenog, gotovog 8 -smjernog konektora,
Kad je gotovo- provjerite lemljenje i provjerite razmake između bakrenih tračnica.
Smatram da je oštrica pile za mlađe pile od 36 tpi vrlo korisna za čišćenje krhotina. Uklanjam klinove za lociranje oštrice i gurnem vrh oštrice u trag- Očigledno oštrica nije u okviru.
Korak 6: Testiranje DAC -a
Ostavite vezu između kruga i Arduina isključenom.
Postavite kontrolu glasnoće na vašem krugu na pola puta.
Uključite 9V DC napajanje u svoj novi krug.
Provjerite je li krug u redu- ne mogu preuzeti nikakvu odgovornost za vaš krug!
Isključite napajanje
Spojite svoj krug na Arduino.
Na Megi koristite igle 22-29. (PORTA) Nemojte pogriješiti dva gornja pina od 5 V!
Na Uno-u koristite pinove 0-7. Ovo je PORTD
Spojite 0V vašeg napajanja na 0V na Arduinu.
Uključiti.
Otvorite ovaj testni program DAC_TEST
Za UNO zamijenite sve reference na PORTA na PORTD
Zamijenite DDRA s DDRD- ova uputa postavlja svih 8 linija za izlaz u jednom potezu. Ovo je registar smjera podataka.
Postavite serijski monitor na 115200.
Spojite voltmetar između DAC izlaza i OV
Program će postaviti izlaz na 255 - sve linije uključene - maksimalni napon.
Izlaz 128- pola maksimalnog napona.
Izlaz 0- nulti napon (ili vjerojatno gotovo nula).
Zatim će koračati korak po korak: 1, 2, 4, 8, 16, 32, 64, 128
Napon bi trebao stalno rasti.
Ako napon padne dok se broj povećava, vjerojatno ste promijenili dvije međusobno povezane žice.
Također biste trebali čuti kako zvučnik tiho klikće pri promjeni napona
Korak 7: Čitanje zaglavlja Wava
Wav datoteke spremaju se s određenom frekvencijom i veličinom podataka.
Ove su informacije sadržane u zaglavlju od 44 bajta na početku wav datoteke.
Iako neki softver proširuje zaglavlje (nakon bajta 35), što otežava lociranje lokacije veličine podataka.
Za čitanje zaglavlja stvaramo međuspremnik i kopiramo početak datoteke.
Učestalost je pohranjena u 4 bajta počevši od 24 bajta u datoteku.
// učestalost čitanja navedena u zaglavlju wav datoteke
bajt headbuf [60]
tempfile.seek (0);
tempfile.read (headbuf, 60);
retval = zaglavlje [27];
retval = (retval << 8) | pokrivač za glavu [26];
retval = (retval << 8) | pokrivač za glavu [25];
retval = (retval << 8) | pokrivač za glavu [24];
Serial.print (F ("Frekvencija datoteke"));
Serial.print (retval);
Najbolji način za pronalaženje podataka o veličini podataka je traženje riječi "podaci" u zaglavlju.
Zatim izdvojite 4 bajta koja slijede, koji čine dugačku vrijednost
nepotpisani dugi povrat;
int mypos = 40;
za (int i = 36; i <60; i ++) {
if (headbuf == 'd') {
if (headbuf [i+1] == 'a') {
if (headbuf [i+2] == 't') {
if (headbuf [i+3] == 'a') {
// napokon ga imamo
mypos = i+4;
i = 60;
}
}
}
}
}
tempfile.seek (mypos);
retval = headbuf [mypos+3];
retval = (retval << 8) | zaglavlje [mypos+2];
retval = (retval << 8) | zaglavlje [mypos+1];
retval = (retval << 8) | pokrivač za glavu [mypos];
U redu, imamo duljinu i učestalost podataka!
Zvučni podaci slijede 4 bajta koji čine vrijednost duljine podataka.
Korak 8: Prekini, Prekini …
Koristimo informacije o frekvenciji za stvaranje softverskog prekida na ili blizu potrebne frekvencije.
Prekid se ne može uvijek točno postaviti, ali je dovoljan. Učestalost čitanja iz datoteke prosljeđuje se podrutini setintrupt.
void setintrupt (float freq) {float bitval = 8; // 8 za 8 bitne timere 0 i 2, 1024 za timer 1 bajt
setocroa = (16000000/(frekv.*bitval)) - 0,5;
// Vrijednost setocroa zahtijeva oduzimanje -1. Međutim, dodajući 0,5 kruga najbližim 0,5
// Rezolucija timera je ograničena
// U konačnici određeno magnitudom bitvala
cli (); // onemogućiti prekide // postaviti timer2 prekid
TCCR2A = 0; // cijeli TCCR2A registar postavite na 0
TCCR2B = 0; // isto za TCCR2B
TCNT2 = 0; // inicijalizira vrijednost brojača na 0
// postavljanje usporedbe registra podudaranja za povećanja frekvencije (hz)
OCR2A = setocroa; // = (16*10^6) / (frekvencija*8) - 1 (mora biti <256)
// uključuje CTC način rada
TCCR2A | = (1 << WGM21); // Postavite CS21 bit za 8 predkalera
TCCR2B | = (1 << CS21); // omogući timer usporedi prekid
// TIMSK2 | = (1 << OCIE2A); // ovo radi, kao i sljedeći redak
sbi (TIMSK2, OCIE2A); // omogući prekid na mjeraču vremena 2
sei (); // omogući prekide
Pronicljivi čitatelji će uočiti sbi (TIMSK2, OCIE2A)
Postavio sam nekoliko (nabavljenih putem Interneta) funkcija za postavljanje i brisanje registarskih bitova:
// Definira brisanje registarskih bitova#ifndef cbi
#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
#završi ako
// Definira za postavljanje registarskih bitova
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))
#završi ako
Ove funkcije omogućuju jednostavan poziv za postavljanje ili brisanje prekida.
Dakle, prekid je pokrenut, što možemo učiniti?
Korak 9: Prekidi i dvostruko međuspremljenje
Na 22 Khz bajt audio podataka emitira se svakih 0,045 ms
512 bajtova (veličina međuspremnika) očitava se u 2,08 ms.
Tako se međuspremnik ne može očitati sa SDCard kartice u jednom ciklusu pisanja.
Međutim, 512 bajtova je zapisano na port za 23,22 ms.
Dakle, sve što moramo učiniti je postaviti novu datoteku koja će se čitati svaki put kada se međuspremnik isprazni i imamo dovoljno vremena za prikupljanje podataka prije nego što je potreban novi podatkovni blok … Pod pretpostavkom da koristimo dva međuspremnika, ispraznimo jedan dok popunjavamo drugi.
Ovo je dvostruko međuspremljenje.
Čitanje datoteke usporit će ponovljeni prekid, ali to će se učiniti.
Postavio sam dva međuspremnika od 512 bajtova koji se zovu bufa i bufb.
Ako je zastava aready istinita, čitamo s porta, inače čitamo iz portb
Kad pozicija međuspremnika (bufcount) dosegne veličinu međuspremnika (BUF_SIZE 512), zastavicu readit postavljamo na true.
Rutina petlje void traži ovu zastavicu i započinje čitanje bloka:
if (readit) {if (! aready) {
// inicira čitanje bloka SDCard u bufa
tempfile.read (bufa, BUF_SIZE);
} else {
// iniciranje čitanja SDCard bloka u bufb
tempfile.read (bufb, BUF_SIZE);
}
readit = false;
}
Kad završi, rutinske zastavice readit = false.
Unutar rutine prekida moramo provjeriti je li void petlja završila provjerom je li readit == false.
U tom slučaju signaliziramo da je potrebno još jedno čitanje i prebacujemo zastavicu aready za prebacivanje međuspremnika.
Ako SD kartica i dalje čita, moramo pratiti jedno očitanje (brojač--; bufcount--;) i izaći iz prekida da bismo pokušali kasnije. (Klikovi na izlaznom audio signalu ukazuju na to da se to dogodilo.)
Kad se pročitaju svi podaci, prekid se poništava, port se ponovno postavlja na vrijednost srednjeg napona 128 i audio datoteka se zatvara.
Prije nego što prvi put pokrenete skriptu dac2.ino, postavite glasnoću na 50%. Ovo će biti preglasno, ali bolje je od 100%!
Ako vaša kontrola glasnoće radi obrnuto, zamijenite kabele na suprotnim krajevima 10K potenciometra.
Javi mi kako zvuči.
Preporučeni:
Lokalni poslužitelj datoteka Raspberry Pi Samba: 5 koraka
Lokalni poslužitelj datoteka Raspberry Pi Samba: Korak po korak postupak instaliranja lokalnog poslužitelja datoteka
Time Lapse Con Móvil Y Reprodukcija i gif: 4 koraka
Time Lapse Con Móvil Y Reprodukcija i gif: Necesitamos tres programi, uno es time-lapse1.04, el otro el camera Creator gif player and an Animirani gif player, todos ellos gratuitos
Razgovarajući Arduino - Reprodukcija MP3 s Arduinom bez ikakvog modula - Reprodukcija MP3 datoteke s Arduina pomoću PCM -a: 6 koraka
Razgovarajući Arduino | Reprodukcija MP3 s Arduinom bez ikakvog modula | Reproduciranje MP3 datoteke s Arduina pomoću PCM -a: U ovom uputstvu naučit ćemo kako svirati mp3 datoteku s arduinom bez korištenja audio modula, ovdje ćemo koristiti PCM biblioteku za Arduino koja reproducira 16 bitni PCM frekvencije 8 kHz, pa učinimo to
Midi zapis/reprodukcija/preklapanje s 5-pinskim priključcima: 3 koraka
Midi Record/Play/Overdub s 5-pinskim vezama: * Koristi ATMega-1284 čip koji radi na 8 MHz, s 4 k bajtova RAM-a i 4 kB bajta eeproma * Koristi stare DIN 5-pinske konektore * Omogućuje snimanje i reprodukciju, kao i overdub: snimanje zajedno s nečim što ste prije snimili. * Cijeli jelovnik * Capab
Brza i prljava reprodukcija PCB-a u Fusion 360: 6 koraka (sa slikama)
Brza i prljava reprodukcija PCB-a u Fusion 360: Ovo je metoda koja se brzo i prljavo može brzo reproducirati postojeće PCB ploče ako 3D model već nije dostupan. Posebno je korisno za brzo reproduciranje ploča za razbijanje radi provjere uklapanja komponenti ili za lijepe rendere u zadnji čas