Saya menggunakan modul LCD klon HD44780 KS0066U. Semuanya berfungsi ok pada modul kecuali ketika saya dengan cepat menghidupkan daya perangkat (on-> off-> on). Untuk beberapa alasan gangguan yang sangat singkat pada daya menyebabkan modul tampilan tidak benar diinisialisasi sebagai LCD 1-baris, bukan tampilan LCD 2-baris. Apa yang menyebabkan perilaku ini? Apakah ada cara untuk mencegahnya dalam perangkat lunak?
EDIT: Saya menggunakan pengontrol tampilan dalam mode 4-bit bukan mode 8-bit.
Jawaban:
Saya mengubah kode inisialisasi saya sehingga mengirim nibble 4-bit atas dari perintah fungsi set dua kali. Setelah itu saya membenci gigitan 4-bit atas diikuti oleh gigitan 4-bit yang lebih rendah. Ini tidak cocok dengan datasheet yang tampaknya menunjukkan bahwa Anda dapat mengirim nibble 4-bit atas kemudian mengirim perintah fungsi set atas 4-bit diikuti oleh 4-bit yang lebih rendah.
// Bekerja terkadang pseudo-code
port = 0x20;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
// Bekerja sepanjang waktu pseudo-code
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
port = 0x20;
e = 1; e = 0;
port = 0xC0;
e = 1; e = 0;
sumber
Dugaan saya adalah bahwa Anda kehilangan penundaan yang diperlukan dalam urutan inisialisasi Anda. Jika tampilan sibuk ketika Anda mencoba mengirim perintah, perintah itu akan diabaikan. Jika ketika Anda memulai prosedur Anda, layar dalam mode empat bit dan baru saja "0000" mencatat sebagai bagian pertama dari suatu perintah, maka ketika Anda mencatat dalam "0011" layar akan melihat seluruh perintah sebagai "00000011" , yang akan menyebabkan tampilan sibuk hingga 1,6 ms.
Secara kebetulan, ada baiknya jika memungkinkan untuk mengirimkan kabel data pesanan rendah dari layar sedemikian rupa sehingga ketika perintah "0011" dikirim ke layar, seluruh 8 bit yang dilihat oleh layar akan membentuk perintah mode-set mana yang benar untuk jenis tampilan yang Anda gunakan. Itu akan membantu menghindari gangguan tampilan ketika mengatur ulang tampilan yang sudah digunakan (mengatur ulang tampilan secara berkala adalah ide yang baik, jika itu dapat dilakukan tanpa glitch, karena itu akan memastikan bahwa jika layar entah bagaimana masuk ke mode buruk itu akan memperbaiki diri).
sumber
Saya menemukan solusi untuk masalah ini:
Saya menambahkan penundaan 1000 milidetik saat startup, sebelum menginisialisasi / mengkonfigurasi pengontrol LCD. Ini bekerja sangat baik untuk saya.
Penundaan yang lebih rendah (100, 200 ms) tidak berfungsi dengan baik. Hanya sebuah catatan: Itu terjadi hanya dalam databuss 4bits.
Semoga berhasil!
sumber
Memasukkan penundaan dalam kode Anda sehingga ketika diaktifkan itu memberikan LCD yang cukup lama untuk diinisialisasi ketika mulai. Maksimal beberapa ratus milidetik.
Anda juga dapat mencoba menghubungkan daya LCD ke mikrokontroler dan mematikan LCD selama satu detik setelah memulai.
sumber
Tidak yakin apakah ini membantu SEMUA, tapi saya mengacaukan KS0066U pada proyek Arduino. Inilah tautannya .
sumber