Goto page 1, 2 Next
Sebastian Bialy
Guest
Thu May 03, 2007 2:56 pm
Witam!
Trafiło mi się urządzenie które ma prosty cel: powinno gadać. Powinno
gadać jednak dość inteligentnie i zrozumiale. Na tyle inteligentnie że
chciałbym użyć mikrokontrolera który będzie odtwarzał właściwe
komunikaty na podstawie pewnych danych wejściowych. Na tyle zrozumiale
żeby to nie brzmiało jak zapowiedź pociągu na naszych dworcach.
Mogę wziąść dedykowane kostki do gadania, jednak coś mnie podkusiło żeby
jednak spróbować zrobić to zestawem uC + karta SD. Karyty SD mają tak
bandycko niskie ceny że aż się prosi wsadzić jakąs 32MB za 1zł i cieszyć
się jakością 44kHz.
Wyobrażam sobie to tak:
a) jakośc 22kHz lub lepiej 44kHz 8bit. Przetwornik żaden wypasiony
wystarczy zwykła drabinka rezystorów (to w celu łatwiejszego
sterowania). Być może nawet jakieś PWM choć tutaj nie mam doświadczeń
czy się nadaje. Dziek ma być jakośc przynajmniej magnetofonu kasprzak ;)
b) mikrokontroler z rodziny AVR. Nie zależy mi na poborze prądu
(zasilanie z sieci) wiec można wsadzić 20MHz kwarc.
c) Karta SD z jakimś systemem plików. Tu jest problem największy: czy
system plików nie spowoduje dużego narzutu na odczyt z SD - na tyle
dużego że nie wyrobie się z czytaniem 44 tyś próbek na sekundę? Na razie
opcjonalnie zastanawiam się nad romfs ze względu na liniową obsługę i
trywialność. Jednak znacznie wygodniej było by po prostu wrzucić na
kartę pliki w fs w formacie FAT. Czy czytanie FAT nie będzie zbyt dużym
narzutem ?
d) podwójne bufoowanie: niestety mało ramu powoduje że niewiele mogę
poświęcić. Pewnie 256B x 2 będzie maksymalną ilością. Czy to wystarczy
aby zdążyć z obsługą fat ?
Problem w tym że nie miałem do tej pory doświadczenia z sd+fs żeby móc
dyskutować nad oszacowaniem czy to w ogóle możliwe. Jesli ktoś ma
doświadczenia jakieś to prosiłbym o głos. Mi z obliczeń wynika że
powinno dac radę bez najmniejszych problemów nawet dla 44kHz. Wole
jednak w połowie projektu nie weryfikować tego
Greg(G.Kasprowicz)
Guest
Thu May 03, 2007 4:08 pm
olej system plikow
sformatuj karte i wrzuc calego wave po kolei
jesli bedzie to jedyny plik lub jesli bedziesz je nagrywal po kolei, to sie
ustawia jeden za drugim, i mozesz je spokojnie odczytac, pomijajac naglowek
i wyslac na DAC
jesli chodzi o FAT, to jest troche implementacji na sieci, nie sadze zeby
przy tej predkosci odczytu specjalnie obciazaly procesor - odczytujesz i tak
blokami do pamieci, a potem w przerwaniu wysylasz na DACa...Tak wiec z
funkcji FAT korzytasz tylko przy adresowaniu nowego bloku do odczytu.
Mozesz sobie uproscic zadanie i jesli jestes pewien ze pliki byly wrzucane
po kolei to uzyc funkcj iFAT tylko do odnalezienia poczatku zadanego pliku.
W przypadku pamieci o duuzej pojemnosci moze pojawic sie inny problem, a
mianowicie ze od nowosci takowa moze posiadac uskodzone sektory..
Sebastian Bialy
Guest
Thu May 03, 2007 4:19 pm
Greg(G.Kasprowicz) wrote:
Quote:
olej system plikow
sformatuj karte i wrzuc calego wave po kolei
To jedna z opcji. Komplikuje ona jednak życie przy składaniu komunikatów
głosowych. Chodzi o to, że komunikaty będą tworzone przez usera
końcowego. Najlepsza opcja to wepchanie tam zwyklych plików. Jesli się
na razie nie uda to po prostu podziele kartę na sekcje i napiszę program
narzędziowy jednak to marne rozwiązanie.
Quote:
jesli chodzi o FAT, to jest troche implementacji na sieci, nie sadze zeby
przy tej predkosci odczytu specjalnie obciazaly procesor - odczytujesz i tak
blokami do pamieci, a potem w przerwaniu wysylasz na DACa...
To nie problem, ja się boje, że są takie "chwile" w działaniu fs gdzie
potrzeba dośc sporo się napracować aby odczytać nastepny cluster. I może
się nie wyrobić mi procedura, tzn nie dostarczyć danych na czas i będzie
dziura.
Quote:
Tak wiec z
funkcji FAT korzytasz tylko przy adresowaniu nowego bloku do odczytu.
No właśnie, to jest krytyczny moment.
Quote:
W przypadku pamieci o duuzej pojemnosci moze pojawic sie inny problem, a
mianowicie ze od nowosci takowa moze posiadac uskodzone sektory..
Nie przypuszczam żebym przekroczył 32MB.
MichaĹ
Guest
Thu May 03, 2007 4:49 pm
Quote:
To nie problem, ja się boje, że są takie "chwile" w działaniu fs gdzie
potrzeba dośc sporo się napracować aby odczytać nastepny cluster. I może
się nie wyrobić mi procedura, tzn nie dostarczyć danych na czas i będzie
dziura.
Ja mam zamiar zrobić to tak:
MMC, SRAM 64KB, DAC TLC7524CN (DAC+rejestr zatrzaskowy)
Licznik generuje przerwanie 8000 razy na sekundę (więcej mi nie trzeba). Co
przerwanie wysyłam bajt na DAC z tablicy.
Tablica może być cykliczna + zmienna aktualna pozycja + koniec nagrania(by
wiedział gdzie się zatrzymać)
Poza przerwaniem wczytuje słowa po zakończeniu odtwarzania poprzedniego, lub
na bierząco uzupełniam bufor jeśli muzyka ma być ciągła.
W duzym uproszczeniu będzie wyglądać to tak. Dopiero zabieram się do tago,
więc doswiadczeniami nie mam możliwości się jeszcze podzielić.
Pozdrawiam
Piotr \"PitLab\" Laskowsk
Guest
Thu May 03, 2007 5:27 pm
Quote:
Trafiło mi się urządzenie które ma prosty cel: powinno gadać. [...]
Zrobiłem kiedyś coś takiego na 51 + DataFlash. Generuje komunikaty i wysyła
przez radio. Szczegóły są tutaj
http://www.pitlab.pl/wario.html Można sobie
odsłuchać komunikat.
Quote:
Mogę wziąść dedykowane kostki do gadania, jednak coś mnie podkusiło żeby
jednak spróbować zrobić to zestawem uC + karta SD.
Dobra droga. Kostki ISD (przynajmniej te, które testowałem, sterowane po
SPI) są beznadziejne zarówno w obsłudze jak i jakości dźwięku.
Quote:
Wyobrażam sobie to tak:
a) jakośc 22kHz lub lepiej 44kHz 8bit.
Według moich obserwacji, żeby zapewnić lepszą jakość dźwięku lepiej jest
podnieść rozdzieczość niż prędkość próbkowania. Mnie wystarczyło 8 bitów, bo
przez radio i tak wiecej nie przejdzie, ale jeżeli zależy Ci na ciut lepszej
jakości to podnieś rozdzieczość do 10, czy łatwiej do 12 bitów a prędkość
próbkowania w okolicach kilkunastu kHz będzie całkowicie wystarczająca.
Quote:
Przetwornik żaden wypasiony wystarczy zwykła drabinka rezystorów
Tu nie mam doświadczenia, robiłem to na 12 bitowym DAC wbudowanym w
kontroler.
Quote:
Być może nawet jakieś PWM choć tutaj nie mam doświadczeń
Próbę można zrobić, ale obawiam sie że tą metodą ciężko będzie uzyskać
przyzwoitą jakość.
Quote:
b) mikrokontroler z rodziny AVR. Nie zależy mi na poborze prądu
(zasilanie z sieci) wiec można wsadzić 20MHz kwarc.
Kontroler będzie się nudził. U mnie do 8kHz@8 bit zajmuje 51-ce ok. 20%
procent czasu. Zegar to ~16,7MHz czyli obsługa pamięci i przerzucamie przez
bufor (potrzebny gdy zmieniam stronę pamięci) zajmuje ok. 0,25MIPSa.
Quote:
c) Karta SD z jakimś systemem plików. Tu jest problem największy
Kompletnie się na tym nie znam.
Quote:
Jesli ktoś ma
doświadczenia jakieś to prosiłbym o głos. Mi z obliczeń wynika że
powinno dac radę bez najmniejszych problemów nawet dla 44kHz. Wole
jednak w połowie projektu nie weryfikować tego
Gwarancji nikt Ci nie da, ale o ile nie zabije Cie obsługa FATu to moim
zdaniem powinno działać z palcem w uchu.
--
Piotrek.
http://www.pitlab.pl
Sebastian Bialy
Guest
Thu May 03, 2007 8:10 pm
Piotr "PitLab" Laskowski wrote:
Quote:
Dobra droga. Kostki ISD (przynajmniej te, które testowaem, sterowane po
SPI) s beznadziejne zarówno w obsudze jak i jakoci dwiku.
Szczerze mówiąc to już zrobiłem takie dwie zabawki z ISD i szlag mnie
trafia bo brzmi jak zapowiadacz z dworca w nieprzymierzając Kutnie. No i
cena , pojemność i dostępność śmieszna w porównaniu z uC+SD.
Quote:
Wedug moich obserwacji, eby zapewni lepsz jako dwiku lepiej jest
podnie rozdzieczo ni prdko próbkowania. Mnie wystarczyo 8 bitów, bo
przez radio i tak wiecej nie przejdzie, ale jeeli zaley Ci na ciut lepszej
jakoci to podnie rozdzieczo do 10, czy atwiej do 12 bitów a prdko
próbkowania w okolicach kilkunastu kHz bdzie cakowicie wystarczajca.
Dobierze się eksperymentalnie. Na razie mam założenie 44kHz/8bit. Czy to
sie zmieni zobacze jak potestuje.
Quote:
Kontroler bdzie si nudzi. U mnie do 8kHz@8 bit zajmuje 51-ce ok. 20%
procent czasu. Zegar to ~16,7MHz czyli obsuga pamici i przerzucamie przez
bufor (potrzebny gdy zmieniam stron pamici) zajmuje ok. 0,25MIPSa.
Owszem owszem, tylko rozmiar RAM do podwójnego buforowania przydał by
się spory a u mnie jak będzie 2x256B to będzie wypas. W końcu ten
kontroler robi też troche innych rzeczy i nie mogę całego ram na bufor
przeznaczać. W dodatku jesli nie masz filesystemu tylko jakaś własną
organizację to może być szybciej. Ja widze to jako wyjmowalny element
(karta SD) i najlepiej jak by się dało łatwo tam zmieniać komunikaty z
użyciem narzędzi dla blondynek. Obawiam się, że zje mnie obsługa FAT w
momentach wymagajacych jałowej komunikacji z kartą SD na obsługę fs.
Quote:
Gwarancji nikt Ci nie da, ale o ile nie zabije Cie obsuga FATu to moim
zdaniem powinno dziaa z palcem w uchu.
No własnie ten FAT. Nawet nie tyle FAT co sama komunikacja na styku
FAT-SD. Nie wiem na ile będzie narzutu na to. Nawet nie mam jak
oszacować bo doświadczeń nie mam.
Sebastian Bialy
Guest
Thu May 03, 2007 8:12 pm
Michał wrote:
Quote:
Licznik generuje przerwanie 8000 razy na sekundę (więcej mi nie trzeba).
Co przerwanie wysyłam bajt na DAC z tablicy.
Tablica może być cykliczna + zmienna aktualna pozycja + koniec
nagrania(by wiedział gdzie się zatrzymać)
Hmmm u mnie podobnie kombinuje ale problem jest z wypełnianiem tej
tablicy. Jeśli masz ciągłą strukturę danych w pamięci to nie ma
problemu. Gorzej jak chcesz mieć fs bez defragmentacji gdzie co chwile
trzeba zmieniać adres klastra. Nie wiem na ile w tym miejscu dostanę w
plecy czasowo.
BartekK
Guest
Thu May 03, 2007 9:12 pm
Sebastian Bialy napisał(a):
Quote:
No własnie ten FAT. Nawet nie tyle FAT co sama komunikacja na styku
FAT-SD. Nie wiem na ile będzie narzutu na to. Nawet nie mam jak
oszacować bo doświadczeń nie mam.
Jakbys cos zdzialal w ta strone to daj znac, sam tez nad tym siedze.
a co do DA i atmega - timer0/2 smigajacy przy 20MHz z dzielnikiem/1
przepelnia sie co 20MHZ/256=>78,125kHz, w zupelnosci wystarczy taki
przetwornik, jesli ci 8bitow starczy, a jak nie - to timer1 i
ograniczona rozdzielczosc do 10bit, to bedzie sie przepelniac co
19.5kHz, polowa z tego ~8kHz jako czestotliwosc graniczna - bedzie az
nadto dobra jakosc dzwieku (w audio nawet obciecie do 4kHz nie
zaszkodzi), a z rozdzielczosci 10bit tez juz dzwiek jest bardzo
przyjemny. Wlasnie odciecie pasma tak, by nie bylo niepotrzebnych tsss i
niskich tonow da ci ladna czytelnosc. Dodatkowo - bardzo by bylo dobrze
z jakoscia dzwieku jakbys dodal preemfaze/deemfaze - dzwiek nagral z
podbiciem wysokich czestotliwosci, a przy odtwarzaniu (za
przetwornikiem) dal filtr o nachyleniu takim samym ale w druga strone.
Dzieki temu najwyzsze czestotliwosci nie beda ci latac na 1bicie
rozdzielczosci...
--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098
http://drut.org/
|
http://www.allegro.pl/show_user_auctions.php?uid=338173
Piotr \"PitLab\" Laskowsk
Guest
Thu May 03, 2007 9:20 pm
Quote:
Kontroler bedzie sie nudzi3. U mnie do 8kHz@8 bit zajmuje 51-ce ok. 20%
procent czasu. Zegar to ~16,7MHz czyli obs3uga pamieci i przerzucamie
przez
bufor (potrzebny gdy zmieniam strone pamieci) zajmuje ok. 0,25MIPSa.
Owszem owszem, tylko rozmiar RAM do podwójnego buforowania przydał by
się spory a u mnie jak będzie 2x256B to będzie wypas. W końcu ten
kontroler robi też troche innych rzeczy i nie mogę całego ram na bufor
przeznaczać. W dodatku jesli nie masz filesystemu tylko jakaś własną
organizację to może być szybciej.
U siebie zaczynałem od 16 bajtów bufora a obecnie chodzi na 4 bajtach. Tyle
wystarcza na przełączenie strony. Właśnie kupiłem scalaki z nowszej serii
gdzie piszą coś o ciągłym adresowaniu...
Ja widze to jako wyjmowalny element
Quote:
(karta SD) i najlepiej jak by się dało łatwo tam zmieniać komunikaty z
użyciem narzędzi dla blondynek.
Gwarancji nikt Ci nie da, ale o ile nie zabije Cie obs3uga FATu to moim
zdaniem powinno dzia3aa z palcem w uchu.
No własnie ten FAT. Nawet nie tyle FAT co sama komunikacja na styku
FAT-SD. Nie wiem na ile będzie narzutu na to. Nawet nie mam jak
oszacować bo doświadczeń nie mam.
BartekK
Guest
Thu May 03, 2007 9:20 pm
BartekK napisał(a):
Quote:
a co do DA i atmega - timer0/2 smigajacy przy 20MHz z dzielnikiem/1
przepelnia sie co 20MHZ/256=>78,125kHz
Ha, to juz prawie pol softu mamy;)
Przydala by sie atmega32 z 2KB ramu, bo fat to z 512bajtow conajmniej.
Timer robi za generacje pwm, ale przy przepelnieniu rownoczesnie
generuje przerwanie, w ktorym wartosc pwm jest aktualizowana z
tablicy-bufora audio, i jest inkrementowany nr bajtu w tej tablicy.
Biorac tablice 256bajtow inkrementacja 8bitowej zmiennej-wskaznika do
tej tablicy bedzie prosta i bez koniecznosci if-owania czy juz koniec
itp, zmienna sama sie "zapetli", wiec pare cykli maszynowych na cala
operacje. Gdy sie przepelni - przelaczenie na druga tablice.
W sofcie glownym obsluga fatu i calej reszty i wpisywanie sampli z SD do
drugiej tablicy 256bajtowej. Jak jest pelna - to czekamy i nic nie
robimy
Jak sie pierwsza tablica oprozni, to sie przelaczy soft-w-przerwaniu na
druga i zacznie ja oprozniac, a w tym czasie program glowny napelni
pierwsza.
--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098
http://drut.org/
|
http://www.allegro.pl/show_user_auctions.php?uid=338173
badworm
Guest
Thu May 03, 2007 9:24 pm
Dnia Thu, 03 May 2007 15:56:47 +0200, Sebastian Bialy napisał(a):
Quote:
Problem w tym że nie miałem do tej pory doświadczenia z sd+fs żeby móc
dyskutować nad oszacowaniem czy to w ogóle możliwe. Jesli ktoś ma
doświadczenia jakieś to prosiłbym o głos. Mi z obliczeń wynika że
powinno dac radę bez najmniejszych problemów nawet dla 44kHz. Wole
jednak w połowie projektu nie weryfikować tego
Zobacz to:
http://www.mcselec.com/index.php?option=com_content&task=view&id=98&Itemid=57
Skoro dało się w Bascomie wyrobić czasowo z obsługą dysku z FAT32 to w
C/ASM tym bardziej
--
Pozdrawiam Bad Worm badworm[maupa]post{kopek}pl
IET9@WEiA-PG student
GG#2400455 ICQ#320399066
http://photobucket.com/albums/b252/badworm/
Piotr \"PitLab\" Laskowsk
Guest
Thu May 03, 2007 9:34 pm
Quote:
Kontroler bedzie sie nudzi3. U mnie do 8kHz@8 bit zajmuje 51-ce ok. 20%
procent czasu. Zegar to ~16,7MHz czyli obs3uga pamieci i przerzucamie
przez
bufor (potrzebny gdy zmieniam strone pamieci) zajmuje ok. 0,25MIPSa.
Owszem owszem, tylko rozmiar RAM do podwójnego buforowania przydał by
się spory a u mnie jak będzie 2x256B to będzie wypas.
U siebie zaczynałem od 16 bajtów bufora a obecnie chodzi na 4 bajtach. Tyle
wystarcza na przełączenie strony. Właśnie kupiłem scalaki z nowszej serii
gdzie piszą coś o ciągłym adresowaniu...
Quote:
W dodatku jesli nie masz filesystemu tylko jakaś własną organizację to
może
być szybciej. Ja widze to jako wyjmowalny element (karta SD) i najlepiej
jak by się dało łatwo zmieniać komunikaty z użyciem narzędzi dla
blondynek.
Ja stwerdziłem żw wyjmowalny być nie musi a zmiana komunikatów to wgranie
jednego pliku do urządzenia. Czy z tym poradzi sobie blondynka - trudno
powiedzieć. Jeżeli ładnie to oprogramujesz to być może sobie poradzi.
Mój system organizacji danych jest opisany w dokumentacji. W skrócie na
początku jest "spis treści" zawierający adresy sampli a potem ciurkiem
sample jako wav'y okrojone z nagłówka.
Quote:
No własnie ten FAT. Nawet nie tyle FAT co sama komunikacja na styku
FAT-SD. Nie wiem na ile będzie narzutu na to. Nawet nie mam jak
oszacować bo doświadczeń nie mam.
Może najwyższy czas aby spróbować. Ewentualnie jeżeli nie pójdzie to są
scalaki typu data flash w obudowach kartowych. Patrz w Seguro. Kiedyś nawet
kupiłem, ale jeszcze nie miałem okazji przetestować.
ps. przepraszam, poprzedni list wymknął mi się w połowie pisania i nie wiem
czy udało sie go w porę usunąć.
--
Piotrek.
http://www.pitlab.pl
Sebastian Bialy
Guest
Thu May 03, 2007 9:42 pm
BartekK wrote:
Quote:
Jak sie pierwsza tablica oprozni, to sie przelaczy soft-w-przerwaniu na
druga i zacznie ja oprozniac, a w tym czasie program glowny napelni
pierwsza.
To najzwyklejsze podwójne buforowanie, nie jeden algorytm tego typu
popełniłem na Amigę to wiem

