Stm32 SD kart yazma algoritma sorusu

Başlatan neccarzade, 08 Aralık 2019, 22:29:04

neccarzade

Herkese Merhaba,
Daha önce bu konuyla alakalı bir sorum olmuştu lakin şimdiki durum biraz farklı.
ADC'den gelen verileri timer interrupt'ı ile alarak RMS ve ortalama hesapları yaparak belirli akım gerilim ölçümleri yapıyorum.
Bu işlemi yaparken aynı zamanda ADC ile 50us'de bir aldığım verileri [6][1000]'lik bir dizide saklayıp systick timerla belirlenen zaman dolunca sd karta yazdırıyorum. veriler dizide saklanırken aynı zamanda hesaplama işlemleri de bu esnada yapıldığından sd karta kayıt yaptığım nokta her seferinde farklı yerden başlıyor. Aldığım verilerden çizdirdiğim grafik de düzgün bir işaret olmuyor haliyle. Her seferinde aynı noktadan başlayabilmek için nasıl bir yol izlemem gerekir acaba?
saygılar

muhittin_kaplan

sadece kayıt yapın.sd karttan okuma yaparken hesaplama yapın.

OptimusPrime

Dma den yardim istemek gerekiyor gibi.  :)
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 ||

neccarzade

Alıntı yapılan: muhittin_kaplan - 09 Aralık 2019, 01:06:44sadece kayıt yapın.sd karttan okuma yaparken hesaplama yapın.
Hocam normalde kayıt dışında akım ve gerilim ekran üzerinden gösteriliyor. Hesaplamayı sadece kayıtta yaparsam normal durumda tüm değerler 0 gösteriyor.

Alıntı yapılan: OptimusPrime - 09 Aralık 2019, 01:39:53Dma den yardim istemek gerekiyor gibi.  :)
Değerleri DMA'dan timer tetiklemesiyle alıyorum hocam. hesaplamayı da ADC Callback fonksiyonunda yaptırıyorum. belki SD karta DMA'dan yazdırabilirim ama o da çözüm mü bilemedim açıkçası.

RaMu

50us de bir ADC örnekleniyor,
bu örnekler 6*1000 lik bir ram alanına yazılıyor,
50us * 6 * 1000 = 300 000 us dolunca bu veriler SD karta aktarılıyor,
aktarım işlemi başlar başlamaz;
hem yeni(sıradaki güncel gelmekte olan)
veriler 6*1000 lik ram alanına tekrar baştan yazılmaya başlanıyor,
hemde eski ve şu anda SD karta aktarılmakta olan veriler ile grafik çizdiriliyor.

Soru benim anladığım gibiyse:
6*500 + 6*500 şeklinde iki ayrı geçici alan - buffer kullanıp,
hesap ve kayıt işlerini circular - ardışık-çember-döngülü şekilde yapabilirsin.

Hatta 1000, 500 gibi sayılar yerine,
512, 1024 gibi SD kartta bir sektöre karşılık gelen sayılar kullanmak daha iyi olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

neccarzade

@RaMu Hocam soru tam sizin anladığınız gibi. Grafiği de işlem bittikten sonra Matlab/Excel gibi bir ortamda çizdiriyorum.
yanılıyorsam düzeltin lütfen. ADC'yi DMA'dan okurken DMA'nın kendi buffer'ını doldurmak için her seferinde timer kesmesiyle geldiği zaman, 50us her bir eleman için mi geçiyor yoksa 6'sı birden buffer'a 50us'de mi doluyor?
çizdirdiğim grafikte hepsi aynı anda imiş gibi geldi. stm32f407 kullandığım işlemci.

 
Alıntı yapılan: RaMu - 09 Aralık 2019, 02:49:54Soru benim anladığım gibiyse:
6*500 + 6*500 şeklinde iki ayrı geçici alan - buffer kullanıp,
hesap ve kayıt işlerini circular - ardışık-çember-döngülü şekilde yapabilirsin.
Dediğiniz gibi denemeye çalışacağım.

RaMu

Aslında systick timer ile aktarma yapınca senkron kayıyor olabilir,
dizinin dolduğunu aktarma vs. işlerinin ne zaman yapılacağını
tam olarak nasıl belirliyorsun?

DMA ile çalışırken Half Transfer Complete ve
Full Transfer Complete kesmeleri var,
bunları kullanabilirsin.

50us sorusuna gelince kodu görmeden net bir şey söylemek zor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

OptimusPrime

Hic zamanlama analizi yaptin mi? Mesela SD ye yazmak ne kadar zaman aliyor, hesap kitap isleri ne kadar suruyor vs  vs.
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 ||