Proje: D-Class Amplifikatör Yapıyoruz!!

Başlatan FxDev, 28 Kasım 2014, 23:37:45

mistek

#150
Bu tip OLED veya GLCD leri bu proje kapsamında bizde öğrenecek miyiz? Yoksa sadece PC ortamında mı göreceğiz?

ADClerimizi tam 25us aralıklarla örnek alacak şekilde mi kuruyoruz?  Bilgisayara seri porttan göndermek kolayda PC tarafında bilgim sıfır. Sağolsun FxDev'in seriport programı işimizi görüyor geri kalan kısmında yardıma ihtiyaç var :)

Birde tam 25.0000us olmak zorunda mı? 24.75us olsa kurtarmaz mı?

Kullandığım işlemcinin adc çevrim süresini buraya kadar düşürebiliyorum tam 25.000us olacaksa harici tetikleme gerekecek
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

FxDev

#151
24.75us'de uygundur. Mesele 20kHz'in en az iki katı olsun da.

OLED'lerden iki adet söyledim daha elime geçmedi. Bir tane üstü sarı mavi olanlardan bir tane de videodakinlerden. 4 dolar tanesi, başka projelerde de rahatlıkla kullanılır. Yanılmıyorsam direnç.nette de vardı. Ben bir kütüphane oluşturup kullanmayı düşünüyorum her projemde çok şeker bir şey, 1".

Mesele tam aynı sürelerde alınsın. Birisi atıyorum 25us'de diğeri 26us'de sonra 24us'de olursa olmuyor bu iş. Zamanlamalar tam tutmalı. Seri porttan alınan 64'lük diziyi buraya yazarsak gerisini normal ansi C programlarından hallederiz. Code:Blocks vardı benim kullanmayı sevdiğim.
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

mistek

OLED leri ebayden mi aldınız hocam? Link atarmısınız ? Bu tip şeylere çok uzağım ne yapılır nasıl kontrol edilir hiç bilgim yok.

24.75us uygunsa ADC-DMA birlikte çalıştırıyorum zaten sürelerde bozukluk olmayacaktır.

64 örneğide anlamadım. Saniyede 40bin örnek alıyoruz bunu 64 parçaya bölüp seyrekleştirecek miyiz?

(Kafam durdu)

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

robomaster

Ben örnek bir Fast Fourier Transform kütüphanesini inceledim. Bir mikrar örnekleme fft işleme girmeden önce bir buffer a atılıyor ve sonra bir şekilde :) işleniyor.

Mantığını detaylı anlamak bir mesesle bir. İkincisi bazı fonksiyonlar (karekök gibi ...) hız için tekrar assembler da yazılmış. Çözmek zaman alır.
Hazır kütüphane de pek kullanmak, ben yaptım demek açısından da pek hoşnut etmiyor.

FxDev

@mistek: http://www.ebay.com/itm/301401249908

64 adet 25us de bir alınmış örnek :)
1. örnek 25us bekle 2. örnek 25us bekle 3. örnek gibi. Yani toplamda 1.6ms'de alınmış 64 örnekten bahsediyorum :)
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

mistek

Tamam anladım sanırım.

25us de bir örnek al 64 örnek olunca PC ye gönder. Doğru mu? Yoksa Geleni hemen gönderecek miyiz?

Veriyi siz ne ile bilgisayara göndermeyi planlıyorsunuz? Seriport 115200 baudrate yeter mi?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

AsHeS

Konuyu baştan okumadım ama gömülü tarafta veri işleme için ping-pong buffer kullanılabilir.
4 tane 1024 lük ram alanı oluşturulur. Her edma 1024 lük alanı 24.75 us luk örneklerle doldurduğunda interrupt gönderir. Sizde tekrar dma yı bir sonraki buffer adresinizle init edersiniz bu arada 1024 lük örneklerinizin FFT sini çıkartırsınız. Devamlı update edip çıktı üzerinde işlem yapılabilir. Böylelik her bir bufferı işlemek için elinizde 3*1024*24,75 us lik zaman olur.
Ses kaynağı ile çıkışı arasında ki gecikme en iyi durumda 25 ms civarında olacaktır.

FxDev

@mistek: İlk bir kaç veriyi bilgisayara gönderip excel gibi bir programla sinyale bakmak lazım. Bakalım örneklerimiz doğru mu. 115200 yeterli olacaktır sanırım.

