Obsah:
- Krok 1: Požiadavky
- Krok 2: Špecifikácia
- Krok 3: Začíname
- Krok 4: Malý obvod
- Krok 5: Vyberte spájkovačku
- Krok 6: Testovanie DAC
- Krok 7: Prečítajte si hlavičku Wav
- Krok 8: Prerušiť, prerušiť…
- Krok 9: Prerušenia a dvojité ukladanie do vyrovnávacej pamäte
Video: Prehrávanie zvukových zvukových súborov (WAV) s Arduino a DAC: 9 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
Prehrávajte zvuk vo formáte wav z karty Audino SD. Tento návod vám ukáže, ako je možné súbor wav na karte SdCard prehrať pomocou jednoduchého obvodu s reproduktorom.
Súbor wav musí byť 8 -bitový mono. Nemal som problém prehrať súbory 44 KHz.
Aj keď nejde o hi-fi, kvalita zvuku je veľmi uspokojivá.
Na výber súboru slúži sériový monitor. Súbory musia byť v priečinku s názvom adlog.
Tento návod vyplýva z predchádzajúceho projektu, kde som nahrávky wav uložil na kartu SdCard:
Obvod používa lacný 8 -bitový prevodník digitálneho signálu na analógový (DAC) a jednočipový zvukový zosilňovač.
Kľúčové sekcie na nastavenie prerušení boli prevzaté z vynikajúceho článku Amandy Ghassaei:
Krok 1: Požiadavky
Arduino- Používam Mega, neexistuje však dôvod, prečo by Uno nemalo fungovať.
Čítačka SdCard-program je nakonfigurovaný pre: MicroSD Breakout Board Regulované s logickou konverziou V2
Podrobnosti o nastavení karty SdCard nájdete v tomto návode:
DAC0832 LCN- vynikajúci 8-bitový prevodník digitálneho signálu na analógový- niekoľko libier.
Operačný zosilňovač LM386 N-1- lacný ako čipy
20 -cestná zásuvka na čip
8 -cestná zásuvka na čip
Napájanie 9 voltov- postačí batéria.
LM336 2,5 V referencia napätia
10uF kondenzátor * 3 (akékoľvek napätie viac ako 9V)
Odpor 10 ohmov
50nF kondenzátor- (Alebo niekde blízko-47nF, 56nf, 68nf- bude stačiť)
Kondenzátor 220uF
64 ohmový reproduktor
10K lineárny potenciometer
Kábel na prepojenie 8 dátových liniek medzi Arduinom a obvodom-
Na Uno je 8 spojov v rade, na Mega sú vo dvojiciach.
Na Mega som použil 10 -cestný plochý kábel s 10 -pólovým IDC konektorom. (2 vodiče sú náhradné)
Zásuvkové konektory pre výstup 0V, 9V a DAC
Doska z medeného pásu, spájka, drôt, rezačky atď
Krok 2: Špecifikácia
Sériovo nastavený na 115200 baudov.
Podpora pre dosku Hobbytronics MicroSD Breakout Board pomocou systému Mega je k dispozícii. Výber čipu a ostatné porty sa budú meniť medzi Mega a Uno.
Súbory Wav musia existovať v adresári s názvom adlog- Neváhajte ho pomenovať inak a znova usporiadajte potrebné kódovanie.
Súbor wav musí byť 8 -bitový mono. Testoval som až 44 kHz.
Sériový monitor zobrazuje súbory wav v priečinku adlog. Názvy súborov sa odosielajú z výstupného riadka monitora.
Veľkosť súboru je obmedzená iba veľkosťou karty SdCard.
Krok 3: Začíname
Pripojte čítačku kariet SD. Toto sú spojenia pre Mega.
0, 5V
CLK na pin 52
D0 až pin 50
D1 až pin 51
CS na pin 53
(Pripojenie portu Uno nájdete na webových stránkach dodávateľov)
V tejto fáze budete chcieť vyskúšať, či vaša karta funguje- použite skripty dodané dodávateľom.
Musíme urobiť malý obvod
Pošleme prúd zvukových bajtov z Arduina.
Tieto čísla sú medzi 0 a 255. Predstavujú napätie.
Ticho je 127-128.
255 je reproduktorový kužeľ tvrdý jedným spôsobom.
0 je reproduktorový kužeľ tvrdý iným spôsobom.
Zvuk sa teda zaznamenáva ako uložené čísla, ktoré vytvárajú rôzne napätia a vytvárajú pohyblivé reproduktorové kužele.
Čísla môžeme odoslať z 8 riadkov na Arduino súčasne pomocou „portu“.
Ak privedieme 8 riadkov do prevodníka digitálneho signálu na analógový, urobí to, čo hovorí na cíne a vytvorí analógové napätie, ktoré je úmerné digitálnemu číslu.
Všetko, čo musíme urobiť, je potom zapojiť napätie do malého operačného zosilňovača a potom do reproduktora.
Krok 4: Malý obvod
DAC0832 LCN
Je to vynikajúci a lacný 8 -bitový prevodník digitálneho signálu na analógový. (DAC)
Dá sa úplne ovládať pomocou radu riadkov na uchovávanie údajov a vzoriek údajov.
Alebo je možné nastaviť, aby to všetko robilo automaticky, v časti „Flow through operation“.
Citujem manuál:
Jednoduché uzemnenie CS, WR1, WR2 a XFER a viazanie ILE na vysokú úroveň umožňuje obom interným registrom sledovať použité digitálne vstupy (prietok) a priamo ovplyvniť analógový výstup DAC.
OK, to sú štyri pripojenia k čipu nastavené nízko a jedno nastavené na 9 V - jednoduché.
Nechceme, aby došlo k zápornému napätiu, takže manuál hovorí, že by sme mali použiť „režim prepínania napätia“a dodávajú diagram.
Všetko, čo musíme urobiť, je nahradiť malý zvukový zosilňovač namiesto toho, ktorý navrhujú.
Zvukový zosilňovač LM386-N
Manuál k zosilňovaču poskytuje diagram minimálnych súčastí- poskytuje zisk 20 (pre nás príliš veľa- ale má ovládanie hlasitosti).
Všetko, čo musíme urobiť, je pridať kondenzátor medzi DAC a zosilňovač, aby sme zosilňovali iba striedavé signály.
Musíme tiež pridať niekoľko kondenzátorov blízko napájacieho kolíka každého z našich čipov, inak budeme z nášho 9V napájania hučať.
Krok 5: Vyberte spájkovačku
Keďže obvod je jednoduchý, nemám v úmysle dávať účet úder za úder.
Tu sú niektoré rady:
- Pripravte si kus dosky z medeného pásu najmenej 28 x 28 otvorov. (Áno, viem, že mozgoví chirurgovia to môžu zmenšiť)
- Ak ho plánujete namontovať pomocou skrutiek, na začiatku ich povoľte!
- Namontujte čipy na zásuvky. Čipy vkladajte iba vtedy, ak je všetko skontrolované.
- Udržujte vstupné vodiče mimo výstupu.
- Dbajte na správnu polaritu kondenzátorov.
- Na obrázku je základný pohľad na referenčnú hodnotu napätia LM336. Nastavovacia noha sa nepoužíva a dá sa rezať.
- Všimnite si priameho pripojenia na pin 8 DAC- Je to veľmi užitočné pri testovaní.
- Pripojil som sa k Audinu plochým káblom a 10 -cestným konektorom IDC.
- Na Uno sú pripojenia v priamke - môžete prísť na to, že usporiadanie 8 vstupných pripojení do jednej priamky vám umožní prepojiť sa s Arduino pomocou zakúpeného, pripraveného 8 -cestného konektora,
Keď je hotový- skontrolujte spájkovanie a skontrolujte medzery medzi medenými pásmi.
Považujem pílový list na píly 36 tpi junior za veľmi užitočný na odstraňovanie nečistôt. Odstránim polohovacie kolíky čepele a zasuniem hrot čepele do koľaje- Čepeľ zrejme nie je v ráme.
Krok 6: Testovanie DAC
Nechajte spojenie medzi obvodom a Arduinom vypnuté.
Nastavte ovládač hlasitosti na svojom obvode na polovicu.
Zapnite 9 V jednosmerný prúd do nového obvodu.
Skontrolujte, či je obvod v poriadku- nemôžem prijať žiadnu zodpovednosť za váš obvod!
Vypnúť
Pripojte svoj obvod k Arduinu.
Na Mega použite piny 22-29. (PORTA) Nezamieňajte dva vyššie uvedené 5V kolíky!
Na Uno použite piny 0-7. Toto je PORTD
Pripojte 0 V vášho zdroja k 0 V na Arduine.
Zapnúť
Otvorte tento testovací program DAC_TEST
V prípade UNO nahraďte všetky odkazy na PORTA na PORTD
Nahradiť DDRA za DDRD- táto inštrukcia nastaví výstup všetkých 8 riadkov naraz. Toto je register smeru údajov.
Nastavte sériový monitor na 115200.
Pripojte voltmetr medzi výstup DAC a OV
Program nastaví výstup na 255 - všetky riadky zapnuté - maximálne napätie.
Výstup 128- polovičné maximálne napätie.
Výstup 0- nulové napätie (Alebo pravdepodobne takmer nulové).
Potom bude postupovať bitovo: 1, 2, 4, 8, 16, 32, 64, 128
Napätie by sa malo plynule zvyšovať.
Ak napätie klesne späť a číslo sa zvýši, pravdepodobne budete mať prepojené dva prepojovacie vodiče.
Pri zmene napätia by ste mali počuť aj tiché cvakanie reproduktora
Krok 7: Prečítajte si hlavičku Wav
Súbory WAV sa ukladajú so zadanou frekvenciou a veľkosťou údajov.
Tieto informácie sú obsiahnuté v 44 -bajtovej hlavičke na začiatku súboru wav.
Aj keď niektorý softvér rozširuje hlavičku (po bajte 35), sťažuje lokalizáciu umiestnenia veľkosti údajov.
Na prečítanie hlavičky vytvoríme vyrovnávaciu pamäť a skopírujeme začiatok súboru.
Frekvencia je uložená v 4 bajtoch od 24 bajtov do súboru.
// frekvencia čítania špecifikovaná v hlavičke súboru wav
byte headbuf [60]
tempfile.seek (0);
tempfile.read (headbuf, 60);
retval = headbuf [27];
retval = (retval << 8) | opierka hlavy [26];
retval = (retval << 8) | opierka hlavy [25];
retval = (retval << 8) | opierka hlavy [24];
Serial.print (F („Frekvencia súborov“));
Serial.print (retval);
Najlepším spôsobom, ako nájsť informácie o veľkosti údajov, je vyhľadať slovo „údaje“v hlavičke.
Potom extrahujte 4 bajty po ňom, ktoré tvoria dlhú hodnotu
nepodpísaný dlhý návrat;
int mypos = 40;
pre (int i = 36; i <60; i ++) {
if (headbuf == 'd') {
if (headbuf [i+1] == 'a') {
if (headbuf [i+2] == 't') {
if (headbuf [i+3] == 'a') {
// konečne to máme
mypos = i+4;
i = 60;
}
}
}
}
}
tempfile.seek (mypos);
retval = headbuf [mypos+3];
retval = (retval << 8) | opierka hlavy [mypos+2];
retval = (retval << 8) | opierka hlavy [mypos+1];
retval = (retval << 8) | opierka hlavy [mypos];
Dobre, máme dĺžku a frekvenciu údajov!
Zvukové údaje nasledujú po 4 bajtoch, ktoré tvoria hodnotu dĺžky údajov.
Krok 8: Prerušiť, prerušiť…
Informácie o frekvencii používame na vytvorenie prerušenia softvéru na požadovanej frekvencii alebo v jej blízkosti.
Prerušenie nie je možné vždy nastaviť presne, ale je dostatočné. Frekvencia načítaná zo súboru je odoslaná do podprogramu setintrupt.
void setintrupt (float freq) {float bitval = 8; // 8 pre 8 bitové časovače 0 a 2, 1024 pre časovač 1 bajt
setocroa = (16000000/(freq*bitval)) - 0,5;
// Hodnota setocroa vyžaduje odčítanie -1. Sčítanie 0,5 náboja na najbližších 0,5
// Rozlíšenie časovača je obmedzené
// Nakoniec určené veľkosťou bitvalu
cli (); // vypnutie prerušenia // nastavenie prerušenia timer2
TCCR2A = 0; // nastavenie celého registra TCCR2A na 0
TCCR2B = 0; // to isté pre TCCR2B
TCNT2 = 0; // inicializácia hodnoty počítadla na 0
// nastavenie porovnania registra zhody pre prírastky frekvencie (hz)
OCR2A = setocroa; // = (16*10^6) / (frekvencia*8) - 1 (musí byť <256)
// zapnite režim CTC
TCCR2A | = (1 << WGM21); // Nastavte bit CS21 pre 8 predzosilňovačov
TCCR2B | = (1 << CS21); // povolenie prerušenia porovnávania časovača
// TIMSK2 | = (1 << OCIE2A); // to funguje, rovnako ako nasledujúci riadok
sbi (TIMSK2, OCIE2A); // povolenie prerušenia na časovači 2
sei (); // povoliť prerušenia
Nároční čitatelia budú mať škvrnitú sbi (TIMSK2, OCIE2A)
Nastavil som niekoľko (z internetu získaných) funkcií na nastavenie a vymazanie registrových bitov:
// Definuje vymazanie registrových bitov#ifndef cbi
#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
#koniec Ak
// Definuje pre nastavenie registrových bitov
#ifndef sbi
#define sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))
#koniec Ak
Tieto funkcie poskytujú jednoduché volanie na nastavenie alebo zrušenie prerušenia.
Prerušenie teda beží, čo môžeme urobiť?
Krok 9: Prerušenia a dvojité ukladanie do vyrovnávacej pamäte
Pri 22 Khz je každých 0,045 ms vyvedený bajt zvukových údajov
512 bajtov (veľkosť vyrovnávacej pamäte) sa odčíta za 2,08 ms.
Vyrovnávaciu pamäť nie je možné načítať z karty SDCard v jednom cykle zápisu.
Na port je však zapísaných 512 bajtov za 23,22 ms.
Všetko, čo musíme urobiť, je nastaviť nový prečítaný súbor vždy, keď sa vyrovnávacia pamäť vyprázdni, a budeme mať dostatok času na získanie údajov skôr, ako bude potrebný nový dátový blok … Za predpokladu, že používame dve vyrovnávacie pamäte, pričom jednu vyprázdňujeme, keď plníme inú.
Toto je dvojité ukladanie do vyrovnávacej pamäte.
Čítanie súboru sa spomalí opakovaným prerušením, ale dokončí sa.
Nastavil som dva 512 bajtové vyrovnávacie pamäte nazývané bufa a bufb.
Ak je vlajka aready pravdivá, čítame z portu, inak čítame z portu
Keď pozícia vyrovnávacej pamäte (bufcount) dosiahne veľkosť vyrovnávacej pamäte (BUF_SIZE 512), nastavíme príznak s názvom readit na true.
Rutina prázdnej slučky vyhľadá tento príznak a spustí čítanie bloku:
if (readit) {if (! aready) {
// spustenie čítania bloku SDCard na bufa
tempfile.read (bufa, BUF_SIZE);
} else {
// spustenie čítania bloku SDCard na bufb
tempfile.read (bufb, BUF_SIZE);
}
readit = false;
}
Po dokončení rutinné príznaky readit = false.
V rámci rutiny prerušenia musíme skontrolovať, či sa prázdna slučka skončila, a skontrolovať, či je readit == false.
V takom prípade signalizujeme, že je potrebné ďalšie čítanie, a prepnutím medzipamäte prepíname vyrovnávacie pamäte.
Ak karta SD stále číta, musíme sledovať jedno čítanie (počítadlo--; bufcount--;) a ukončiť prerušenie, aby sme to mohli skúsiť znova neskôr. (Kliknutia na zvukový výstupný signál naznačujú, že k tomu došlo.)
Keď sa prečítajú všetky údaje, prerušenie sa zruší, port sa znova nastaví na hodnotu stredného napätia 128 a zvukový súbor sa zatvorí.
Pred prvým spustením skriptu dac2.ino nastavte hlasitosť na 50%. Bude to príliš hlasné, ale je to lepšie ako 100%!
Ak ovládanie hlasitosti funguje opačne, vymeňte vodiče na opačných koncoch 10K potenciometra.
Dajte mi vedieť, ako to znie.
Odporúča:
Reproduktor nálady- výkonný reproduktor na prehrávanie hudby nálady na základe teploty okolia: 9 krokov
Reproduktor nálady- výkonný reproduktor na prehrávanie hudby nálady na základe teploty okolia: Dobrý deň! Pre môj školský projekt v MCT Howest Kortrijk som vyrobil reproduktor nálady, ktorý je inteligentným reproduktorom Bluetooth s rôznymi senzormi, LCD a WS2812b LED pásik je súčasťou dodávky. Reproduktor prehráva hudbu na pozadí podľa teploty, ale môže
Ako vytvoriť stereofónne rádio Ford Audiophile na prehrávanie súborov MP3 .: 7 krokov
Ako vytvoriť stereofónne rádio Ford Audiophile na prehrávanie súborov MP3: Tento návod vám poskytne niekoľko dôležitých podrobností o tom, ako splniť požiadavky na kompatibilitu s formátom MP3 CD-R vozidla Ford Audiophile (a pravdepodobne Mach 300, Shaker 500 a Shaker 1000). ) továrenské stereo, takže si môžete napaľovať a užívať súbory MP3 na disku CD
Použitie automobilového stereo na prehrávanie MP3 na staršom domácom stereu: 7 krokov
Použitie automobilového stereo na prehrávanie MP3 na staršom domácom stereu: Prehrávanie súborov mp3 na domácom stereu Za posledné dve desaťročia som stiahol alebo skopíroval zhruba 5 000 klasických rockových melódií a potreboval som jednoduchý spôsob prehrávania súborov digitálnej hudby na staršom domácom stereu. Mám zapojený počítač domáceho kina (HTC)
Hovoriace Arduino - Prehrávanie MP3 s Arduino bez akéhokoľvek modulu - Prehrávanie súboru MP3 z Arduina pomocou PCM: 6 krokov
Hovoriace Arduino | Prehrávanie MP3 s Arduino bez akéhokoľvek modulu | Prehrávanie súboru MP3 z Arduina pomocou PCM: V tomto návode sa naučíme, ako prehrať súbor mp3 s arduino bez použitia akéhokoľvek zvukového modulu, tu použijeme knižnicu PCM pre Arduino, ktorá prehráva 16 -bitový PCM s frekvenciou 8 kHZ, takže to urobíme
Arduino Bascis - prehrávanie zvukov a tónov: 5 krokov
Arduino Bascis - Prehrávanie zvukov a tónov: Chcel som hrať niekoľko zvukových efektov a uvedomil som si, že toto je jedna z opomínaných oblastí, pokiaľ ide o návody. Dokonca aj na Youtube chýba dobrý návod na Arduino a zvuky, takže ako milý chlapík som sa rozhodol podeliť sa o svoje znalosti