LC Display Initialisierung (VHDL)

#1675948
Lesenswert?

Hallo erstmal,

ich muss eine "bibliothek" in vhdl schreiben, womit man LC Display 
ansteuern kann.

Mein LCD hat einen KS0070B controller.

Bei der Initialisierung muss man paar mal hintereinander bestimmte 
bitfolgen senden und zwischen durch warten....

das problem ist, dass ich keine ahnung habe wie ich die verzögerungen 
realisieren soll.... (hab mit addierer versucht, jedoch war das nicht so 
toll).

Irgendwie muss ich versuchen den ablauf so zu steuern, dass alles 
sequentiell abgearbeitet wird, mit verzögerungen.

hat jemand idee wie man sowas machen könnt. ??
#1678137
Lesenswert?

Danke... nach dem ich das thema eröffnet habe , hatte ich auch die 
idee...

Kann man das irgendwie optimieren ?
1
--Die feste zeiten hier beziehen sich auf CPLD quarz oszi
2
LIBRARY ieee ;
3
USE ieee.std_logic_1164.all;
4
use IEEE.STD_LOGIC_ARITH.ALL;
5
use IEEE.STD_LOGIC_UNSIGNED.ALL;
6

7
ENTITY test IS
8
  PORT(
9
    clk, reset :  in std_logic;
10
    init_fertig : out std_logic;
11
    init_out : out std_logic_vector(9 downto 0));
12
END test;
13

14
ARCHITECTURE struct of test is
15

16
--der flag wird auf 1 gesetzt wenn die zeit verstrichen wurde
17
signal delay_flag : std_logic;
18
--hier wird je nach anforderung die benötigte zeit vorgegeben
19
signal delay_time : std_logic_vector(10 downto 0):="00000000000";
20
--für delay...
21
signal count : std_logic_vector(10 downto 0):=(others=>'0');
22

23
--braucht man nicht unbedingt, ist für ausgang an LCD
24
signal sig_init_out : std_logic_vector(9 downto 0):="0000110000";
25

26
signal init_suc : std_logic:='0';
27

28
BEGIN
29
  init_out <= sig_init_out;
30
  init_fertig <= init_suc;
31
  
32
  process (clk,reset, init_suc)
33
  begin
34
    if (reset='0') then
35
      count <= (others=>'0');
36
    else
37
      if (clk'event and clk='1' and init_suc='0') then
38
          if (count = delay_time) then
39
            count <= (others=>'0');
40
            delay_flag <= '1';
41
          else
42
            count <= unsigned(count) + 1;
43
            delay_flag <= '0';
44
          end if;
45
      end if;
46
    end if;
47
  end process;
48

49
  process (delay_flag, reset)
50
    variable delay_nr : std_logic_vector(3 downto 0):=(others=>'0');
51
  begin
52
    if (reset='0') then
53
      init_suc <= '0';
54
      delay_nr := (others=>'0');
55
      sig_init_out <= "0000110000";
56
      delay_time <= "00000000000";
57
    else
58
      if (delay_flag = '1') then
59
        case delay_nr is
60
          when "0000" =>   sig_init_out <= "0000110000";
61
                  delay_time <= "10000000001"; --4.1ms
62
          when "0001" =>   sig_init_out <= "0000110000";
63
                  delay_time <= "00000011001"; --100us
64
          when "0010" =>   sig_init_out <= "0000110000";
65
                  delay_time <= "00000011001"; --100us hier muss man nicht warten, sicherheit
66
          when "0011" =>   sig_init_out <= "0000111000";-- 8bit 2 liens, 5x7 per dot
67
                  delay_time <= "00000001010"; --42us
68
          when "0100" =>   sig_init_out <= "0000001000";-- display off
69
                  delay_time <= "00000001010"; --42us
70
          when "0101" =>   sig_init_out <= "0000001000";-- display clear
71
                  delay_time <= "00110011010"; --1.64ms
72
          when "0110" =>   sig_init_out <= "0000000110";-- entry mode set, increase, display not shifted
73
                  delay_time <= "00000001010"; --42us
74
          --hier init fertig, aber ich schalte mal display an :-)
75
          when "0111" =>   sig_init_out <= "0000001111";-- display on, curser on, blink on
76
                  delay_time <= "00000001010"; --42us  
77
          when "1000" =>  init_suc <= '1';  
78
          when others => null;
79
        end case;
80
        delay_nr := unsigned(delay_nr)+1;
81
      end if;
82
    end if;
83
  end process;
84
  
85
end struct;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren