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

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

georgy31

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

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

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

Изменено пользователем georgy31

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


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

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

Изменено пользователем Zemlyanov

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


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

Да я в курсе по теории. Как это сделать на практике? Есть блок инициализации, туда заводятся 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 пользователей

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

×