Khởi tạo nguồn cho Mô-đun LCD HD44780


10

Tôi đang sử dụng mô-đun LCD nhân bản HD44780 một KS0066U. Mọi thứ đều hoạt động tốt trên mô-đun trừ khi tôi nhanh chóng cấp nguồn cho thiết bị (bật-> tắt-> bật). Vì một số lý do, sự gián đoạn nguồn điện rất ngắn khiến mô-đun hiển thị khởi tạo không chính xác dưới dạng LCD 1 dòng thay vì màn hình LCD 2 dòng. Điều gì sẽ gây ra hành vi này? Có cách nào để ngăn chặn nó trong phần mềm?

EDIT: Tôi đang sử dụng bộ điều khiển hiển thị ở chế độ 4 bit chứ không phải chế độ 8 bit.


Có vẻ như không ai nghĩ rằng câu hỏi của bạn đáng bỏ phiếu, khá kỳ quặc.
Kortuk

Các bảng dữ liệu cho một số bản sao HD44780 được viết khá kém. Mục tiêu của tôi là có được một cuộc trò chuyện diễn ra theo cách phù hợp để khởi tạo chúng là gì. Có lẽ tôi là người duy nhất gặp vấn đề khi sử dụng chúng ở chế độ 4 bit.
mjh2007

Không, tôi đang gặp rắc rối tương tự ngay bây giờ khi chạy ở chế độ 4 bit. Đã khoảng 15 năm kể từ lần cuối tôi lập trình một màn hình LCD nhân vật đơn giản và tôi nhớ rằng đó là một nỗi đau thực sự để gỡ lỗi khi tôi còn đi học. Mặc dù vậy, tôi không ở xa bạn - Tôi thậm chí không thể khởi tạo đúng vì tôi chưa thể hiển thị một ký tự. :)
Dave

Câu trả lời:


4

Tôi đã thay đổi mã khởi tạo của mình để nó gửi nibble 4 bit trên của lệnh đặt chức năng hai lần. Theo đó tôi bực bội với nibble 4 bit trên và tiếp theo là nibble 4 bit thấp hơn. Điều này không khớp với biểu dữ liệu mà dường như chỉ ra rằng bạn có thể gửi nibble 4 bit trên sau đó gửi lệnh tập hợp hàm trên 4 bit theo sau là 4 bit thấp hơn.

// Hoạt động đôi khi mã giả
port = 0x20;
e = 1; e = 0;
cổng = 0x20;
e = 1; e = 0;
cổng = 0xC0;
e = 1; e = 0;

// Hoạt động tất cả các mã giả mã thời gian
port = 0x20;
e = 1; e = 0;
e = 1; e = 0;
cổng = 0x20;
e = 1; e = 0;
cổng = 0xC0;
e = 1; e = 0;


2

Tôi đoán là bạn đang thiếu một độ trễ cần thiết trong chuỗi khởi tạo của bạn. Nếu màn hình bận khi bạn cố gửi lệnh, lệnh đó sẽ bị bỏ qua. Nếu khi bạn bắt đầu quy trình của mình, màn hình ở chế độ bốn bit và vừa có "0000" được đặt ở nửa đầu của lệnh, thì khi bạn bấm giờ trong "0011", màn hình sẽ thấy toàn bộ lệnh là "00000011" , điều này sẽ khiến màn hình bận rộn lên tới 1.6ms.

Ngẫu nhiên, thật tốt nếu có thể nối dây dữ liệu thứ tự thấp từ màn hình theo cách mà khi lệnh "0011" được gửi đến màn hình, toàn bộ 8 bit mà màn hình nhìn thấy sẽ tạo thành lệnh đặt chế độ đó là chính xác cho loại màn hình bạn đang sử dụng. Điều đó sẽ giúp tránh mọi sự cố màn hình khi đặt lại màn hình đã sử dụng (đặt lại màn hình theo định kỳ là một ý tưởng tốt, nếu nó có thể được thực hiện một cách dễ dàng, vì nó sẽ đảm bảo rằng nếu màn hình nào đó rơi vào chế độ xấu, nó sẽ khắc phục chinh no).


1

Tôi tìm thấy một cách giải quyết cho vấn đề:

Tôi đã thêm độ trễ 1000 mili giây khi khởi động, trước khi khởi tạo / định cấu hình bộ điều khiển LCD. Nó làm việc khá tốt cho tôi.

Độ trễ thấp hơn (100, 200ms) không hoạt động tốt. Chỉ cần một lưu ý: Nó chỉ xảy ra trong 4bits databuss.

Chúc may mắn!


0

Chèn một độ trễ trong mã của bạn để khi nó bật, nó sẽ cho màn hình LCD đủ dài để khởi tạo khi nó khởi động. Tối đa vài trăm mili giây.

Bạn cũng có thể thử kết nối nguồn LCD với vi điều khiển và tắt nguồn LCD trong một giây sau khi khởi động.


Đã có độ trễ 100 ms khi khởi động
mjh2007

Hãy thử đề nghị khác của tôi sau đó. Bạn thậm chí có thể điều khiển nguồn LCD trực tiếp từ pin; nó không nên vẽ nhiều hơn một vài mA.
Thomas O

Có thực sự có độ trễ tối đa cho phép? Tôi nghĩ điều chính với các màn hình LCD này là bạn đợi số tiền tối thiểu, nhưng nếu bạn không thể điều chỉnh thời gian chính xác, bạn có thể chơi nó an toàn và chỉ cần chờ lâu hơn.
Dave

@Dave, bạn có thể đã hiểu sai "độ trễ tối đa", đó chỉ là một độ trễ hợp lý mà tôi khuyên dùng. Ví dụ, chờ đợi một vài giờ sẽ là một chút cực đoan ...
Thomas O

CƯỜI LỚN! Chà, tôi hiểu đó là ý của bạn, nhưng tôi muốn đảm bảo rằng tôi không thiếu thứ gì, vì tôi vẫn chưa có màn hình LCD được khởi tạo. Tôi tự hỏi liệu tôi có nên đi và lấy một cái nồi để đảm bảo rằng đó không phải là sự tương phản đang làm tôi khó chịu ở đây. :)
Dave

0

Không chắc chắn nếu điều này giúp AT ALL, nhưng tôi đã nhầm lẫn với KS0066U trong một dự án Arduino. Đây là liên kết .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.