таблица символов для LCM-S01602DTR
Всем привет. Скачал официальный даташит на LCM-S01602DTR, в нём отсутствует таблица с символами и адреса регистров, для программирования LCD контроллера. Глупый вопрос- где их взять??? Смотрю аналогичные контроллеры, там всё хорошо описано.
"Ленивый человек в бесчестном покое сходен с неподвижною болотною водою, которая, кроме смраду и презренных гадин, ничего не производит". М.В. Ломоносов
- Реклама
По распиновке похоже на обычный 44780.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Их много таких же по распиновки , но гарантии нету. Придётся пробовать методом тыка.
"Ленивый человек в бесчестном покое сходен с неподвижною болотною водою, которая, кроме смраду и презренных гадин, ничего не производит". М.В. Ломоносов
Всё равно спасибо.
"Ленивый человек в бесчестном покое сходен с неподвижною болотною водою, которая, кроме смраду и презренных гадин, ничего не производит". М.В. Ломоносов
Стр.2 http://www.cosmiac.org/pdfs/07_Adding_Custom_IP_Lab.pdf1. The ML403 board has a 16-character x 2-line LCD (Lumex LCM-S01602DTR/M) on the board to display text information. The data interface to the LCD is connected to the FPGA to support 4-bit mode only. We will create the new peripheral to handle the hardware interface to the LCD. To simplify the code, only writing to the LCD will be supported.
На 7-ой странице инициализация, вроде похожа на 44780.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
Спасибо, буду пробовать.
"Ленивый человек в бесчестном покое сходен с неподвижною болотною водою, которая, кроме смраду и презренных гадин, ничего не производит". М.В. Ломоносов
Один ... ( всё равно) не работает.
clk_lcd = 50 us;
clk_lcd = 50 us;
Код: Выделить всё
init_lcd : process
variable delay : integer ;
variable i: integer := 1;
variable nibble_wr : integer := 0;
begin
wait until rising_edge(clk_lcd);
case state is
when power_on_wait_40_ms =>
delay := 800;
lcd_rs <= '0';
lcd_rw <= '0';
lcd_e <= '1';
if i = delay then
state <= function_set;
i := 1;
else
i := i + 1;
end if;
when function_set =>
if nibble_wr = 1 then
lcd_data <= x"2";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"2";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 5;
elsif nibble_wr = 5 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 6;
elsif nibble_wr = 6 then
lcd_e <= '0';
nibble_wr := 1;
state <= function_set_wait_50_us;
end if;
when function_set_wait_50_us =>
lcd_e <= '1';
state <= display_on_off;
when display_on_off =>
if nibble_wr = 1 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"c";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 1;
state <= display_on_off_wait_50_us;
end if;
when display_on_off_wait_50_us =>
lcd_e <= '1';
state <= display_clear;
when display_clear =>
if nibble_wr = 1 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"1";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 1;
state <= display_clear_wait_2_ms;
end if;
when display_clear_wait_2_ms =>
delay := 40;
lcd_rs <= '0';
lcd_rw <= '0';
lcd_e <= '1';
if i = delay then
state <= entry_mode_set;
i := 1;
else
i := i + 1;
end if;
when entry_mode_set =>
if nibble_wr = 1 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"6";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 1;
state <= entry_mode_set_delay;
end if;
when entry_mode_set_delay =>
delay := 40;
lcd_rs <= '0';
lcd_rw <= '0';
lcd_e <= '1';
if i = delay then
state <= display_comand;
i := 1;
else
i := i + 1;
end if;
when display_comand =>
led_c <= '1';
lcd_rs <= '0';
if nibble_wr = 1 then
lcd_data <= x"1";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 1;
state <= display_data;
end if;
when display_data =>
led_n <= '1';
lcd_rs <= '1';
if nibble_wr = 1 then
lcd_data <= x"3";
lcd_e <= '1';
nibble_wr := 2;
elsif nibble_wr = 2 then
lcd_e <= '0';
nibble_wr := 3;
elsif nibble_wr = 3 then
lcd_data <= x"0";
lcd_e <= '1';
nibble_wr := 4;
elsif nibble_wr = 4 then
lcd_e <= '0';
nibble_wr := 1;
state <= display_comand;
end if;
end case;
end process;
"Ленивый человек в бесчестном покое сходен с неподвижною болотною водою, которая, кроме смраду и презренных гадин, ничего не производит". М.В. Ломоносов


