Birden fazla SPI portunu senkronize kullanmak

Başlatan elektronart, 14 Haziran 2014, 13:47:09

Müh. müh.

Alıntı yapılan: elektronart - 14 Haziran 2014, 23:38:15
ve korkulan başa gelir.
void spi_send_byte(char spi_data){

	while (!(IFG2 & UCB0TXIFG));              // USCI_A0 TX buffer ready?
	UCB0TXBUF = spi_data;			// Load Data
	UCA0TXBUF = spi_data;
}

SPI'ı 8MHz ayarladığımda iki SPI arasında 0,5usec gecikme oluyor, A0SPI clock başladığında B0SPI 4 kez çalışmış oluyor,
tahmin edileceği üzere 4MHz de gecikme yine aynı 0,5usec, ve iki SPI arasında 2 CLK'luk fark oluyor.
işte görüntüler:






spi yı 1 mhz de çalıştırma şansınız varmı?

Destiny of white is dirtied. Destiny of black is found guilty...

elektronart

Alıntı yapılan: Müh. müh. - 14 Haziran 2014, 23:56:31
spi yı 1 mhz de çalıştırma şansınız varmı?
Var ama bunun ne anlamı olacak, Birinci SPI 0,5usec sonra çıkan kenarla ilk verisini gönderirken ikinci SPI daha yeni CLKu indirmiş olacak
Açık Elektronik

Müh. müh.

0,5 usn nin sorun olmadığı bir hız yakalamanız lazım.

Olmazsa 500khz e düşeceksiniz.
Destiny of white is dirtied. Destiny of black is found guilty...

hasankara

anladığım kadarıyla paralel senkronize(clk aktif) haberleşme yapmak istiyorsun. bunuda iki spi modülünün 2 data ucuyla 2 bitlik paralel yapmak istiyorsun. bunu yazılımsal çok rahat yaparsın diye düşünüyorum ancak hız ve işlemciden feragat etmen gerekmekte. ama modül kullandığın zaman dediğin gibi sadece değişkene veri yüklemek yeterli olacak otomatik bitler iletilecek.

Benim önerim; kullandığın denetleyicinin iki spi modülü olduğunu varsayarak, modüllerden birini master diğerini de slave olarak ayarla. iki modülün fiziksel clk pinlerini birbirine bağla. fiziksel olarak d1, d2 ve ortak clk pinlerini hedefe bağla. yazılımda ise, sırasıyla önce slave modülün buffere veri koy sonrada mastere veri koy. en son veri yüklediğinde master spi hem data çıkartırken hemde clk darbelemeye başlayacak ve diğer slave spi modüle gelen clk darbeleriyle oda datasını çıkartmaya başlayacak. iyi çalışmalar.

Mucit23

@ hasankara benimde aklıma gelmişti  :) Ama buda geçici çözüm.  P10 surucu kartlarında farkli bir yöntem kullanılıyor olmalı.  Çünkü öyle kartlar varki alt alta 8 panele data gönderiyor.  Her biri için ayrı bir spi lazım.  Birkactanesinde Stm32f103 görmüştüm.
Bence bu kartları incelemelisin. Farklı fikirler verebilir.
Söz konusu led paneller ise hızdan feragat edilemez.

elektronart

Alıntı yapılan: hasankara - 15 Haziran 2014, 08:19:53
Benim önerim; kullandığın denetleyicinin iki spi modülü olduğunu varsayarak, modüllerden birini master diğerini de slave olarak ayarla. iki modülün fiziksel clk pinlerini birbirine bağla. fiziksel olarak d1, d2 ve ortak clk pinlerini hedefe bağla. yazılımda ise, sırasıyla önce slave modülün buffere veri koy sonrada mastere veri koy. en son veri yüklediğinde master spi hem data çıkartırken hemde clk darbelemeye başlayacak ve diğer slave spi modüle gelen clk darbeleriyle oda datasını çıkartmaya başlayacak. iyi çalışmalar.
Mucit'in dediği gibi mutlaka başka bir yolu olmalı. Hadi ben tek panelde 2 renk için uğraşıyorum adamlar 4 hatta 8 satırda 8-10 panel seri bağlıyorlar. Hız inanılmaz olmalı. Yazılımsal olarak 12MHz lik MSP430 ile 350KHz ile başlayıp 440KHz e kadar çıkarttım. 2. veri kanalını ekleyince 360KHz'e düştü. Sizin önerdiğiniz yöntemi anlamak için 3 kez okumam gerekti ama anlayınca teorik olarak mantıklı göründü, bir deneyeyim ben bunu :)
Açık Elektronik

Bayramsumbul

Ben P10 panellerde seri bağlı 74hc595ler olduğunu sanıyorum.Neyse...
Sizin kullandığınız modülün bir ürün sayfası veya data sheet'i yok mu ?
Belki onu paylaşırsanız forumdakiler daha kolay yardımcı olabilir.İyi çalışmalar.
Bir Elektronik Meraklısının Serüveni...

elektronart

