SD Kart WAV Player ve R-2R DAC İçin En Uygun Filtre

Başlatan -Hasan-, 07 Ekim 2011, 17:22:36

-Hasan-

Arkadaşlar herkese çok teşekkür ederim. 7.87 K ve 1 nF ile PWM ile DAC ' yi bir deneyeyim. Deneyince sonucu söylerim.

Herkese kolay gelsin.

-Hasan-

Tekrar merhaba arkadaşlar;

Alıntı yapılan: bunalmis20Khz den sonrasi ile isin olmayacagina gore 20Khz ustunu filitrelemelisin.

bunalmis hocam 20 Khz derken şarkının örneklenme frekansını mı kastetmiştiniz? Ben 44,1 Khz örneklemeli datalar kullanıyorum. Bu şekilde düşündüğünüzü göz önüne alarak, RC değerlerini yaklaşık 44 Khz ' den sonra kesecek şekilde düzenledim ama cızırtı devam ediyor. 20 Khz ' den sonra kesecek şekilde yaptığımda da cızırtı devam ediyor.

Ama bunun sebebinin, yazılımda, dataların PWM duty registerine iyi aktarılamamasından dolayı olduğunu düşünüyorum. Çünkü; frekansa göre max PWM çözünürlüğü değişiyor:



Bu durumda duty registerine yüklenecek maximum değer de değişiyor. Ben veriyi MSBJ (sola yanaşık) olarak veriyordum ancak bu şekilde asıl olması gereken değer yüklenmemiş oluyor.

Peki hocam PWM ' i bırakıp, R-2R devresi yerine DAC0808 gibi normal bir DAC entegresi kullansam sorunum çözülürmü?

z

Bahsettigin cizirtiyi duyabilsek daha iyi olurdu.

Sorun amplifikatoru zora sokacak asiri genlik de olabilir. Hic amplifikatoru devreye sokmadan 1v genlik elde edecek sekilde opampla sesi yukselt (yada zayiflat) ve opamp cikisina kapasitif kuplajla kaliteli bir kulaklik baglayip dinlemeyi dene. Belki de hic cizirti olmayacak.

Scopun yoksa zaten sorunun kaynagini bulman da zor.

20Khz ustunu filitrelemen lazim. Ornekleme frekansinin ustunu degil.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

-Hasan-

Alıntı YapSorun amplifikatoru zora sokacak asiri genlik de olabilir. Hic amplifikatoru devreye sokmadan 1v genlik elde edecek sekilde opampla sesi yukselt (yada zayiflat) ve opamp cikisina kapasitif kuplajla kaliteli bir kulaklik baglayip dinlemeyi dene. Belki de hic cizirti olmayacak.

Hocam PWM çıkışını filtre edip seri kondansatör ve trimpottan direkt 5+1 girişine bağlıyorum. Referans 3.3 V. Sorun yükselteç olmaması da olabiliyor mu yani? Peki hocam opampı, gerilim izleyici (voltage follower) olarak mı bağlayacağım? yoksa gerilim çarpıcı şekilde mi? bir de kapasitif kuplaj düşük geçiren RC mi oluyor?

Alıntı YapScopun yoksa zaten sorunun kaynagini bulman da zor

Hocam 16 yaşındayım. Ne yazıkki scop yok.

z

#19
16 yasindakine kiz vermezler ama scop verirler.

Sakin  PWM bastigin verilere V/2 degerinde ofset vermeyi unutmus olmayasin.

Hic ses yokken pwm degeri olarak PWM_MAX/2 yollanmasi gerekiyor. Aksi halde overflow olur ve bunlar cizirti olarak kendini gosterir.

Sesi kulaklikla dinlemek icin.

LM358 in beslemesini +6...12v araliginda ver. Bunu mumkunse ayri kaynaktan besle.

Opampin - giris ile cikisini birbirine bagla.

+ giris ile sase arasina 10n bagla. 10n ucuna 8K2 uzerinden pwm gelsin.

opamp cikisi ile Gnd arsina 10K trimpot bagla. Orta ucunu diger opampin + girisine gir.

Bu opampin - girisi ile cikisi birbirine bagli olsun ve buraya 1uf ve bunun da cikisi ile gnd arasina kulaklik bagla.

Trimpotu kis ve sesi dinle.

Isin icine 5+1 hic girmesinki sorunu bulalim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

-Hasan-

bunalmis hocam; 8.5 K + 1 nF ile bir deneme yaptım, dediğiniz değerler elimde yok, havadan dolayı dışarı da çıkamadım. Ama bir şey farkettim; ses kısıkken cızırtı daha çok belli oluyor.

