Renkli bir LCD'de basit grafikler göstermesi gereken ARM tabanlı bir cihaz tasarlarken, tercihen belirli bir ARM veya LCD satıcısına bağlı kalmadan hızlı güncellemelere izin vermek için bir şeyler tasarlamak en iyi nasıl yapılmalıdır? Şu anki projem, bir PIC üzerindeki bir SPI bağlantı noktası (1/60 saniyede karmaşık bir ekranı yeniden çizerek) yıldırım hızında sürülebilen siyah beyaz bir ekran kullanıyor. Ortak renkli LCD ekranların bir SPI portu var gibi görünüyor, ancak 160x120 LCD'yi düz bir renkle doldurmak bile 30ms alacak ve 320x240 en iyi 120ms (10MHz vites saati) alacaktı.
Denetleyici pimlerini yedekleyebilirseniz, paralel mod daha iyi olabilir, ancak her piksel için üç ayrı bellek deposu talimatı gerektirmeden paralel arabirimi bağlamak için aileden bağımsız herhangi bir yöntem bilmiyorum (verileri ayarlamak için bir, biri saat çıkışını yüksek, diğeri ise düşük saat). Bazı ARM yongalarının bellek veri yolu arabirimleri vardır, ancak bunlar genellikle multipleks adres ve veri gibi şeyler yapmak veya alakasız adres bitlerini çıkarmak için çok fazla iğne yapmak isterler (LCD'nin sadece bir adres bitine ihtiyacı vardır).
ILITEK tarafından ILI9320'ye veya Renesas tarafından HD66789'a bakıldığında, ilginç görünen bir yaklaşım, SPI'yı paralel verilere dönüştürmek için bir CPLD kullanmak ve bit başına bir piksel çıkaran bir mod içermektir. Renesas veri sayfasına bakıldığında, piksel hariç her şey için seri modu kullanarak, tüm paralel bağlantı noktası veri bitlerini seri veri pinini izleyerek minimum donanımla (CPLD gerekmez) bit başına piksel yazma elde etmek mümkün olabilir. ve sıfırlama piksellerinin saydam olmasını ve hepsi piksellerin GRAM'de seçilen bitleri ayarlamasını veya hepsi piksellerin saydam olmasını ve tamamen sıfır piksellerin seçili bitleri temizlemesini sağlar. IKITEK veri sayfasının "özellikler" bölümü, benzer bir işleve sahip olduğunu gösterir, ancak kayıt haritaları
Kodun esas olarak düz renkli metin ve grafikler göstereceği varsayıldığında, ideal yaklaşım, ARM'nin SPI bağlantı noktasını ekranın paralel bağlantı noktasına bağlamak ve CPLD'nin ön plan / arka plan renkleri ile yüklenmesine izin vermek için bir CPLD kullanmak gibi görünmektedir. Bu, özellikle "saydam" pikseller yazma yöntemine sahip olsaydı güzel olurdu. İki renkli bitmap olarak bir yazı tipi verildiğinde, yazı tipi verileri doğrudan SPI bağlantı noktasına yüklenebilir; bu, yazı tipi verilerinin her iki ARM saatinde bir piksel oranında gösterilmesini sağlar. Öte yandan, böyle bir ekran kontrol görevini yerine getirmek için yeterli bir CPLD'nin maliyeti yaklaşık 2 $ 'dır.
Amaç, düz renkli metin veya basit (örn. 16 renkli veya 64 renkli) grafikler göstermekse, bir ARM'yi renkli LCD ile arayüzlemenin en iyi yolu nedir?
Düzenle
Karakter modu LCD'ler, kendi sürücü yöntemimi kullanarak özel 3: 1 çok katlı segment tabanlı, yerleşik denetleyicilere sahip siyah beyaz grafik LCD'ler ve siyah beyaz dahil olmak üzere birçok LCD ekran ile birçok LCD ekran projesi yaptım. - kendi CPLD tabanlı kontrol cihazımı mikrodenetleyicinin genel amaçlı DMA'sı ile arabirim oluşturmak üzere tasarladığım beyaz LCD'ler (hatta dört seviyeli gri tonlama sağlar). Ben ekranlar zippy yapmaktan gurur duyuyorum. Grafik denetleyicilerinden biri, sabit veriler yazarken bile tam ekran yenilemesi için yaklaşık 1/10 saniye gerektiren bir köpekti, ancak ekranlarımın çoğu 1/50 saniyenin altında oldukça karmaşık bir görüntü bile oluşturabilir.
Yaptığım projelerin çoğu pille çalışıyor, bu nedenle mevcut çizim bir sorundur. DMA tabanlı ekran denetleyicisi iyi çalıştım, ancak hat destekli bir proje içindi. Grafik LCD'den makul akım çekimi almanın tek yolunun, ekran arabelleğini ve sütun sürücülerini birleştiren bir denetleyici kullanmak olduğuna inanıyorum. Yongalar arasında çok sayıda ekran göndermek, piksel başına tek bir bit ekranda bile çok fazla enerji harcar; piksel başına on altı bitlik renkli bir ekranda çok daha kötü olurdu.
Sadece renkli LCD veri sayfalarına bakmaya başladım; birçok ekran ILITEK ILI9320'ye benzer bir kontrolör kullanıyor gibi gözükse de, bu genel tasarıma dayalı kontrolörler için bulduğum tüm veri sayfaları "ön" olarak işaretlenmiştir. ILITEK gibi bazıları maskeleme ve şeffaflık özelliklerine sahip olduklarını iddia ediyorlar, ancak bunlar için herhangi bir kayıt listelemiyorlar; Gerçek çiplerin böyle özelliklere sahip olup olmadığını bilmiyorum ama "ön" veri sayfaları onları dahil etmeyi ihmal ettiler mi, yoksa özellikleri atlayıp atmadıklarını mı, yoksa bunlardan bahsetmeyi unuttular mı? Pratikte bu tür tüm yongaların şeffaflık özellikleri varsa, onlar için tasarım yapmak makul görünecektir; değilse, değil.
Çoğu proje için tipik bir ekranın, rastgele sayıda düz boyutlu yazı tiplerinde rastgele yerleştirilmiş metinlerden oluşmasını beklerim. Yazı tipleri büyük olasılıkla piksel başına bit verisi olarak depolanır. Bir Cortex-M3 kullanarak, ekranı paralel verilerle yazmak istersem, iki piksel yazmak için kodun "iç döngüsü" muhtemelen şöyle bir şey ortaya çıkarır:
rol r0, r0, # 2; C'den bir bit, N'de bir bit alın ITCS strhcs r1, [r3, # DATA_OFS]; Veri yazma strhcc r2, [r3, # DATA_OFS]; Veri yazma strb r4, [r3, # CLOCK_SET_OFS]; Saati yükseğe ayarla strb r4, [r3, # CLOCK_CLR_OFS]; Saati düşük olarak ayarla itmi strhmi r1, [r3, # DATA_OFS]; Veri yazma strhpl r2, [r3, # DATA_OFS]; Veri yazma strb r4, [r3, # CLOCK_SET_OFS]; Saati yükseğe ayarla strb r4, [r3, # CLOCK_CLR_OFS]; Saati düşük olarak ayarla
Tam olarak dünyadaki en hızlı şey değil. Ayarlanan / temizlenen saat yönergelerindeki yazımların kaldırılması yardımcı olacaktır. Tahminimce, her iki saat yazımını da ortadan kaldırmak için mimariden bağımsız güzel bir yol yoktur, ancak birini ortadan kaldırmaya izin verecek oldukça yaygın bir yol olabilir (örneğin, birçok çipin bir çıkışı atmak için bir sayaç / PWM olabilir. tek bir bellek saklama işlemine yanıt olarak).
SPI bağlantı noktasını kullanmak ve bit başına bir pikseli saatlemek için donanım eklemek ekran erişimini büyük ölçüde hızlandıracaktır. Maskeleme ve saydamlık içermeyen bir ekran kullanılıyorsa, CPLD'nin bir adres sayacı içermesi gerekir ve her piksel için bir piksel verisi kelimesi veya aşağıdaki pikselin konumu için bir set adresi komutu (bunun için bir sayacı olması gerekir) ). Aksine, bir ekranın maskeleme ve şeffaflığı olsaydı, tek yapmam gereken CPLD'nin 16 bitte saatten sonra, her ek bitin ekrana bir veri saati SDI pinini takip eden LSB (bir CPLD kullanmak gerekli olmayabilir - sadece birkaç normal mantık yongaları). Saydamlık rengini yazmak istediğim renge ayarladım, ancak LSB ters çevrilmişti.
Maskeleme ve şeffaflığa dayanan güzel bir tasarım bulmak istemiyorum ve sonra sadece bu tür özelliklere sahip ekranların 30 haftalık teslim süresine sahip olduğunu keşfetmek istiyorum. Öte yandan, bu tür ekranlar pek çok tedarikçiden olmaya ve yaygın olarak mevcut olmaya devam ederse, kullanılabilirlikle ilgili paranoyaların beni daha düşük bir tasarım kullanmaya itmesine izin vermek istemiyorum.