Binlerce bit uzunlugunda shift register donanimi

Mikro Step

Kıdemli Üye
Katılım
25 Eylül 2022
Mesajlar
7,198
Rama yerlestirecegim binlerce byte verinin bitlerini gpio pinden shift ederek cikartan donanima sahip ARM islemci biliyormusunuz?

Bu is icin donanim kullanmak zorundayim. DMA, SPI gibi donanimlar yada yazilimla shift islemi isime gelmiyor. (Belki son care)
 
Son düzenleme:
Dma neden işinize gelmiyor hocam? Dediğiniz şeyin hali hazırda olacağını düşünmüyorum ancak çözüm olarak şu olabilir. External memory interface ile ucuz bir fpga i ram olarak işlemciye eklersiniz, sonrasında o ramin içinde o binlerce byte datayı yazarsınız. Clock sinyalini de gerçekten fiziksel olarak ya da benzer yöntemle taşırsınız, sözün özü kendi peripheralinizi yaparsınız, bunu discrete lojik kullanarak yapma ihtimali de var gibi ama uygun formatta external ram bulmak vs uğraştırıcı olabilir
 
Sadece bu işi yapan (tek işi shift işlemi yapacak birde diğer sistem ile konuşacak bir iletişim kanalını dinleyecek) bir arm mcu kullanın. Diğer sistem ile bir iletişim kanalı açın. İhtiyaçlarınızı bilmiyoruz ama sadece input olarak tanımlanan bir IO nun durumuna bakarak shift işlemi yapılıp yapılmadığına karar verilebiliyorsa, bu iletişim kanalıda çok fazla cpu zamanından çalmayacaktır.

Şu soruyu sormadan edemiyorum. Niye böyle bir çözüme ihtiyaç duydunuz? :)
 
ARM islemcilerde DMA CPU ile ayni anda adres ve veri yolunu paylasmadigi icin verilerin porttan cikis hizi isletilen koda gore module olur. Bu yuzden ARM islemcinin DMA donanimi ile istedigim olmaz. Keza ayni mantikla yazilimsal da jittere neden olur.

Gecmiste bu tip shift register ihtiyaci duydugum MCU ile VGA uygulamasindan dolayi sikinti yasamistim. Sonucta istedigimi basardim ama cok takla atmak zorunda kalmistim. (int latency icin bile extra islemler yapmak zorunda kalmistim.)

Kafamdaki projede jitter hic istenmeyen bir sey. FPGA kesin cozum fakat uygulamanin fiyati artsin istemiyorum.

Istedigim ozellikte donanimi olan islemci duydugumu hatirliyorum.
 
mühtemelen hareket senkrone motor kontrölü için. sensörlerde de var işin içinde. :)
 
DMA ve SPI ile olur. STM32F4xx gibi modern çevre birimleri kullanan bir MCU kullanın. Mesela açın kılavuzdan STM32F407'nin bus yapısına bakın. Bunlarda heap ve stack'ı bulundurabileceğiniz DMA bağlantısı olmayan TCM hafıza var. 16 bit SPI var. Double buffer ve FIFO özellikli DMA var. Farklı bus hatları olan ram bankaları var.

SPI'nin zamanlaması uymaz ise, TIMER, DMA ve GPIO kullanın. GPIO erişimi için BITBAND kullanın. Yani 1 bit için 8 bit kullanacaksınız. Buffer boyutlarını devamlılığı kurtaracak kadar belirleyin ki verimsizliğe sebep olmasın.
 
STM deki DMA ile olmaz.

DMA bus'i kullanirken CPU kullanamiyor diye biliyorum. Dolayisi ile wait state durumlari olusuyor. Bu da jitter demek.

Bazi islemcilerde DMA ile CPU bus kullaniminda 180 derece faz farkli CPU clock kullaniyor. Ne DMA CPU'nun erisimini ne de CPU DMA'in erisimine mudahale ediyor. Fakat ARM islemcilerdeki DMA kesinlikle boyle degil.

Dolayisi ile DMA ve yazilimsal cozumler benim isime gelmiyor.

Int da isimi gormuyor cunku int lattency degisken. max 12 clock olabiliyor. Int icin cozum yok mu var. Ama artistik yazilim gerekiyor. Fakat bu tip numaralar program buyudukce sorun olusturmaya basliyor.

Su icinde shift register donanimi olan islemcinin adini bir ogrenseydim.
 
spi'da 1 byte buffer var. spı hızı işlemcinin olası bus arbitration'dakı belirsızleklere bağlı limiti aşmadığı halde jitter'ler oluşmamalı.
Yok, o hız limiti istenilenden az ise daha hızlı işlemcilere bakılmalı.
RAM to SPI geçikme sınırlaması (varsa) önceden paylaşılmalı ki yardım etmek isteyenler bu değere esasen çözüm üretebilsin.
 
Jitter oluşmaz. 16 bit SPI demek, veriyi SPI buffer'a yerleştirdikten sonra bunu çalıştıran 16 saat çevrimi boyunca geri kalan herşeyden bağımsız çalışacak demek. Bu kadar süre içinde hiçbir kesinti olmadan, bırak DMA'yı, yazılımla bile beslersiniz. Bence siz bunun çift buffer olarak çalıştığını bilmiyorsunuz. SPI'ya veri sürülürken asıl registere değil buffer registere yazarsınız. Donanım asıl register boş ise bunu oraya aktarır. Demek ki SPI ilk çalışırken arka arkaya hiç beklemeden 2 kelime kabul eder, 1'i asıl register için, 1'i buffer için. Sonra asıl register tükendikçe buffer'a veri kabul eder. Böylece kesintisiz bir çalışma mümkün olur. Referans kılavuzda SPI bölümünü dikkatli inceleyin.
 
