Saat mendesain perangkat berbasis ARM yang seharusnya menampilkan grafik sederhana pada LCD berwarna, bagaimana sebaiknya orang merancang hal-hal yang memungkinkan pembaruan cepat, lebih disukai tanpa terikat dengan vendor ARM atau LCD tertentu? Proyek saya saat ini menggunakan tampilan hitam-putih yang dapat digerakkan secepat kilat oleh port SPI pada PIC (menggambar ulang tampilan kompleks dalam 1/60 detik). Tampaknya layar LCD berwarna umum memiliki port SPI, tetapi bahkan mengisi LCD 160x120 dengan warna solid akan membutuhkan waktu 30 ms, dan 320x240 akan membutuhkan 120 ms sebagai case terbaik (shift jam 10MHz).
Jika seseorang dapat menyematkan pin pengontrol, mode paralel bisa lebih baik, tapi saya tidak tahu cara bebas keluarga untuk menghubungkan antarmuka paralel tanpa memerlukan tiga instruksi penyimpanan memori terpisah untuk setiap piksel (satu untuk mengatur data, satu untuk mengatur output jam tinggi, dan satu untuk clock rendah). Beberapa chip ARM memiliki antarmuka bus memori, tetapi sering ingin melakukan hal-hal seperti alamat dan data multipleks, atau melakukan banyak pin untuk menghasilkan bit alamat yang tidak relevan (LCD hanya perlu satu bit alamat).
Melihat ILI9320 oleh ILITEK, atau HD66789 oleh Renesas, salah satu pendekatan yang tampaknya menarik adalah menggunakan CPLD untuk mengonversi SPI ke data paralel, dan memasukkan mode yang akan menghasilkan piksel per bit. Melihat lembar data Renesas, dimungkinkan untuk mendapatkan penulisan piksel per bit dengan perangkat keras minimal (tidak diperlukan CPLD) dengan membuat semua bit data port paralel melacak pin data serial, menggunakan mode serial untuk semua hal selain piksel menulis, dan menggunakan fungsi perbandingan / topeng sehingga piksel semua-nol menjadi transparan dan piksel semua-yang akan mengatur bit yang dipilih dalam GRAM, atau piksel semua-yang akan transparan dan piksel semua-nol akan menghapus bit yang dipilih. Bagian "fitur" pada lembar data IKITEK menunjukkan bahwa ia memiliki fungsi yang serupa, tetapi register memetakan tidak
Dengan asumsi kode akan menampilkan teks dan gambar berwarna solid, pendekatan yang ideal tampaknya adalah menggunakan CPLD untuk menghubungkan port SPI ARM ke port paralel layar, dan memungkinkan CPLD dimuat dengan warna latar depan / latar belakang. Ini akan sangat baik jika seseorang memiliki sarana untuk menulis piksel "transparan". Diberi font sebagai bitmap dua warna, orang bisa dengan mudah memuat data font langsung ke port SPI; ini akan memungkinkan data font ditampilkan pada kecepatan satu piksel setiap dua jam ARM. Di sisi lain, CPLD yang cukup untuk menangani tugas kontrol tampilan seperti itu akan menelan biaya sekitar $ 2.
Apa cara terbaik untuk menghubungkan ARM dengan LCD berwarna, jika tujuannya terutama untuk menampilkan teks berwarna solid atau grafik sederhana (misalnya 16-warna atau 64-warna)?
Edit
Saya telah melakukan banyak proyek layar LCD, dengan banyak jenis LCD, termasuk LCD mode-karakter, kustom berbasis segmen multiplexed 3: 1 menggunakan metode drive saya sendiri, LCD grafis hitam dan putih dengan pengontrol bawaan, dan hitam-dan LCD putih dimana saya mendesain pengontrol berbasis CPLD saya sendiri untuk berinteraksi dengan DMA tujuan umum mikrokontroler (menyediakan empat tingkat skala abu-abu). Saya bangga membuat tampilan zippy. Salah satu pengontrol grafis adalah sedikit anjing yang membutuhkan sekitar 1/10 detik untuk refresh layar penuh bahkan ketika menulis data konstan, tetapi sebagian besar layar saya dapat membuat bahkan gambar yang cukup kompleks di bawah 1/50 detik.
Banyak proyek yang saya lakukan bertenaga baterai, jadi pengundian saat ini adalah masalah. Pengontrol tampilan berbasis DMA yang saya lakukan bekerja dengan baik, tetapi itu untuk proyek bertenaga garis. Saya percaya satu-satunya cara untuk mendapatkan hasil imbang yang wajar dari LCD grafis adalah dengan menggunakan pengontrol yang menggabungkan buffer layar dan driver kolom. Mengirim banyak tampilan antar chip setiap frame akan menghabiskan banyak energi bahkan pada tampilan bit-per-pixel tunggal; pada layar warna dengan enam belas bit per piksel, itu akan jauh lebih buruk.
Saya baru mulai melihat lembar data LCD berwarna; banyak tampilan tampaknya menggunakan pengontrol yang mirip dengan ILITEK ILI9320, meskipun semua lembar data yang saya temukan untuk pengontrol berdasarkan pada desain umum telah ditandai "pendahuluan". Beberapa seperti ILITEK satu mengklaim memiliki fitur masking dan transparansi tetapi tidak mencantumkan register untuk mereka; Saya tidak tahu apakah chip nyata memiliki fitur seperti itu tetapi lembar data "pendahuluan" lalai untuk memasukkan mereka, atau apakah mereka menghilangkan fitur tetapi lupa untuk menyebutkannya. Jika dalam praktiknya semua chip tersebut memiliki fitur transparansi, tampaknya masuk akal untuk mendesainnya; jika tidak, tidak.
Saya berharap bahwa untuk sebagian besar proyek layar tipikal akan terdiri dari teks yang ditempatkan secara sewenang-wenang dalam jumlah moderat dari font warna solid berukuran sewenang-wenang. Font kemungkinan besar akan disimpan sebagai data bit per piksel. Menggunakan Cortex-M3, jika saya ingin menulis tampilan dengan data paralel, "lingkaran dalam" kode untuk menulis dua piksel mungkin akan berakhir seperti:
rol r0, r0, # 2; Dapatkan satu bit di C, yang lain di N itcs strhcs r1, [r3, # DATA_OFS]; Tulis data strhcc r2, [r3, # DATA_OFS]; Tulis data strb r4, [r3, # CLOCK_SET_OFS]; Atur jam tinggi strb r4, [r3, # CLOCK_CLR_OFS]; Atur jam rendah itmi strhmi r1, [r3, # DATA_OFS]; Tulis data strhpl r2, [r3, # DATA_OFS]; Tulis data strb r4, [r3, # CLOCK_SET_OFS]; Atur jam tinggi strb r4, [r3, # CLOCK_CLR_OFS]; Atur jam rendah
Bukan hal tercepat di dunia. Menghilangkan penulisan ke instruksi set / clear clock akan membantu. Dugaan saya adalah bahwa tidak ada cara arsitektur-independen yang bagus untuk menghilangkan kedua penulisan jam, tetapi mungkin ada cara yang cukup umum yang memungkinkan untuk menghilangkan satu jam (misalnya banyak chip mungkin memiliki penghitung / PWM yang dapat dibuat untuk mengirim output) singkat sebagai tanggapan terhadap operasi penyimpanan memori tunggal).
Menggunakan port SPI dan menambahkan perangkat keras ke clock satu pixel per bit akan sangat mempercepat akses tampilan. Jika menggunakan tampilan tanpa masking dan transparansi, CPLD harus menyertakan penghitung alamat, dan untuk setiap piksel mencatat kata data piksel atau perintah set-address untuk posisi piksel berikut (untuk itu diperlukan penghitung ). Sebaliknya, jika sebuah tampilan memiliki masking dan transparansi, yang perlu saya lakukan hanyalah agar CPLD mendukung mode di mana setelah itu clocked dalam 16 bit, masing-masing bit tambahan akan mencatat sebuah kata data keluar ke tampilan dengan layar. LSB melacak pin SDI (bahkan mungkin tidak perlu menggunakan CPLD - hanya beberapa chip logika normal). Saya akan mengatur warna transparansi menjadi warna yang ingin saya tulis tetapi dengan membalik LSB.
Saya tidak ingin menghasilkan desain yang indah yang mengandalkan masking dan transparansi dan kemudian menemukan bahwa satu-satunya tampilan dengan fitur seperti itu memiliki waktu tunggu 30 minggu. Di sisi lain, jika tampilan seperti itu cocok dan tetap tersedia secara luas dari banyak vendor, saya tidak ingin membiarkan paranoia tentang ketersediaan membuat saya menggunakan desain yang lebih rendah.