Ses Devresi - wav çalma Çok cızırtı var

Başlatan Ali_54, 27 Ocak 2014, 22:16:44

LukeSkywalker

Evet amaç empedans uygunlastirmak. Pwm frekansini en yukseğe ayarlayin.

Ali_54

#16
setup_timer_2(T2_DIV_BY_1,255,1); 32MHz dahili işlemci frekansım.
Hesaplayınca
PWM Frekansım=31.25 kHz

frekansım en yüksekte. Ses çok iyi Hatta A.G.F sayesinde Baslı çıkıyor. Ses şiddetli noktalarda yetmezlik yapıyor. O da Genlik çözünürlüğündendir tahminim. (8bit) o kadarı önemsiz :)

keşke dijital bir scobum olsayıdı.. Ah fakirlik :)
1 harf öğretenin 4 gün kölesi olurum.

OptimusPrime

#17



aliciğim bak senin dac ı test ettim. gördüğün gibi devre lineer değil yanlış hesaplamışsın. lineer olamadığı gibi bazı değerlerde de saçmalıyor. ilk önce adam akıllı bir dac kullanman lazım. daha sonra da kafana göre dosyayı çalmaman lazım. örnekleme frekansı diye bir şey var. wav dosyasının header kısmında örnekleme frekansını matlab ile okuyup ona göre çalman lazım. pic in portuna aktarırkende gerçekten zamanlaman doğrumu görmen lazım. bunlar önemli şeyler. ondan sonra oraya buraya kondansatör ekleyip sesi düzeltmeye çalışma. düzelmez. pisa kulesi misali...
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Ali_54

#18
OptimusPrime

Olması gereken R-2R-4R-8R şekinde 2*n olarak gider. ama elimdeki dirençler bunlardıı o yüzden onları kullandım. O yüzden biraz bozuk çıkmış olabilir. Ben mantık olarak doğru yaptığımı hala düşünüyorum. Şöyle açıklayayım bakın:

Demek istediğim budur. Bakın tamamen ardışık. Tamamen lineer.

Yani mantık doğru ama yine devresel başka bir hatam var. empedans uyumuna dikkat etmedim mesela. ve diğer söylediklerinize tamamen katılıyorum. çalışmamı elden geçiriyorum.
1 harf öğretenin 4 gün kölesi olurum.

emre salman

hocam bahsettiğiniz ilk önce tampona alma ondan sonra kesmeyle sürme işlemi nasıl olur biraz aydınlatabilir misiniz ?

rree

 Klasik yöntem Sd kart kullanıyorsan sd kartların okuma rutini byte byte görünsede 512 byte sayfa okuması söz konusu.Bu sayfa okuma  sırasında cızırtıya sebeb olacak gecikme meydana gelir.Bu gecikme 512 byte bir gelir.Klasik olarak 2 adet 512byt den büyük dizi değişkeni tanımlıyorsun. TempA[512]  TempB[512]..  Ses dalgası örneklemesi diyelim 22khz. Timer0 veya başka timer i sn de 22khz kesme oluşturacak şekilde ayarlanır. Ana program içinde bir döngü içinde sd karttan dataları ilk önce TempA yı dolduruyorsun sonra TempB yi.TempB yi doldururken TempA daki dataları timer kesmesi ile dac göderiyorsun.TempA dolarken TempB deki dataları  timer kesmesi ile dac gönderiyorsun.

Benim kullandığım yöntem bir tane temp oluşturuyorson.  Örnek verecek olursam. Daire şeklinde pist olsun iki araba var. Birinci araba senkronizeli hareket ediyor.İkinci araba birinci takip ediyor ama asla birinci arabayı geçemez.Birinci araba senkronizeli dataları daca gönderen diğeri ise  sd kartan temp i dataları dolduruyor.   Kolay gelsin