Ljudkrets eller PCM WAV direkt via uC? EEPROM?
Ljudkrets eller PCM WAV direkt via uC? EEPROM?
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
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
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.
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.
> 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.
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.
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.
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.
- 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:
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
http://www.vlsi.fi/en/products/vs1053.html
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.
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.
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};
Ä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};
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.
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.
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.
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.