저렴한 FPGA 평가 보드로 저렴한 LCD [1602A] 제어

13981 단어 FPGAlcdquartusVHDL

1. 소개



마지막 기사 에서 소개한 저렴한 중화제 FPGA 평가 보드를 사용해, 이번은 전자 공작으로 친숙한 이 LCD(Liquid Crystal Display)를 제어해 보겠습니다. 형번은【1602A】라고 하는 것 같습니다. 평소라면 Arduino등의 개발 환경에서 전용 라이브러리를 도입하는 것만으로 간단하게 취급할 수 있던 이 LCD를, 조금 까다롭습니다만, 트레이닝을 위해 FPGA 베이스로 구동시켜 보는 것이 이번의 목적입니다. (LCD는 아마존 에서 싸게 살 수 있습니다. Aliexpress 그렇다면 더 싸지만 도착하는 데 시간이 걸립니다)



2. LCD【1602 A】의 사양



일단, LCD의 대략적인 사양을 알고 싶다....... 그래서 데이터 시트를 찾는 것은 당연히 있었습니다! 적절하게 다운로드 하십시오. 세세한 영문자가 눈에 치카치카합니다만, 필요한 부분만 주워 읽는 느낌으로 천천히 갑니다.
LCD의 신호선(핀)은 모두 16개 있습니다. 다운로드 대상 데이터 시트에서 원본 핀 할당 그림이 아래에 나와 있습니다.


보시다시피, No.7~14의 8개의 핀(DB0~DB7)은 8bit분의 데이터를 받기 위한 데이터 버스로 되어 있습니다. 즉, 표시하고 싶은 문자(캐릭터)의 8bit ASCII 코드를, 제어측(이번에서는 FPGA 보드)이, 제어 대상인 LCD측에 신호로서 보내는 것으로 문자의 표시를 제어할 수 있는 구조입니다.
 LCD에는 핀 헤더를 납땜하고 있습니다. 이를 암-암 점퍼 와이어로 FPGA 보드의 핀 헤더와 연결하여 이번 실험의 회로를 구성합니다.


3. FPGA의 핀 할당 회로 구성



전원 주위의 Vss, Vdd, Vo, BLA, BLK를 제외한 LCD의 모든 핀(제어용 신호선)을 각각 아래와 같이 VHDL로 기술해 정의했습니다.
· RS ---> "lcd_rs"
 ・R/W ---> "lcd_rw"
 ・E ---> "lcd_e"
 ・DB0~DB7 ---> "data[0]~data[7]"
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity lcdtest is
port ( clk    : in std_logic;                            --clock i/p
       lcd_rw : out std_logic;                           --read & write control
       lcd_e  : out std_logic;                           --enable control
       lcd_rs : out std_logic;                           --data or command control
       data   : out std_logic_vector(7 downto 0)  );     --data line
end lcdtest;

FPGA의 핀 어사인은 그림의 빨간색 테두리에 나타낸 대로입니다(이대로가 아니어도 적절하게 설정하면 움직입니다만, 일례로서 올려 둡니다). 또한, FPGA 보드에 미리 실려 있는 수정?진동기(50MHz)를 클럭 입력으로 사용하므로, .

이번에 사용할 FPGA 보드 회로도 사양

  이하가 회로도입니다. 가 참고가 되었습니다. 일부 발췌하여 여기에 올립니다.
 설정한 핀 할당과 실제 배선이 일치하도록 합니다. 이 회로도에 따라 LCD 백라이트 조정을 위한 가변 저항을 별도의 브레드보드에 구성했습니다.
이 LCD【1602A】는 +5V 구동이므로, FPGA 보드의 Vcc=+3.3V와는 레벨이 다른 점에 주의해 주세요. 일단 1 시간 정도 빠졌습니다). 별도 +5V의 전원(직렬한 건전지 등)으로 대응하는 것이 손쉽게 빠르고 좋을까 생각합니다.

이 사이트

4. LCD에 "Hello!"라고 표시하는 테스트 VHDL 코드(전문)



lcdtest.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity lcdtest is
port ( clk    : in std_logic;                          --clock i/p
       lcd_rw : out std_logic;                         --read & write control
       lcd_e  : out std_logic;                         --enable control
       lcd_rs : out std_logic;                         --data or command control
       data   : out std_logic_vector(7 downto 0));     --data line
end lcdtest;

architecture Behavioral of lcdtest is 
constant N: integer :=5+7; 
type arr is array (1 to N) of std_logic_vector(7 downto 0); 
constant datas : arr := (x"38",x"0c",x"04",x"01",x"C0",  x"48",x"65",x"6C",x"6C",x"6F",x"21",x"20");


begin
lcd_rw <= '0'; 
process(clk)
    variable i : integer := 0;
    variable j : integer := 1;

    begin
    if ( clk'event and clk = '1' ) then
        if i <= 1000000 then
            i := i + 1;
            lcd_e <= '1';
            data <= datas(j)(7 downto 0);
        elsif 1000000 < i and i < 2000000 then
            i := i + 1;
            lcd_e <= '0';
        elsif i = 2000000 then
            j := j + 1;
            i := 0;
        end if;

        if j <= 5  then
            lcd_rs <= '0';
        elsif j > 5   then
            lcd_rs <= '1';
        end if;

        if j = 5+7 then 
            j := 5;
        end if;

    end if;

end process;
end Behavioral;

x"48",x"65",x"6C",x"6C",x"6F",x"21",x"20"의 16진 표기의 배열로,
"H", "e", "l", "l", "o", "!", ""의 총 7자를 나타냅니다.

5. 실험 결과




문자열 "Hello!"가 FPGA에 의해 저가 LCD에 표시됩니다! ! 완료입니다!

6. 정리



저렴한 FPGA 평가 보드를 사용하여 저렴한 LCD를 도입 할 수있었습니다.
향후는 보다 실천적인 내용으로 공부하면서 기사를 써 가고 싶습니다.

좋은 웹페이지 즐겨찾기