16X32 RGB Panel hakkında

Başlatan Mucit23, 10 Ekim 2014, 10:56:41

Mucit23

Evet dediğin doğru. Ben donanımsal PWM var diye ümitlenmiştim. Halbuki TLC5940 serisinde varmış.

Neyse Bu kısım zurnanın zırt dediği yer anlaşılan. Ve bayağı zorlayacak gibi.
Benim anladığım kadarıyla bu FD9802 veya TLC2640'ın 16 bit olması dışında 74HC595'den farkı yok(sabit akım vs dışında). Şu Bazı FPGA'lı kartlar vardı Normal Tek renkli P10'larda her pixele pwm felan uyguluyordu. Demekki oradada benzer bir mantık yürütülüyor. Çünkü monochrome video felan oynatıyor. Bende kendi kendime madem donanımsal pwm var neden arduino 24 bit renk çıkartamıyor diye söyleniyordum. Anlaşılan renk çözünürlüğü MCU Hızı + (Programcının kod yazma yeteneği)^2 ile doğru orantılı

@Karamel açıklama için teşekkürler fakat Bu çipin çalışma sistemini anlayamadım henüz.  Biraz daha ayrıntıya ihtiyacım var. Buradaki mantığı anlayan varmı?

Karamel

#16
hangisini hocam?  bende hangisini anlayamadiginizi anlayamadim :)

hocam benim anladigim kadari ile bu yontem microcontroller mantigina cok aykiri. cunku islenen her satir kod ile frekans bolunuyor ve ekrani surme hizimiz cok yavasliyor. led sayisi arttikca cok ama cok daha yavasliyor.

simdi su isi en az kod satiri isleyerek yapan algoritma bu isi kivirabilir.

her renk icin 3 bit cozunurlugumuz olacak(8 level) atiyorum 1. pixel icin RGB seklinde 1,5,7 degerileri icin her bir loop ta bu degerlerden bir azaltip 0 olmusmu diye bakacagiz. eger olmussa ledi sondurecegiz. asagida ornegini veriyorum hocam. bunu butun ledlere en kisa yoldan yapmak gerekir.

RGB 1,5,7 ti

