- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
We are trying to figure out a way to send some display characters to the LCD and cannot find the I2C address in the manual. Could someone tell us how to find it?
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
From my findings,
The LCD char display is NHD-0216K3Z-NSW-BBW-V3
Link to the datasheet:
https://www.newhavendisplay.com/specs/NHD-0216K3Z-NSW-BBW-V3.pdf
The slave address is 0x50 by default. It can be changed to different address with CMD 0x62, refer page 7 from the datasheet.
Thanks.
Regards,
Aik Eu
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
From my findings,
The LCD char display is NHD-0216K3Z-NSW-BBW-V3
Link to the datasheet:
https://www.newhavendisplay.com/specs/NHD-0216K3Z-NSW-BBW-V3.pdf
The slave address is 0x50 by default. It can be changed to different address with CMD 0x62, refer page 7 from the datasheet.
Thanks.
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @ychi ,
We do not receive any response from you to the previous question/reply/answer that I have provided. This thread will be transitioned to community support. If you have a new question, feel free to open a new thread to get the support from Intel experts. Otherwise, the community users will continue to help you on this thread. Thank you
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
The manual says that the default address is 0x50, but what would the address for the internal register be?
Does it go by this?
Could you tell me what I am doing wrong with this sending sequence?
Screen is on but nothing gets displayed.
Thanks,
Yong
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
HI Yong Chi,
I think you are getting a display on (0x41) working is a good thing.
You havent set the cursor properly yet because you used 0x4A instead of 0x46 for Cursor home.
Try Set cursor(0x45) or Cursor home(0x46) first. Then Underline cursor on (0x47) to observe any cursor there.
If there is a cursor, you can play with the move cursor left(0x49) or right(0x4A)
If I understand correctly, once there is a cursor, you should able to display Characters after that.
Refer to the Table of Commands in the datasheet. Tryout different commands to see which one is responding and which one is not.
Make your coding short and simple based on which line which works accordingly in sequence.
From there, we can know better on how the LCD char display operates.
Thanks.
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
So we are going off of this sending sequence:
start -> address -> r/w -> ack -> display on -> ack -> clear screen -> ack -> cursor home -> ack -> H -> ack -> and so on...-> ack
-> stop
but our lcd is still not responding. It seems like it's communicating to the address but nothing is displayed.
here is the code:
module HelloWorld (
input wire clk, // Controller clock
input wire rstn, // Controller active low reset
inout wire sda_pin_io, // I2C SDA Pin
output scl_pin_o // I2C SCL Pin
);
reg [7:0] address_n_data_i; // address to write into
wire [7:0] rd_data_o; //wont need if uncommented above
wire [2:0] req_status_o; //wont need if uncommented above
wire io_sda_w;
assign sda_pin_io = io_sda_w;
reg [15:0] count;
wire command_i;
reg strb_i;
reg rst_ni;
reg [7:0] words [0:52];
initial begin
words[0] = 8'hFE; //
words[1] = 8'h41; // display on, needs 100uS
words[2] = 8'hFE; //
words[3] = 8'h51; // clear screen, needs 1.5ms
words[4] = 8'hFE;
words[5] = 8'h46; // set cursor to home, needs 1.5ms
words[6] = 8'h48; // H takes 3ms
words[7] = 8'h65; // e
words[8] = 8'h6c; // l
words[9] = 8'h6c; // l
words[10] = 8'h6f; // o
words[11] = 8'h20; // space
words[12] = 8'h57; // W
words[13] = 8'h6f; // o
words[14] = 8'h72; // r
words[15] = 8'h6c; // l
words[16] = 8'h64; // d
words[17] = 8'h21; // !
words[18] = 8'h20; // space
end
i2c_master lcd(
.address_n_data_i(address_n_data_i), // Address and Data
.command_i(command_i), // Command indicate read/write)
.strb_i(strb_i), // Qualifier which will Latch inputs
.clk_i(clk), // Controller clock
.rst_ni(rst_ni), // Controller active low reset
.sda_pin_io(io_sda_w), // I2C SDA Pin*
.scl_pin_o(scl_pin_o), // I2C SCL Pin
.rd_data_o(rd_data_o), // Output data on reads
.req_status_o(req_status_o)
);
parameter [17:0] max_count = 177; //15+(18*9)
always @(negedge clk)
begin
if(rstn ==0)
begin
count <= 0;
rst_ni <= 0;
end
else
begin
count <= (count == max_count)? max_count : count +1;
rst_ni <= 1;
end
end
assign command_i = 0;
always@(*)
begin
if (count == 0 || count == max_count) strb_i = 0;
if (count == 4) begin address_n_data_i = 8'h28; strb_i = 1; end
if (count > 14 && (count%9 == 6))
//case(count%9)
address_n_data_i = words[(count/9) -1];//8'b1011_1000; // function set
//endcase
end
endmodule
Could you point out what we are doing wrong? I've also attached the i2c_master.v we are using along with the top.v and the clk_divder.v...
wave forms onTB seem okay, but nothing is displayed when .sof is run on the aria x board
Thanks,
Yong
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
I would like to try the below:
Can check the below sequence and observe the respond:
- display on(0x41) -> add some delay to see display is on ~10seconds -> then only display off(0x42). This is to make sure it is responding to any basic cmds if the lcd can be turn on and then it can be off after 10 seconds.
- display on(0x41) -> add some delay again ~2seconds -> then set Home Cursor(0x46) -> then turn on underline cursor (0x47). This is to verify you can see any cursor appear before sending any ascii characters.
Feedback your observation to me after this.
Thanks.
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
I will close-pending this case at the moment since the LCD char display is responding to the address given. Do open a new thread for further enquiries.
Thanks.
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
LCD is still not responding, I think there may be something wrong with our i2c master.
Is there an i2c ip that we could utilize to further investigate our design?
Thank you,
Yong
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
As I understand from your previous attempts, seems like you are able to turn on the LCD with the Turn on display cmd with the correct I2C address. Your I2C address will be acknowledged in the signal if it is a correct address.
I am thinking if you are able to turn on the LCD, the cmd to turn off the LCD should work as well. Or only the cmd to turn on the LCD working?
Thanks.
Regards,
Aik Eu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
LCD is on, but we can't turn display off or make it to show anything. It's not responding to any cmds.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Yong Chi,
To clarify further,
The LCD can on after the display on cmd is sent right?
If LCD display on is working, compare the data signal with LCD display off considering the acknowledge bit for address and cmd. From here maybe can tell the problem.
Thanks.
Regards,
Aik Eu
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page