Bu yazıda yeni çıkartacağımız bir ürün için donanımını yaptığımız demo board üzerinde bulunan ILI9488 TFT LCD, ve W25Q32JV 4MB NOR Flash ile yaptığım test videolarından bahsedeceğim, işlemcinin EBI özelliği var bu sayede çok hızlı veri gönderimi yapılabiliyor. Testleri tamamen bare metal c programlama ile yaptım.
Mikrodenetleyici olarak Nuvoton M480 ailesinin M482KI modelini kullandık. Bu işlemci gayet hızlı lakin TFT LCD sürme kapasitesine oranla düşük bir RAM belleğe sahip bu modelde 160kb RAM var. Bu da ILI9488 sürücüsünün desteklediği high color ve üstü 480×320 çözünürlük için yeterli değil. Bu sıkıntıyı ileride açıklayacağım şekillerde çözmeye çalıştım.
ILI9488 kullanma klavuzuna bakarsak bu sürücünün sadece 3,16,18 ve 24 bit ile sürülebildiğini görürüz. Yandaki resmin altında ILI9488 driver datasheet linkini bulabilirsiniz. 3 bit çok çok düşük bir renk derinliği, 16 bit 64K renk demek video oynatma yapabilmek gayet güzel bir renk derinliği lakin RAM yeterli değil. Diğer bitlere zaten 16 bit için bile yer yok bakmıyorum bile. 8 bit MCU yer noktasında ideal, görüntü için de tatmin edebilecek bir değer lakin bu değer ILI driver tarafından desteklenmiyor. Sanırım palet özelliği var, bir şeyler yapılabiliyor ama ayağa kaldırmak için ciddi zaman ayırmak gerekecek gibi görünüyor.
Ben 2 tane test yaptım. 1. test high color 16 bit 565 formatında yer olmadığından gösterim için 307200 byte veriyi 153600 şeklinde 2 ye bölerek gösterdim, renk derinliği güzel lakin 2 ye bölerek LCD’ye göndermek kesik kesik oynamasına neden oluyor. 2. test veriyi 8 bit 323 formatında göndermek bu şekilde 480×320 çözünürlüklü veri 153600 byte yer tutuyor MCU için sınırda yani RAM olarak, bu sefer de renk olması gerektiği gibi olmuyor. bir yolu vardır çözümü için lakin bu bir test zaman noktasında daha fazla zaman ayıramayacağım.
Test 1 için :
Şimdi hesaplama yaparsak ILI9488 driver ile 262k renk derinliğine kadar resimler gösterilebiliyor. Bunun için çok fazla dahili RAM ve dahili ROM(const tipi data) ihtiyacı var. Ben high color 565 formatında resimler oluşturdum yani 16 bit (yani 2 byte) 64k renk bu şekilde tek bir resim için 480x320x2=307200byte yere ihtiyacımız var. Bu değer Nuvoton M482KI modeli için const data olarak dahili flash noktasında sıkıntı olmaz, lakin bu MCU 160KB RAM belleğe sahip olduğundan NOR flash’tan okurken sıkıntı oluşuyor. Çünkü yeterince yer yok. Stack boyutunu da arttıramıyoruz orada da yeterli yer yok.
Bu nedenle NOR flash’dan okuma yaparken resim verisini 2ye bölüp LCD’ye ilk bölüm ve sonraki bölüm şeklinde gönderdim. bu da kesik kesik video oynatılmasına neden oldu. aşağıdaki videoda bu durumu görebilirsiniz. resim datasını 2 ye böldüm ilk bölüm LCD’de x ve y eksenine göre (0,0) dan başlayıp, 480×160’lık kısımda gösterildi, diğer bölümde (0,160) dan başlayıp LCD’nin 480×320 lik kısmında gösterildi.
kesik kesik oynatma tam belli olmasın diye frame başına gecikmeler koydum. Bu nedenle çok yavaş oynuyor video, normalde real time şeklinde olmasa da MCU aşağıdaki videodaki oynatma hızından daha hızlı oynatabilir.
KullandığımW25Q32JV NOR flash sadece 4MB olduğundan (4x1024x1024)/(480x320x2)=13.65 yani 13 tane resim sığdırabildim. 13 frame ile oluşan bir video oynatıcı oldu yani. tabi yeterli miktar RAM bellek olmadığından kesik kesik oynatılabildi.
Aşağıda test 1 için sonuç videosunu izleyebilirsiniz.
Test 2 için :
Hesaplama yaparsak 8bit 323 formatında oluşturulan resimler için 480x320x1(byte)=153600 byte yere ihtiyacımız var. Bu değer Nuvoton M482KI modeli için const data olarak dahili flashda yer noktasında sıkıntı olmaz, NOR flash’tan okurken stack boyutunu örneğin 0x00027800 yaptığımızda direk stack içine atarak okuma yapabiliriz.
NOR flash içine 1 byte olarak yazıp, 1 byte olarak okuruz. böylede tam ekran yani 480×320 boyutunu 1 kerade TFT LCD’ye basabiliriz. ben hiç gecikme koymadan (NOR’dan okurken geçen zaman hariç) okuma yaparak LCD’ye gönderdiğim şekilde sonuç videosunu aşağıya ekledim bakabilirsiniz.
kesik kesik oynama sıkıntısı 480×320 byte değerindeki veriyi bir kerede gönderdiğimizden çözüldü lakin ILI9488 sürücüsünün 8bit lik sürme özelliği olmadığından renkler olması gerektiği gibi görünmedi. ILI9488 sürücüsü ayarları 16 bit’e göre yapıldı lakin ilk 8 bitlik veri basıldı. yüzeysel araştırmamda paletlerle alakalı birşeyler gördüm lakin fırsat bulursam ileride bakabileceğim. performans olarak kesik kesik gösterme sıkıntısı bu şekilde çözüldü renk sıkıntısı var.
KullandığımW25Q32JV NOR flash sadece 4MB olduğundan (4x1024x1024)/(480×320)=27,3 yani 27 tane resim sığdırabildim. 27 frame ile oluşan bir video oynatıcı
İnsan gözü normalde saniyede 25 kare yani frame ile kesintisiz akıcı bir video şeklinde görür. Bu hesaba göre sadece 1 saniyelik sahne görüntüsü oynatılabilirdi, ben videonun frame rate değerini 4’e düşürdüm ki daha uzun bir sahne gösterebileyim. Bu da akıcı bir görüntü real time görüntü şeklinde göremememize neden oldu.
Zaten işlemci real time yani en az saniyede 25 kare gösterebilme gücüne sahip değil.
Aşağıda test 2 için sonuç videosunu izleyebilirsiniz.