Alıntı yapılan: bunalmisSakin  PWM bastigin verilere V/2 degerinde ofset vermeyi unutmus olmayasin.

Hic ses yokken pwm degeri olarak PWM_MAX/2 yollanmasi gerekiyor. Aksi halde overflow olur ve bunlar cizirti olarak kendini gosterir.

Bu dediğinizi tam anlamadaım hocam. Karttan okuduğum dataları ilk önce bir buffer ' de depolayıp sonra da kesme ile çıkışa aktarıyorum. Sizin dediğinize göre datayı vermeden önce hangi işlemden geçirmem gerekiyor?

z

Datalarının yapısını ve kullandıgın donanımını  bilmiyorum. Zor olmayacaksa 8 bit çalışıyorsan pwm registerine yükleyeceğin veriye 128 değerini ekle sonra registere yaz.

Yani, n bit pwm kullanıyorsan datalara  2^(n-1) ekleyeceksin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

-Hasan-

#22
Selamlar;

bunalmis hocam dediğiniz gibi yaptım ama ses çok daha kötü oldu nedense. Hocam bir de normal DAC entegresi ile deneyeyim diyorum. Bunun için DAC0808 düşünüyorum ama hocam datashetteki ve internetteki örneklerde falan simetrik besleme yapılmış. DAC0808 ' e illaki simetrik besleme mi gerekir?

Sdttn

Kesme kullandığınız için olmasın bufer süresi tahmini ne kadar? Her her kesmede çok az da olsa gecikme olduğundan bunu cızırtı gibi duymak mümkün olabilir belki.

Jitter deniliyor galiba bu zamanlamadan kaynaklı hatalara. (emin değilim)


-Hasan-

Hocam öyle olacağını zannetmiyorum. Programı ASM ile yazdığım için her şey kontrol altında yani hesaba katılmayan bir gecikme söz konusu olamaz, her şeyi en ince ayrıntısına kadar hesapladım. Kesme sürelerini oynayarak ta denemeler yaptım ama şarkı hızlandı veya yavaşladı, cızırtı aynen kalıyor.

Cızırtıyı duymazdan gelsek şarkı çok net ve olması gerektiği gibi çalıyor aslında.

İlginiz için teşekkür ederim.

My75

Eprom ile yapılan wav devreler var,bundan esinlenerek 24c512 eeprom ile bir player yaptım.DAC için R2R kullandım,Sample 8Khz,8bit..Sonuç işimi görecek kadar iyi yani mp3 kalitesinde bir sese ihtiyacım yok,yapmak istediğim model araçlar için marş,rolanti v.s sesler üretmek..Adobe Audition programı ile sesleri istediğim gibi kesip düzenleyip wav olarak kaydediyorum ve Ponyprog ile eeproma yüklüyorum..

Şimdi buradaki avantajım eepromun ilgili adreslerini sürekli loop yaparak fazla yer kaplamadan bir rolanti sesini elde ediyorum..Dezavantajım eeprom alanı kısıtlı,64k alan looplar ile belki yetecek ama rahat rahat çalışmak varken kasmamak gerek..

Sd kart tecrübem olmadı,aynen epromdaki gibi adresleri kontrol ederek aynı sonucu alabilirmiyim.Yani loop geçişlerinin çok kısa olması gerek,yada ISD bir çipi aynı şekilde kullanabilirmiyiz??..Yada SST28F40A tipi 512KByte tipi bir eeproma geçmek lazım,buda 19bit adresleme ve pic ile uğraşmak lazım..
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

-Hasan-

#26
Merhabalar;

Alıntı yapılan: My75Sd kart tecrübem olmadı,aynen epromdaki gibi adresleri kontrol ederek aynı sonucu alabilirmiyim.

Hocam ben SD karta çalmak istediğim WAV dosyalarını atıp, WINHEX programıyla dataların başlangıç adresini buluyorum. Adresi PIC programına başlangıç adresi olarak giriyorum, şarkılar çalıyor. İşin içine FAT girmeden işi çözmek için bu yöntemi kullandım. PIC18F4620 kullandım, 40 Mhz ' de çalışıyor. Haberleşme için dahili SPI modülünü kullandım, SD kart ile haberleşme hızı 2.5 Mhz. 8 Bit 44.1 kHz Mono WAV dosyaları kullanıyorum, hız yeterli oluyor.

Dosyaları örnekleme zamanlarını kesme ile ayarlıyorum. Program ilk önce kartı initalize ediyor. Ondan sonra karttan her seferinde 512 byte bilgi okuyup RAM ' da boş bir alanda depoluyorum, Timer kesmesini de 44.1 Khz yapıyorum, o da RAM dan dataları okuyup, PWM ' e gönderiyor. Algoritmam da basit bir anlatımla bu şekilde.