@AsHes: 1024 örnek çok fazla geldi. Ben de sizin mantığınızla ilerleyeceğim onun için DMA'yı sıkıştırıyorum. Ben bunu 64 örnek üzerinden yapacağım, yetmezse 128 yaparım. Ama konu görsellik olduğu için gelişime göre bakacağım duruma. 40kHz örneklemede 64 örnek 1.5ms yapıyor. 1.5ms'de, FFT'yi bitirip ekrana basmak şart. Bakalım işlemci hızı yeterli olacak mı, FPU olmadan!
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

AsHeS

Alıntı yapılan: FxDev - 12 Aralık 2014, 01:34:06
@AsHes: 1024 örnek çok fazla geldi. Ben de sizin mantığınızla ilerleyeceğim onun için DMA'yı sıkıştırıyorum. Ben bunu 64 örnek üzerinden yapacağım, yetmezse 128 yaparım. Ama konu görsellik olduğu için gelişime göre bakacağım duruma. 40kHz örneklemede 64 örnek 1.5ms yapıyor. 1.5ms'de, FFT'yi bitirip ekrana basmak şart. Bakalım işlemci hızı yeterli olacak mı, FPU olmadan!
Örnek adedi değişir çok problem olmaz, dediğim gibi işlem hızı yetmezse buffer içeriğini küçültüp adedini arttırırsınız. Sesin gelişini yavaşlatırsınız yani ekranda görülen aslında 10 ms öncesinin sesi olur gibi vs.

FxDev

#159
Evet arkadaşlar, bugün güzel gelişmeler oldu.
DMA ile ADC'yi senkron çalıştırmayı başardım. 40kHz ile 64 örnek aldım. Örneklerimi aşağıda veriyorum. Unutmayın ki örnekler offset değerli (2048). Burada iki adet sinyalin birleşimi var. Ne olduğunu söylemeyeceğim. Bunu FFT ile bulmamız gerekiyor. Algoritma çalışmak isteyenler bunun üzerinden çalışabilirler.

Bu aşamada ben de donanımı bırakıp algoritma üzerine çalışacağım. Çalışacağım ortam ise Code:Blocks adlı C uygulaması olacak.

Skoptaki görüntüde ADC'ye giren sinyal ile 64 adet örneğin hemen örneklendikten sonra çıktısının DAC'a yansıması. Faz farkı açıkça gözüküyor.

Sinyalin şekli ve dataları:





2241 
1829 
1442 
1092 
812 
689 
632 
794 
1033 
1346 
1750 
2070 
2433 
2653 
2790 
2813 
2721 
2554 
2373 
2151 
2018 
1930 
1911 
2001 
2178 
2385 
2640 
2830 
2956 
3003 
2911 
2722 
2441 
2025 
1661 
1266 
950 
732 
639 
703 
875 
1160 
1525 
1888 
2253 
2541 
2764 
2788 
2792 
2662 
2486 
2275 
2090 
1959 
1906 
1938 
2093 
2266 
2491 
2727 
2893 
3001 
2986 
2857
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

iruraz

@FxDev hocam, skobun pc arayüzü olarak hangi programı kullanıyorsunuz?

FxDev

Ben direkt USB Flasha kaydediyorum. En hızlı öyle oluyor.
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

iruraz

Alıntı yapılan: FxDev - 12 Aralık 2014, 14:12:17
Ben direkt USB Flasha kaydediyorum. En hızlı öyle oluyor.

Teşekkürler hocam.

mustafaelektro

Baştan sona ürün tasarımını anlatıyoruz diyorlar, işe yarar bilgiler çıkabilir.

http://www.ti.com/ww/en/analog/Soundbar-Design-eBook/

mistek

#164
@FxDev ADC den aldığınız veriyi hemen DAC'a mı yazdınız?

Timer Triger kullandınız mı? Bu kısım nasıl olacak?

ADC den veriyi DMA ile alıyoruz, sonrasında... ?

Bu resimlerde sesi 24.75us aralıklarla örnekleyip ADC kesmesi içerisinde DAC'a yazdım denemek maksadıyla.
DMA ilede ADC nin 2 kanalından veriyi alıyorum.

Sarı: DAC Çıkış
Yeşil: Telefon kulaklık çıkışı.

Sonrasında RC devre var. 10k dirençler gerilim bölücü ve 1uf giriş kondansatörü





boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R