Ljudkrets eller PCM WAV direkt via uC? EEPROM?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Ljudkrets eller PCM WAV direkt via uC? EEPROM?

Inlägg av Frisk »

Håller på med en undersökning angående ljudkretsar då då det är problem med den ljudkrets som för tillfället används.

Har inget behov av att kunna spela in ljud, men ska kunna spela upp egendefinierade ljud på begäran med hyffsad kvalité.

Har sökt en del efter användbara ljudkretsar men inte funnit speciellt många, den som nu verkar intressantast är OKI ML22Q54 som är samplad och skall utvärderas, denna ska gå att koda direkt med ljudfiler via USB-interface. Vad som mer verkar lite intressant är Winbound 1600B, även denna verkar gå programmera via USB, men inte lika lätt som OKI-kretsen.

Vad jag mer funnit när jag sökt efter ljudåtergivning med mikroprocessorer är att skicka ut PCM-signaler antingen via DAC eller PWM, vilket processorn borde orka med, är inte jättetungt belastad, men används som USB-device så går väl en del kraft åt det, är en PIC18F4550.

För att detta ska fungera antar jag det kommer behövas mer minne än det inbyggda. Har kollat lite på EEPROM men börjar fundera på hur man programmerar detta, kommer ju användas för det inte finns nog med utrymme på mikroprocessorn, så går ju inte programmera genom denna. Kan man programmera detta direkt via USB?

Är det någon som har andra förslag på ljudkretsar? Har funnit en del som verkar intressanta, men kräver att ljudet spelas in via mikrofon eller liknande, vilket inte fungerar i detta projekt.

Ursäkta ev. dumma frågor angående EEPROM men aldrig använt det tidigare.

/Johan Frisk
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Titta på Dataflash istället, mycket större lagringsutrymme än vanliga EEPROM:ar
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Inlägg av Frisk »

Tack för tipset!
Tror dock det räcker med med EEPROM för detta, bara korta fraser/ljudeffekter som ska spelas upp, men är ju alltid bra att veta alternativen!
Mycket hänger nog på priset. Ska ju bli ett billigare och smidigare alternativ än separat ljudchip om det ska vara några fördelar med det.

Dock kan ju ljudchipet ställa till med mer problem än vad som är känt nu, därför fler alternativ undersöks.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> med hyffsad kvalité.

Definiera "hyffsad",

Du kan även kolla Roman Black's 1-bit metod :
http://www.romanblack.com/picsound.htm