Seste cızırtı olduğunu söylemiştim; onun da sebebinin %90 - 95 breadboarddan olduğunu düşünüyorum. Çünkü; bir ara devre çalışırken, normalde cızırtılı çalan bir şarkı o kadar sade ve güzel çaldı ki çok şaşırdım. Bu da demektir ki yazılımda ve donanımda sorun yok. Bu yüzden böyle bir kanıya vardım. Yakında deney kartı alınca çalışmalara kart üzerinde devam edeceğim. Breadboarddan iyice soğudum.  >:(

Alıntı yapılan: My75Yani loop geçişlerinin çok kısa olması gerek

Hocam SD karttan okumak çok zor değil. Loop derken neyi kastetmiştiniz?

izturk

mesajları gözden geçirdim ama hepsini tam okumadan yazıyorum kusura bakmayın.
ben de eeprom la bi se devresi yapmıştım. r 2r kurarken 1k 2k2 4k7 gibi tam 2 katı olmadan kurmuştum. baya tırmalama sonucu son çare olarak 1k 2k 4k tam değerler kullanarak r-2r devresini oluşturdum. cızırtılar baya azalmıştı.
siz r-2r yi nasıl kurdunuz bilmiyorum ama belki faydası olur

My75

Loop derken tekrarlama anlamında dedim.Örnek olarak orglarda ritim yazarken 1 ölçü ritim basarsın ve aynı ölçü döngü içinde sürekli tekrarlar ve bunun tekrarlama olduğu farkedilmez.

Bende aynı mantıkda bir otomobil motorunun rolanti sesini bu döngüye sokuyorum,rolanti süper oluyorda devir yükseltmede şuan için sıkıntı yaşıyorum oda hafıza ve sample kaynaklı :D

Elimde 24C256 vardı,8K örnekleme,8bit ile 4.1 sn. kayıt yapıyor.512Kb hafıza kullansam toplamda 66 sn. sanırım yeterli olur.Benimki hobi amaçlı,yoksa MFC-01,MFC-02 olarak bu işi yapan kitler var ve oldukça pahalı.

Sd kart olayı zor değil aslında kısa sürede çözerim ama her nedense UV epromla yapılan bu işi I2C eepromla denemek istedim.

R2R olayı ise port çıkışları 22k ve 22k paralelinde 11K, çıkışında 100n filtre ve 10n ile Lm386 girişinde.Şahsen hiç cızırtı v.s yok,en azından oyuncaklardan çıkan seslerden çok daha iyi..
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

-Hasan-

Alıntı yapılan: izturk - 12 Kasım 2011, 00:48:17
mesajları gözden geçirdim ama hepsini tam okumadan yazıyorum kusura bakmayın.
ben de eeprom la bi se devresi yapmıştım. r 2r kurarken 1k 2k2 4k7 gibi tam 2 katı olmadan kurmuştum. baya tırmalama sonucu son çare olarak 1k 2k 4k tam değerler kullanarak r-2r devresini oluşturdum. cızırtılar baya azalmıştı.
siz r-2r yi nasıl kurdunuz bilmiyorum ama belki faydası olur

izturk Hocam; artık R - 2R kullanmıyorum. PWM ile yaptım. PWM, yaklaşık 156 Khz ' ye kurulu çıkışında 7.5 K + 1 nF filtre var gayet iyi sonuç veriyor. bunalmis Hocamızın yardımlarıyla bu hale getirdim.O cızırtısız olan denemede de PWM vardı. Benim sorunum % 90 - 95 breadboard yüzünden. Bir deneme kartında devreyi kuracağım. O zaman da olmazsa farklı alternatifler düşüneceğiz. Yanlış hatırlamıyorsam sizin de böyle bir çalışmanız vardı ne oldu?

Alıntı yapılan: My75 - 12 Kasım 2011, 03:51:46
Loop derken tekrarlama anlamında dedim.Örnek olarak orglarda ritim yazarken 1 ölçü ritim basarsın ve aynı ölçü döngü içinde sürekli tekrarlar ve bunun tekrarlama olduğu farkedilmez.

Bu da sorun değil hocam. O sesin adresinin sonu geldiğinde tekrar baş adrese çevirirsiniz. Ses tekrarlanmış olur.

Alıntı yapılan: My75 - 12 Kasım 2011, 03:51:46
R2R olayı ise port çıkışları 22k ve 22k paralelinde 11K, çıkışında 100n filtre ve 10n ile Lm386 girişinde.Şahsen hiç cızırtı v.s yok,en azından oyuncaklardan çıkan seslerden çok daha iyi..

Hocam şema olarak verebilirmisiniz?