Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

STM32F103 Sorularım

Başlatan yldzelektronik, 08 Aralık 2016, 16:43:46

Mucit23

Hocam mesajınızı yanlış okumuşum. Şimdi anladım galiba. Benim amacim 2 ayri adc kanalından sabit örnekleme frekansıyla belirli sayida örnek almak. Ornek sayısı her iki kanal içinde aynı.


Anladığım kadarıyla şöyle yapmam gerekiyor. Her iki kanaldan 100'er adet ornek alalım. Toplam örnek sayımız 200 olacak. Dolayısıyla dizi boyutu ve dma transfer boyutu 200 olacak.


Adc de ise dönüşüm sayısını 100 yapıyoruz ve adc yi scan moda alıyoruz. Adc otomatik olarak her 100 dönüşüm sonrası kanal değiştirecek. Dma ise 200 transfer sonrası baştan itibaren diziyi dolduracak.


Dizinin ilk 100 elemanı kanal 0, sonraki 100 elemanı kanal 1 olacak.


Senaryo doğrumu hocam?

baran123

Ama dma sabit adrese yazmiyormu ? Her eklemeden sonra dizinin adresini arttırmak gerekecek bu işi dma yapabilir mi ? Bunu öğrenmek gerek.

magnetron

@Mucit23


DMA 'lı ADC de ölçüme nasıl başlatıyorsun ve ölçüm bittiğinde interrupt vermesini nasıl sağlıyorsun ?


ölçüm bitince hangi interrupt geliyor ?


bunun kodunu paylaşabilir misin ?


teşekkür


Mucit23

@baran123 DMA zaten memory adresini her transfer sonunda bir arttırıyor. Transfer boyutunuda DMA'ya belirttiğimiz için Transfer sonunda adresi tekrar başa çekip yeniden adreslere yazma yapıyor sırasıyla. Bunda sıkıntı yok çalışıyor.


@magnetron ADC'yi ilk başta otomatik moddan çıkarmak gerekiyor. Timeri istediğimiz frekansta çalışacak şekilde ayarlayıp TRGO_UPDATE özelliğini aktif ediyoruz. ADC yi de timer ile tetiklenecek şekilde ayarlıyoruz. ADC ve DMA ayarları normal olarak yapılması gerekiyor.


Bize örneğin 1ms aralıklarla alınmış 1000 adet örnek gerekiyor. Timeri 1ms için kuruyoruz. Daha sonra Timeri ADC yi tetikleyecek şekilde ayarlıyoruz. ADC Continuous Convert Mode kapalı olmalı. Daha sonra ADC DMA ayarlarını yapıyoruz. DMA ya transfer boyutunu 1000 olarak veriyoruz. Eğer DMA TC kesmesini aktif ederseniz ADC 1ms aralıklarla 1000 adet örnek alır bunları dma vasıtasıyla diziye yerleştirir ve bütün bu işlemlerin sonunda DMA kesme oluşturur.


Dönüşümü başlatmak için timeri başlatmak yeterli.


Bunu daha önce FFT için sabit frekansta (örneğin 22Khz) örnek almak için kullanıyordum

https://www.picproje.org/index.php/topic,51468.0.html

Klein

@Mucit23 senaryo tam olarak doğru değil.
Scan modda DMA her ADC çevriminden sonra diğer kanala geçer.
Dizideki veri
Ch1-C1, Ch2-C1, Ch1-C2, Ch2-C2,....Ch1-Cn, Ch2-Cn şeklinde sıralanır.

Diğer kısımlar doğru.

Mucit23

Anladım hocam ben biraz farklı düşünmüşüm. Sanırım NbrOfConversion parametresi bunun için. 2 kanal için bu parametre 2 olacak

Klein


Mucit23

Alıntı yapılan: Klein - 31 Ekim 2017, 23:37:49
Evet.


@Klein hocam hazır sizi yakalamışken

ADC scan modda iken her tetikleme sinyali geldiğinde kaç kanalı tarıyor ise bütün kanalları sırayla okurmu? Yoksa her kanal için ayrı bir tetiklememi bekliyor?

1ms aralıklarla ADC yi tetikliyorum. DMA aracılığıyla 200 adet örnek alması gerekiyor ADC yi de scan modda 2 kanalı taraması için ayarladım. Normalde 1ms den 200 adet örnek alınması 200ms sürmesi gerekir ama 100ms de DMA TC kesmesi oluşuyor. Yani örneklerin tamamının alınması 100ms sürüyor. Hesap doğrumu hocam yoksa hatamı var?

Cemre.

Alıntı yapılan: Mucit23 - 29 Kasım 2017, 22:25:32
@Klein hocam hazır sizi yakalamışken

ADC scan modda iken her tetikleme sinyali geldiğinde kaç kanalı tarıyor ise bütün kanalları sırayla okurmu? Yoksa her kanal için ayrı bir tetiklememi bekliyor?

1ms aralıklarla ADC yi tetikliyorum. DMA aracılığıyla 200 adet örnek alması gerekiyor ADC yi de scan modda 2 kanalı taraması için ayarladım. Normalde 1ms den 200 adet örnek alınması 200ms sürmesi gerekir ama 100ms de DMA TC kesmesi oluşuyor. Yani örneklerin tamamının alınması 100ms sürüyor. Hesap doğrumu hocam yoksa hatamı var?
1ms'de trigger geliyorsa ve scan mode aktif ise, iki kanal için 100ms'de 200 örnek zaten doğru olan. Siz neye takıldınız? Scan mode kapatılırsa her trigger sinyalinde bir kanal çevrilir, eğer istediğiniz buysa...

Klein

@cemre açıklamış zaten. Her tetiklemede kaç kanal aktif ettiyseniz , o kadar kanalı tarar ve durur.  Her seferinde her kanal için tek örnek yani.
"Continious mod" açık ise tetiklendikten sonra sürekli örnek alır.

Cemre.

Injected kanallar için de scan mode aktif edilebiliyor mu? @Klein hocam.

Mucit23

Tamam hocam anladım. Ben Scan mod aktif olsun olmasın her tetiklemede 1 ölçüm diye biliyordum.

Klein

Alıntı yapılan: Cemre. - 29 Kasım 2017, 22:34:17
Injected kanallar için de scan mode aktif edilebiliyor mu? @Klein hocam.
Evet aktif edilebiliyor.

devrecii

Stm8 de o kadar güzel ki her kanal için bir hafıza bölgesi var oradan alıyorsunuz Adc çevrimi bittimi diye kontrol etmek bile gerekmiyor.
Stm32 de neden bu işi zorlaştırmışlar Dma kullanmadan çoklu adc okumak imkansız.

Cemre.