Перейти к публикации

Восстановлен мод "Модераторы тем" - просьба проверить.

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

georgy31

Помогите подключить ЖК-дисплей к ПЛИС

Рекомендованные сообщения

Осталось свободное место в ПЛИСке. Очень хочется вывести кое какую информацию на двухстрочный дисплей 1602. Подскажите как это организовать. Есть программа для инициализации самого дисплея, нормально инициализирует дисплей и выдаёт мерцающий курсор на экран. Как завести данные? Пытаюсь вводить ввиде последовательных констант, ничего не высвечивается. Всю голову сломал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

записывать в соответствующий регистр (область памяти жки контроллера) данные . Контроллер какой на ЖКИ стоит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да я в курсе по теории. Как это сделать на практике? Есть блок инициализации, туда заводятся 10 команд, две служебные и 8 данные. Как их получить? Пытаюсь записать их как константы, никаких изменений на дисплее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да я в курсе по теории. Как это сделать на практике?

То есть на контроллере делали, а проблемы с портацией в плис?

Если на контроллере не делали, то могу дать очень прозрачный С-код (стучите в личку).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня всё на ПЛИС сделано, без контроллеров. Вот программа для инициализации дисплея. В каком виде подавать команды для формирования Изображения?

 

 

 

 

module lcd_controller (init, clk, enable, bus, write_busy, lcd_rw, lcd_rs, lcd_enable, lcd_db);

 

input init;

input clk;

input enable;

input [10:0] bus;

output write_busy;

output lcd_rw;

output lcd_rs;

output lcd_enable;

output [7:0] lcd_db;

 

reg lcd_rs;

reg lcd_rw;

reg lcd_enable;

reg write_busy;

reg eval_spd;

reg [2:0] count;

reg [2:0] cur_state;

reg [2:0] next_state;

reg [7:0] lcd_db;

wire [10:0] bus;

reg [25:0] num_clks;

 

always @(posedge clk)

begin

cur_state=next_state;

case(cur_state)

 

//-----LCD CONTROLLER MASTER--------//

3'b000:

begin

if(init==1)

begin

num_clks=0;

next_state=3'b111;

end

else

begin

if(enable==1)

begin

eval_spd=bus[10];

lcd_rs=bus[9];

lcd_rw=bus[8];

lcd_db=bus[7:0];

num_clks=0;

next_state=3'b010;

end

else

begin

eval_spd=0;

lcd_rw=0;

lcd_rs=0;

lcd_db=0;

next_state=3'b000;

end

end

end

//-----END LCD CONTROLLER MASTER--------//

 

 

//-----INITIALIZATION FOR LCD DISPLAY--------//

3'b111:

begin

if(num_clks < 1000000)

begin

num_clks=num_clks+1;

write_busy=1;

next_state=3'b111;

end

else

begin

num_clks=0;

next_state=3'b001;

end

end

 

 

3'b001:

begin

if(num_clks < 815601)

begin

write_busy=1;

if(num_clks < 275001)

begin

if (num_clks < 275000)

begin

lcd_db=8'b00111000;

if (num_clks < 274000)

begin

lcd_enable=0;

if (num_clks < 200)

begin

lcd_enable=1;

if (num_clks < 100)

begin

lcd_rs=0;

lcd_rw=0;

lcd_db=0;

lcd_enable=0;

end

end

end

end

else

begin

count=count+1;

if (count < 3)

begin

num_clks=0;

end

end

end

else

begin

if (num_clks < 815600)

begin

lcd_db=8'b00000110;

if (num_clks < 680600)

begin

lcd_enable=0;

if (num_clks < 680500)

begin

lcd_enable=1;

if (num_clks < 680400)

begin

lcd_enable=0;

lcd_db=8'b00000001;

if (num_clks < 545400)

begin

lcd_enable=0;

if (num_clks < 545300)

begin

lcd_enable=1;

if (num_clks < 545200)

begin

lcd_enable=0;

lcd_db=8'b00001111;

if (num_clks < 410200)

begin

lcd_enable=0;

if (num_clks < 410100)

begin

lcd_enable=1;

if (num_clks < 410001)

begin

lcd_enable=0;

lcd_db=8'b00111000;

if (num_clks < 275200)

begin

lcd_enable=0;

if (num_clks < 275100)

begin

lcd_enable=1;

end

end

end

end

end

end

end

end

end

end

end

end

end

num_clks=num_clks+1;

next_state=3'b001;

end

else

begin

num_clks=0;

write_busy=0;

count=0;

next_state=3'b000;

end

end

//-------END OF INITIALIZATION OF LCD DISPLAY-------------//

 

 

//---------EVALUATION OF INPUT BUS--------------//

3'b010:

begin

if(eval_spd==1)

begin

next_state=3'b011;

end

else

begin

next_state=3'b100;

end

end

//---------END EVALUATION OF INPUT BUS--------------//

 

 

//------WRITING TO LCD - FAST-------//

3'b011:

begin

if (num_clks < 1003000)

begin

write_busy=1;

if (num_clks < 500)

begin

lcd_enable=0;

if (num_clks < 100)

begin

lcd_enable=1;

end

end

num_clks=num_clks+1;

end

else

begin

num_clks=0;

write_busy=0;

end

end

//-----END WRITING TO LCD - FAST-----//

 

 

//------WRITING TO LCD - SLOW-------//

3'b100:

begin

if (num_clks < 1003000)

begin

write_busy=1;

if (num_clks < 500)

begin

lcd_enable=0;

if (num_clks < 100)

begin

lcd_enable=1;

end

end

num_clks=num_clks+1;

end

else

begin

num_clks=0;

write_busy=0;

next_state=3'b000;

end

end

//-----END WRITING TO LCD - SLOW-----//

 

3'b101:

begin

next_state=3'b000;

end

 

3'b110:

begin

next_state=3'b000;

end

 

/*3'b111:

begin

next_state=3'b000;

end*/

 

endcase

end

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня всё на ПЛИС сделано, без контроллеров

Ну понятно же.

Я Вам предлагаю С-шный код потому, что по нему Вы быстрее разберетесь что и куда надо совать,

чем я в Вашей длинной колбасе и с не очень мне знакомым языком.

Если Вам это надо - Ваше мыло мне в личку .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так выставляйте "RS" и пишите данные для индикации по тем же состояниям автомата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так в том то всё и дело. что писать я не умею. Я рисую в графическом редакторе, в виде обозначений деталей. Посоветуйте, как загрузить данные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я думал, что этот исходник на верилоге вы сами писали. Какая среда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Этот исходник с сайта Альтеры. Он только инициализирует дисплей и выводит курсор. Дальше надо грузить данные для вывода инфы на экран. Вот как это сделать? Среда Квартус 10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

eval_spd=bus[10]; скорость

lcd_rs=bus[9]; команда/данные

lcd_rw=bus[8]; чтение-запись

lcd_db=bus[7:0]; данные

input enable; разрешение выполнения

output write_busy; ожидание конца операции

 

для записи данных на экран

rs=0

rw=0

данные на вход для записи

enable =1

ожидаем пока write_busy

И все сначала

А вообще то надо весь дизайн смотреть. Вы и там наверное засад понаделали :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×