loop1: (Hepsi yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop2: (R sondu digerleri yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop3: (R sonuk digerleri yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop4: (R sonuk digerleri yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop5: (R sonuk G sondu B yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop6: (R sonuk G sonuk B yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur


loop7: (R sonuk G sonuk B yanik)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur

loop8: (R sonuk G sonuk B sondu)
R,G,B den 1 cikart.
R <= 0 R ledini sondur
G <= 0 G ledini sondur
B <= 0 B ledini sondur


bu cikartma ve if kontrolleri led sayisi fazla olunca cok zaman harcayacaktir. bunu cozebilen bir algoritma dusunebilirsek bu is tamamdir.

mesaj birleştirme:: 10 Ekim 2014, 23:42:33

bu arada hocam yazmayi unutmusum yukaridaki 8 li loop u saniyede 20-30 veya 40 kere(led parlakliginin duzgun degisip degismedigine bakmak lazim. benim suanki bilgim kesin cevabi soymeye yetmiyor) tekrar etmek lazim. saniyede 40 kere oldugunu dusunsek 25 msn icersinde butun sutunlardaki(32*3) ledleri taramamiz gerekir. buda tek satir yapar. 16 satirida taramak istiyorsak 25/16 = 1.5625 msn de butun sutunlardaki(32*3) ledi taramak gerekir. zor bir is bu gercekten.

Mucit23

Dün akşam bilgisayarım çöktü sabahtan beri onunla uğraşıyorum. Yeni yeni toparlayabildim.

Dediğinizi biraz anladım. Fakat iş bu kadar zor olmaması gerekir. Heleki işin içine sorgulamalar felan giriyorsa olmaz kesinlikle.

Bu işin farklı bir yöntemi olmalı. Ben biraz arduino ile yapılan uygulamanın kodlarını inceleyeyim. Onda 444 toplamda 12 bitlik bir çözünürlük uygulanabilmiş. Yani FD9802'nin her çıkışında 4 bitlik bir çözünürlük alınmış. Konu hakkında yeterli düzeyde araştırma yapmadım. Umarım halledebilirim.

Ayrıca TI den TLC5926 sample olarak istedim. Eğer gönderirlerse, İlk testleri bu çip üzerinde yapacağım.



Karamel

#18
hocam TLC5926 bu entegre her cikisindan farkli farkli pwm ler cikartiyor. FD9802 entegresi ise 595 entegresi gibi. 1 yada 0 cikartiyor. ikisi farkli seyler. 32*16 modulu bir microcontroller surebilir ama fazlasi icin yukaridaki algotimamiz hiz bakimindan yetmez gibi duruyor.

birde hocam. su asagidaki kodlari bir microcontroller a yazip derleyip ledin davranislarini gozetleyebilirmisiniz? benim suan deney yapma sansim yok. (goz algilayacakmi diye merak ediyorum.)


char i, j;

while(1)
{
  for(i=0; i<40; i++)
  {
    for(j=0; j<5; j++)// bu kisim totalde 25 msn duruyor. 40 kez tekrarlaninca 40*25 = 1000 msn de bir tarama yapmis oluyoruz
    {
         PortB.F0 = 1; Delay_ms(1);
         PortB.F0 = 0; Delay_ms(4);
    }
  }
}



yukarida bir ledi 5 bit cozunurlukte %20 parlaklikta surduk. taramayi saniyede 40 kez yaptik. led titremiyorsa mantigimiz dogru hocam. eger titremiyorsa saniyedeki tarama hizimi 30 a hatta 25 e cekip deneyler yapmaliyiz. tarama hizimiz ne kadar yavaslarsa bizim loop taki islem yapma zamanimiz artar.

Mucit23

http://www.logictoyz.com/electronic-components/fd9802c-16-bit-constant-current-5ma-90ma-led-driver-fd9802.html
Yukarıdaki linkte şöyle bir ifade var

FD9802C compatible with TI's TLC5926/7, TOSHIBA's TB62726 and Macroblock's MBI5026/4/0.

Yani TLC5926 ile uyumlu olması gerekir.

Şuanda test yapma imkanım yok. İşin teorisini yeterince öğrenmeden uygulamaya geçmeyi düşünmüyorum.

TLC5926 her kanaldan nasıl pwm çıkartıyor? İçerisinde PWM için özel bir donanım yok.

Karamel

hocam TLC 5940 entegresi ile karistirmisim. ozur dilerim. hocam sizin entegrede 595 gibi iste. sadece 16 cikisi var??  ???

sanirim cikislarinda birde transistor gibi birsey var ki direkman led surebiliyor. mantik ayni yani. seri olarak bilgiyi gondereceksiniz ???

kantirici

Piyasada RGB panel kartlarında zaten FPGA kullanılıyor. En azından gördügüm bir kaçı böyleydi.  Dolayısıyla çok paneli sürmek için zaten standart bir mcu yetmeyecek gibi.

Mucit23

#22
Alıntı yapılan: kantirici - 11 Ekim 2014, 16:35:24
Piyasada RGB panel kartlarında zaten FPGA kullanılıyor. En azından gördügüm bir kaçı böyleydi.  Dolayısıyla çok paneli sürmek için zaten standart bir mcu yetmeyecek gibi.

Evet aslında FPGA'lı kartlar kullanıldığını biliyorum. Hakkıda odur elbet. Fakat STM32 Serisi 72Mhz'de çalışan bir mcu 1- 2 panel hatta kaskat bağlı 3-4 panelin bile altından rahatlıkla kalkabileceğini düşünüyorum.

Benim ShiftRegister'in çıkışından nasıl PWM uygulayacağımı çözmem lazım? Evet arkadaşlar fikirleri alalım mantık yürütelim.

Karamel

Hocam nasil yapildigini Turkceye cevirdim iste. anlamadiginiz yer neresi? Normal mantiktaki bir satiri yaktiginiz sureyi becerebildiginiz kadar(sistemin hizi yettigi kadar) parcaya ayirip bu kadar pwm yapacaksiniz. klim yettigince bir algoritma yazdim. buyuklerimize danisip bunu gelistirebiliriz yada daha mantikli bir algoritma kurabiliriz

M_B

74HC595 ile pwm uygulaması yapabilirsek sanirim isi çözmüş olabiliriz. Nette 74HC595 ile pwm yapilmis video var ama koda rastlamadım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet


Mucit23

@Karamel

Senin dediklerini anladım aslında. Şimdi 16 Bit Shift Register üzerinden yola çıkalım. 8 Bitlik bir PWM için 256 defa döngü kuruyoruz. Her döngüde Shift Registerin bütün pinlerini güncellememiz gerekiyor.

Bir tane döngü olacak 0-255 arası sayacak. A döngüsü diyelim
Bu döngüde 16 bitlik shift registerin her kanalı için 0-255 pwm değerleri olacak. A döngüsü içerisinde bütün bu değerler A döngüsünün o anki değeri ile karşılaştırılacak. Şayet Shift Registerin 0. biti için gönderilen Duty değeri 127 olsun. Eğer Döngünün o anki değeri 127 den küçük ise Shift Registerin 0. biti lojik 1 yapılacak. Döngü değeri 127'ye eşit veya büyük ise Shift Registerin 0. biti lojik 0 yapılacak.

Tabi A döngüsünün her çevriminde bütün 16 bit birden bu şekilde kontrol edilmesi gerekir. Bütün bu işlem yapıldıktan sonra elde edilen 16 bitlik değer SPI' donanımına yüklenip panele yollanacak. Sonra diğer shift register için aynı işlem yapılacak. Paneldeki 12 Shift Register için bu işlemlerin yapılması gerekiyor. Hemde ard arda.

12 Shift Register birden bu datalarla yüklendikten sonra Latch işlemi yapılacak Ardından bütün bu işlem tekrarlanacak. Örneğin bu işlemlerin hepsi saniyede 1000 kez tekrarlanırsa bütün çıkışlarda 1khz PWM sinyali elde ederiz.

Birde şöyle birşey var. Yukarıdaki işlemi Tek Data girişi varmış gibi düşündüm. Donanımsal SPI kullanırım diye sevinmiştim. Pek mümkün görünmüyor. Çünkü Tek panelde 6 adet SPI Data girişi var.(R1, R2, G1, G2, B1, B2) 6 adet SPI olan bir mcu yoktur sanırım. :D

Yukarıda bi A döngüsünden bahsetmiştim. İşte FPGA'ın farkı burada ortaya çıkar. Şimdi daha iyi anlıyorum niye FPGA kullandıklarını. A döngüsünün içerisinde yapılan sorgulamalar tek clock darbesinde FPGA ile yapılır diye düşünüyorum.

Yukarıda bahsettiğim döngü harbiden kritik. ASM ile yazmak icap edebilir.  ::)

İşin genel mantığı budur sanırım. Başka fikri olan varsa söylesin.

Bende eldeki donanımla yani 74HC595 ile 8 kanal 8 bit pwm oluşturmaya çalışayım.  :D

Karamel

Aynen hocam. Suan benim aklimdakinlerde aynen yazdiklariniz gibi. hocam asm ile yazilsada soyle bir sorun var. 100 mhz islem gucumuz var. İki kod isledik 50 mhz islem gucumuz kaliyor. Uc kod islersek 33.333 mhz islem gucumuz kaliyor. yani o karsilastirma islemlerini ve spi sorununu en hizli beceren algoritmayi yapmak ve en hizli calisan kodlari yazmak gerekir. microcontroller ile yapinca bir sinirimiz oluyor ve bu siniri yukarida yazdigim kriterler belirliyor. hocalarimiza danismamiz gerek. benim suan ki bilgim nasil yapilabilecgini cozememize yetmiyor. spi konusunda sanirim digital mux diye birsey vardi hocam. spi kismi boyle cozulebilir diye dusunuyorum?

Mucit23

#28
 :D :D
İşlem gücünün senin söylediğinle alakası yok. Öyle değil. Farzedelim bir mcu var tek clock dabersinde bir kod işleyebiliyor, Dolayısıyla bu mcu 100mhz de saniyede 100milyon komut işleyebilir. İşlem gücü işlenen kod ile senin dediğin şekilde düşmüyor.   ;)

Dijital mux'lar aklıma yattı aslında. Dijital bir mux kullanarak tek bir SPI'ın MOSI pinini çoğullayabilirim. Bana 8 kanal mux lazım. En az 30Mhz de çalışabilmeli. Böyle bir çip varmıdır? 

mesaj birleştirme:: 11 Ekim 2014, 21:43:49

Edit;

74HC138 oluyor.

Karamel

Hocam islem guc ile ilgili yazdiklarimi sanimirim ben yanlis anlattim ki sizde yanlis anladiniz. neyse deneyler yapinca ne demek istedigimi daha iyi anlayacaksiniz. 32x16 ekranimiz var ya hani bu 16 satiri taramak icin minimum tarama frekansimiz en az ne kadar olabilir?