Power-up Inisialisasi Modul LCD HD44780

10

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.

mjh2007
sumber
Sepertinya tidak ada yang menganggap pertanyaan Anda layak dipilih, cukup aneh.
Kortuk
Lembar data untuk beberapa klon HD44780 ditulis dengan buruk. Tujuan saya adalah untuk memulai percakapan tentang cara yang tepat untuk menginisialisasi mereka. Mungkin saya satu-satunya yang memiliki masalah dalam menggunakannya dalam mode 4-bit.
mjh2007
Tidak, saya akan mengalami masalah yang sama sekarang berjalan dalam mode 4-bit. Sudah sekitar 15 tahun sejak saya terakhir memprogram LCD karakter sederhana, dan saya ingat itu benar-benar menyebalkan ketika saya masih di sekolah. Tapi saya tidak sejauh Anda - saya bahkan tidak bisa mendapatkan inisialisasi dengan benar karena saya tidak dapat menampilkan satu karakter, belum. :)
Dave

Jawaban:

4

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;

mjh2007
sumber
2

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).

supercat
sumber
1

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!

Eduardo Brandt
sumber
0

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.

Thomas O
sumber
Sudah memiliki keterlambatan 100 ms saat memulai
mjh2007
Coba saran saya yang lain. Anda bahkan dapat mengontrol daya LCD dari pin secara langsung; seharusnya tidak menarik lebih dari beberapa mA.
Thomas O
apakah benar-benar ada penundaan maksimum yang diijinkan? Saya pikir hal utama dengan LCD ini adalah Anda menunggu jumlah minimum, tetapi jika Anda tidak dapat menentukan waktunya dengan tepat, Anda dapat memainkannya dengan aman dan hanya menunggu lebih lama.
Dave
@Dave, Anda mungkin salah mengartikan "keterlambatan maksimum", itu hanya penundaan yang masuk akal yang saya sarankan. Misalnya, menunggu beberapa jam akan menjadi sedikit ekstrim ...
Thomas O
LOL! Yah saya pikir itu yang Anda maksud, tapi saya ingin memastikan bahwa saya tidak kehilangan sesuatu, karena saya belum mendapatkan LCD diinisialisasi. Saya bertanya-tanya apakah saya harus pergi dan mengambil panci untuk memastikan itu bukan kontras yang mengacaukan saya di sini. :)
Dave
0

Tidak yakin apakah ini membantu SEMUA, tapi saya mengacaukan KS0066U pada proyek Arduino. Inilah tautannya .

ThaKidd KG5ORD
sumber