Doğru sanıyorsunuz, benim kullandığım da çift renk P10 panel. HC595 lerden x2 tane var. CLK lar ortak datalar farklı.
Keşke olsa ama ne datasheet ne başka bir şey. Çalışan sürücü kartları ve logic analyzer var. Ve orada görünen aynı CLK ile sürülen 2 ayrı data.
Açık Elektronik

Bayramsumbul

Ben internette şöyle bir kaç ürün buldum.Acaba bunlar gibi mi?

LED Matrix - Serial Interface - Red/Green-》https://www.sparkfun.com/products/759

8x8 LED RGB Matrix (SKU:DFR0202)-》http://www.dfrobot.com/wiki/index.php/8x8_LED_RGB_Matrix_(SKU:DFR0202)
Bir Elektronik Meraklısının Serüveni...

Müh. müh.

Bir p10 kartın üzerindeki tüm ledleri yakmak için kaç clk ya ihtiyaç var?

Bu kart tarama yöntemi ile mi çalışıyor?


90mips de çalışan bir arm mcu 8-10 kartı rahatça sürebilmesi lazım.
Destiny of white is dirtied. Destiny of black is found guilty...

Mucit23

Rgb panellerde tek clock ve 3 data hattı kullanılıyor.  Bilmiyorum ben bi ara çok kafa yordum. Bence farklı bir yöntem var. Yanlış hatırlamıyorsam sürücü kartlarında 74hc245 vardı.  Bu entegrelerle birşeyler yapiyorlar diye düşünüyorum.

Kartları incelemek lazım. Belkide yazılımsal olarak yapıyorlardır.


elektronart

#26
Alıntı yapılan: Bayramsumbul - 15 Haziran 2014, 13:01:31
LED Matrix - Serial Interface - Red/Green-》https://www.sparkfun.com/products/759
8x8 LED RGB Matrix (SKU:DFR0202)-》http://www.dfrobot.com/wiki/index.php/8x8_LED_RGB_Matrix_(SKU:DFR0202)
İkisi gibi de değil, panel reklam panolarında gördüğünüz P10 panellerle aynı boyutlarda tek farkı pikseller bir değil 2 ledli. Pin bağlantısı aşağıdaki gibi, tek renk olanlarda dat_r var, çift olanlarda dat_g de ekleniyor. Protokol ve çalışma mantığı için Mucit'in çok güzel bir yazısı var. Oraya bakabilirsiniz.



mesaj birleştirme:: 15 Haziran 2014, 15:05:18

Alıntı yapılan: Mucit23 - 15 Haziran 2014, 14:42:05
Rgb panellerde tek clock ve 3 data hattı kullanılıyor.  Bilmiyorum ben bi ara çok kafa yordum. Bence farklı bir yöntem var. Yanlış hatırlamıyorsam sürücü kartlarında 74hc245 vardı.  Bu entegrelerle birşeyler yapiyorlar diye düşünüyorum.
Kartları incelemek lazım. Belkide yazılımsal olarak yapıyorlardır.
Farklı bir yöntem olduğu kesin ama HC245 le ilgili olduğunu sanmıyorum. O kartları ben de inceledim. HC245i buffer olarak kullanıyorlar. Bazı paneller 3,3V giriş sinyalleri ile çalışmadığından bu çiple çıkışı 5Va çekiyorlar.
Açık Elektronik

Kabil ATICI

ikiden fazla spi senkronizasyonu için SPI saat çıkışını kesmeye ver. Kesme geldiğinden veri portlara çıkartılmış olsun.
Buradaki dikkat edilecek konu, veriyi gönderdiğiniz yer, diyelim ki inen kenarda veriyi alıyor, sizi kesmenin yükselen kenarında veriyi  göndermek istediğiniz portta hazırlamış olun.  Ve önemli; veri hazırlama hızı SPI saat hızından daha hızlı olmak zorundadır.
ambar7

hasankara

en temizi fpga gibi duruyor. özel donanımlar için çok etkin faydalı gözüküyor fpga ler. mesela denetleyiciye yazılımsal olarak çok kolay yaptırabilirim diyorsunuz ama hız ve işlemci sınırlarına takılıyorsanız, fpga zaten en çok bu durum için var. onun dışında psp araştırabilirsin. ben hiç kurcalamadım. psp senkronize modu (clk aktif) ve fifo da varsa zaten spi gibi kullanabilirsin diye düşünüyorum ama tekrar söyleyeyim denediğim bir şeyi söylemiyorum araştırman gerekmekte.

elektronart

#29
Sevgili ve çok saygılı hasankara, önerdiğiniz yöntem işe yaradı, şu anda 8MHz hızında senkron bir şekilde çalışan 2 tane SPI portum var. Fikrinize sağlık çok teşekkür ederim, 360KHz neresi 8MHz neresi.

FPGA konusuna gelince, kit temin etmek, öğrenmek, alışmak, sorunları çözmek vs derken uzar gider o en kısa yol bildiğin yoldur :)
Açık Elektronik