Analog delay line gibi entegreler 1sn kadar sesi geciktirip çıkışa gönderiyor. Binlerce bit demektir. Bunun dijitali olabilir.
 
Elimdeki Cin mali kumpasi ters muhendislikle inceleyip ayni mantikla kendi kumpasimi yapmaya calisiyorum.
(Jitter olculen mesafe bilgisinin gurultu icermesi anlamina geliyor. O yuzden jitter istemiyorum.)

Normalde her bir byte'in her bir bitini sirayla GPIO pinden cikartacaktim. Ancak 8 cikisim olacak. 8 cikis hem kendi arasinda jittersiz calisacak hem de cikan ardisil veriler jittersiz cikacak. Yani 8 ayri shift register gerekecekti.

Ramda sakli verileri bu sekilde seriye acmaktansa 1 byte veriyi dogrudan GPIO porttan cikmak shift isleminden kurtariyor.
Bunun icin verileri bu mantiga uygun sekilde yeni bastan olusturmam gerekecek o dert degil.

Fakat bu kez de ardisil verilerin tam zamaninda porttan cikartilmasi sorunu ile karsi karsiyayim.

Kur timeri int geldikce verileri porta yaz, ya da kur DMA'i Timer ile tetiklet veriyi porttan cikartsin cozum degil. (Fakat biraz hileyle oluyor.)

Simdi ne var bunda kur timeri int geldikce ramdaki veriyi oku ve porta yaz diyebilirsiniz de olmuyor iste.

Bunun scop ile tespiti de cok zor. Atiyorum 150 darbeden olusan her bir palsin suresi farkli ozel bir paternde hangi pals ne kadar sureye sahip anlamak cok zor.

VGA uygulamasinda anlamak cok kolaydi. Ekranda yan yana bos dolu bos dolu pixellere bakinca pixellerden bazilarinin digerlerinden biraz uzun olmasi hemen farkediliyordu.
 
Son düzenleme:
Jitter oluşmaz. 16 bit SPI demek, veriyi SPI buffer'a yerleştirdikten sonra bunu çalıştıran 16 saat çevrimi boyunca geri kalan herşeyden bağımsız çalışacak demek. Bu kadar süre içinde hiçbir kesinti olmadan, bırak DMA'yı, yazılımla bile beslersiniz. Bence siz bunun çift buffer olarak çalıştığını bilmiyorsunuz. SPI'ya veri sürülürken asıl registere değil buffer registere yazarsınız. Donanım asıl register boş ise bunu oraya aktarır. Demek ki SPI ilk çalışırken arka arkaya hiç beklemeden 2 kelime kabul eder, 1'i asıl register için, 1'i buffer için. Sonra asıl register tükendikçe buffer'a veri kabul eder. Böylece kesintisiz bir çalışma mümkün olur. Referans kılavuzda SPI bölümünü dikkatli inceleyin.
Doğru söylüyorsunuz. SPI işe başlayınca jitter olmaz. Ama jitter ilk bit sırasında arbitration'dakı belirsizliklerden dolayı oluşur.
 
Elimdeki Cin mali kumpasi ters muhendislikle inceleyip ayni mantikla kendi kumpasimi yapmaya calisiyorum.
(Jitter olculen mesafe bilgisinin gurultu icermesi anlamina geliyor. O yuzden jitter istemiyorum.)
aldığınız mitutoyo max response speed 1000mm/s ve çözünürlük 0.0005mm. 0.5 mikron transfer zamanı 0.5 mikrosaniye.
12 clock belirsizliği 0.16 mikrosaniyeye denk gelir. Yan' sorun olmamalı.
Tabii sensörünüz daha hızlı çalışmıyorsa.
 
xmos firmasına ait xu208 xu216 kodları ile bulunabilen mikrodenetleyicileri özellikle ses uygulamalarında sıklıkla tercih edilebiliyor. 8, 16, 32 çekirdekli ürünleri var. C dilinin üzerine bir takım eklemeler ile XC derleyicileri bulunuyor. Özetle gerçek anda asenkron işlemlerin yürütülmesine ilişkin bir takım nitelikler kazandırmak maksadıyla böyle bir ihtiyaç ortaya çıkmış gibi yorumladım. Geliştirme kitlerinde gördüğüm genellikle nitelikli kristaller ile kullanılıyor olmaları.

https://tr.aliexpress.com/item/1005006982483096.html Bu donanımı pc doğrudan ses kartı olarak görüyor ve i2s çıkış pinlerine doğrudan dac yada adc bağlanarak kullanılabiliyor. Çıkış pinleri içerisinde MCLK çıkışı ile nitelikli pulse çıkışı sunuyor.
 

Çevrimiçi personel

Forum istatistikleri

Konular
8,056
Mesajlar
132,599
Üyeler
3,211
Son üye
mgumus1806

Son kaynaklar

Son profil mesajları

erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Back
Top