. Martwi mnie czy się w głónej pętli
wyobie z wkładaniem do tablicy próbek.
Sebastian Bialy
Guest
Thu May 03, 2007 9:44 pm
Piotr "PitLab" Laskowski wrote:
Quote:
U siebie zaczynałem od 16 bajtów bufora a obecnie chodzi na 4 bajtach. Tyle
wystarcza na przełączenie strony. Właśnie kupiłem scalaki z nowszej serii
gdzie piszą coś o ciągłym adresowaniu...
Hmmm nie bardzo rozumiem, czytasz dane z SD ? Masz system plików ? Bo
bez systemu plików to nie ma problemu.
BartekK
Guest
Thu May 03, 2007 9:49 pm
Sebastian Bialy napisał(a):
Quote:
To najzwyklejsze podwójne buforowanie, nie jeden algorytm tego typu
popełniłem na Amigę to wiem

. Martwi mnie czy się w głónej pętli
wyobie z wkładaniem do tablicy próbek.
Wyrobi. Jadac z pelna predkoscia przy 8bitach - masz (256bajtow*256cykli
procesora) do kolejnego zapelnienia tablicy drugiej (nie liczac ile
cykli zje to co jest w przerwaniu, ale to bedzie doslownie pare linii
asm, moze z 5-10cykli?), czyli masz z ~65tysiecy cykli procesora dla
siebie

nawet z bardzo wolna karta powinno sie udac, potrzebujesz
karmic 256bajtow co okolo 3.2ms - co daje faktyczne bitrate ~80kB/s
(czyli sie zgadza:>)
--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098
http://drut.org/
|
http://www.allegro.pl/show_user_auctions.php?uid=338173
Goto page 1, 2 Next