Använd gärna PIC'ens Flash, normalt har man mycket mer utrymme där
än i EEPROM (i alla fall det inbyggda EEPROM'et).

När du säger "EEPROM" så är det bra om du även säger "interna" eller
"externa" så att man vet vad du talar om.
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Inlägg av Frisk »

När du påpekar det inser jag ju hur otydligt inlägget är. Kanske till viss del beror på att jag inte själv har riktig koll på vilka krav som finns, men antar det i alla fall inte får vara under telefonkvalité

med EEPROM menade jag ett externt, då PICens är så litet, men då, vad jag vet, det inte är tänkt att kunna ändra ljud i efterhand skulle det nog även fungera med ett externt ROM, om det finns bra sånna, aldrig varit i behov av att lagra större mängder data förut så detta är helt nytt för mig.

Tack för länken förresten, ser riktigt intressant ut, får kanske bli ett experimentkort där det går testa både PCM och Roman Blacks 1-bitsmetod, de två, som jag ser det, intressantaste alternativen nu, ljudkretsarna verkar vara till mer besvär än vad de har fördelar, så länge inte tanken är att hela tiden byta ljuden via mic.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Ta en titt på ADPCM också
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> med EEPROM menade jag ett externt,

OK.
Jag vet inte hur mycket lagringsutrymme du behöver, men många PIC
modeller har lika mycket internt Flash som externa standard EEPROM.

Externa *flash* minnen däremot, brukar ha betydligt med utrymme...
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

VLSI har helt underbara kretser för att göra detta med, styr den med din MCU så har du ett mycket bra system väldigt enkelt.

http://www.vlsi.fi/en/products/vs1053.html
Stranne
Inlägg: 48
Blev medlem: 28 maj 2008, 09:52:31
Ort: Stockholm

Inlägg av Stranne »

Jag har också ett WAV-projekt köat, men till det tänkte jag använda ett SD-kort (16MB) jag hittade i grovsoporna. Kanske overkill, men det blir så mycket flexiblare.
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Inlägg av Frisk »

Tack för alla svar!
Tror det räcker med det interna minnet, i alla fall om 1-bits-metoden kommer användas, annars får nog externt minne kopplas till, men behövs väl inte för de första testerna, går det få ut något kort ljud med tillräcklig kvalité går det ju utöka med minne sen.
VLSI verkar ju vara ett fint chip, men klart överdimentionerat för detta projekt, ska bara vara ljudrespons på olika inmatningar, blir en för stor och dyr lösning (med externa minnen m.m.
Även SD-kort är utanför gränserna, ska gå lätt och snabbt å programmera samtidigt som det ska få plats i en befintlig låda, ursäkta om jag beskrev projektet lite dåligt i första frågan.

Ska altså in i en befintlig produkt, sitter där i nuläget en ljudkrets som dock inte fungerar optimalt, ska därför bytas ut mot en fungerande krets/lösning.
Är inte en produkt i endast en upplaga, därför styckpris och simpelhet vid programmering är viktigt.
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Inlägg av Frisk »

Har nu provat Roman Black's 1-bit metod utan något vidare resultat, får ut ljud m.m. men får inte ut något allt som liknar tal eller liknande (försökt med en av de wav-filerna som följde med nedladdningen av programmet) får massa knaster m.m. och ett digitalt pulståg på oscilloscopet ut från PICen, och något som börjar likna en sinus efter filtret, men som sagt, inte något ljud som låter som det konverterade.

Är det någon här som provat denna metod? Vad har använts för förstäkare m.m.? just nu försöker jag med en OP-förstärkare av "analoga" signalen efter filtret även testat lite olika kondensatorer för att jämna av ev. spikar, men verkar inte hjälpa.

kanske kodfel?

Skrivet i C, gjort om ut-filen till en array på de antal bytes som skapas i programmet och anropar den såhär i ett timer-interrupt:

soundbit = sound[possition] & (1 << i);
PORTCbits.RC2 = soundbit;

i är global räknas upp i varje interrupt.
i main testas om i större eller lika med 8 om så är fallet sätts i till 0 och possiton plussas på.

sound-arrayen ser ut såhär:
const rom char sound[] =
{
0x55,
0x55,
0x55,
0x55,
0xXX,
0xXX,
.
.
.
0xXX};
Matte
Inlägg: 218
Blev medlem: 4 april 2007, 19:54:17
Ort: Stockholm

Inlägg av Matte »

Wow det där verkar knasigt, du kan inte bara andvända en PWM? vet att vi har ett utvecklingskort som kör en PWM genom ett tre poligt RC-filter(tror jag det va) och det ger ett rätt okej ljud(typ telefon kvalité).
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Timer_ISR:
static unsigned char Counter, Position, Data;
if(!Counter) Data = Sound[Position];
PORTCbits.RC2 = Data & 1;
Data >>= 1;
if(!Counter) Position++; // Done here as the bit is to be output fast
Counter++;
Counter &= 0x07; // No more than 7!

Snabbare kan det nog göras men då är det lite annat som ska pillas med. Detta ger att chansen för att bitsen kommer i fast takt större och därmed blir ljudet mindre dåligt. Det kan göras på ett annat sätt som ger helt stabil bitfrekvens men detta borde räcka.

Matte: Det blir ju en sorts PWM fast det är med mycket varierbar form, man spelar ju upp bit för bit.
Frisk
Inlägg: 92
Blev medlem: 9 maj 2007, 21:31:10
Ort: Södertälje
Kontakt:

Inlägg av Frisk »

Tack för exempelkoden Icecap, fungerar nu, vad som dock behövde ändras var Position, fler än 255 bytes..
I övrigt var det nog inget som behövde ändras.
Dock är inte kvalitén speciellt bra, vet inte om det beror på kod/hårdvara eller om det helt enkelt är såpass dåligt, väldigt brusigt, duger inte som det är nu, testar lite PCM istället, dock en bit kvar, inte fått ut något som liknar ljud ännu.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Alltså: låg bitrate ÄR låg bitrate hur man än ser det. Låg bitrate ger dålig kvalitet, det bara är så. Visst, man kan komprimera och packa upp (MP3 osv.), detta ger bättre ljudkvalitet för en given bitrate men ska det vara "bra" ska bitraten upp.
Skriv svar