ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2012/05/06
    27
    0

    کمک کمک (راه اندازي ال سي دي)

    با سلام خدمت همه دوستان عزيزم
    چجوري ميتونم ي ال سي دي کارکتري 16*2 را به صورت 4 بيتي راه اندازي کنم؟مشکلم قسمت فرستادن دستورات و داده ها هست،همشون 8 بيتي هستن چجوري بايد بفرستم؟اول 4 بيت با ارزش يا کم ارزش؟چجوري بينشون فاصله بندازم؟
    پيشاپيش از کمک دوستان متشکرم
    MRM
  2. #2
    2010/06/25
    تهران
    77
    0
    drg

    پاسخ : کمک کمک (راه اندازي ال سي دي)

    اگر خواستید میتونید از برنامه های آماده برای این کار استفاده کنید.
    اگر میخواهید خودتون راه اندازی کنید دیتاشیت LCD بایتسی Timing ارسال دیتا رو کامل گفته باشه.

    شما میتونید یک کد کامل برای راه اندازی ال سی دی 2در16 رو تو لینک زیر ببینید
    http://opencores.org/project,16x2_lcd_controller

    باز اگر مشکل خاصی دارید با جزئیات بیشتر توضیح بدید.
    یا علی.
  3. #3
    2012/10/11
    تهران
    134
    4

    پاسخ : کمک کمک (راه اندازي ال سي دي)

    سلام
    سوال من هم در اين مورده کسي سرس کد يا core براي کنترل

    1- lcd 3.2 in

    2-GLCD

    سراغ داره

    ممنونم
  4. #4
    2011/02/03
    172
    9

    پاسخ : کمک کمک (راه اندازي ال سي دي)

    نقل قول نوشته اصلی توسط MRM_ENG
    با سلام خدمت همه دوستان عزيزم
    چجوري ميتونم ي ال سي دي کارکتري 16*2 را به صورت 4 بيتي راه اندازي کنم؟مشکلم قسمت فرستادن دستورات و داده ها هست،همشون 8 بيتي هستن چجوري بايد بفرستم؟اول 4 بيت با ارزش يا کم ارزش؟چجوري بينشون فاصله بندازم؟
    پيشاپيش از کمک دوستان متشکرم

    فرق خاصی با مود 8 بیتی نداره.نکات و مراحلش هم این طوری هست:

    1- چون توی مد 4 بیت هستیم فقط از پایه های 4و5و6و7 دیتا استفاده میکنیم
    2- دستورات 8 بیتی داخل دیتا شیت رو باید 4 بیت 4 بیت روی پایه های دیتا قرار بدیم به این صورت که اول 4 بیت با ارزش بعد 4 بیت کم ارزش

    مثلا برای نشون دادن کارکتر A باید اول کد 0x20 بفرستیم. بعد کد 0xE0 رو بفرستیم و بعد با تغییر حالت rs از صفر به یک دیتا مون رو (در اینجا کارکتر A که به ASCII میشه 65 دسیمال) رو روی پورت دیتا قرار بدیم:
    1- RS=0 0x2
    2- RS=0 0x0
    3- RS=0 0xE
    4- RS=0 0x0
    5- RS=1 0x4
    6- RS=1 0x1

    به همین سادگی!
  5. #5
    2012/02/29
    401
    2

    پاسخ : کمک کمک (راه اندازي ال سي دي)

    سلام

    اين پيج هم به سادگي روش راه اندازيش رو ياد داده بايک FSM ساده

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  6. #6
    2010/07/30
    12
    0

    پاسخ : کمک کمک (راه اندازي ال سي دي)

    http://opencores.org/project,16x2_lcd_controllerمن ای لینکو بررسی کردم.........ولی .........درست نیست...نمی دونم...
    -------------------------------------------------------------------------------
    -- Title : 16x2 LCD controller
    -- Project :
    -------------------------------------------------------------------------------
    -- File : lcd16x2_ctrl.vhd
    -- Author : <stachelsau@T420>
    -- Company :
    -- Created : 2012-07-28
    -- Last update: 2012-11-28
    -- Platform :
    -- Standard : VHDL'93/02
    -------------------------------------------------------------------------------
    -- Description: The controller initializes the display when rst goes to '0'.
    -- After that it writes the contend of the input signals
    -- line1_buffer and line2_buffer continously to the display.
    -------------------------------------------------------------------------------
    -- Copyright (c) 2012
    -------------------------------------------------------------------------------
    -- Revisions :
    -- Date Version Author Description
    -- 2012-07-28 1.0 stachelsau Created
    -------------------------------------------------------------------------------

    library ieee;
    use ieee.std_logic_1164.all;

    entity lcd16x2_ctrl is

    generic (
    CLK_PERIOD_NS : positive := 20); -- 50MHz

    port (
    clk : in std_logic;
    rst : in std_logic;
    lcd_e : out std_logic;
    lcd_rs : out std_logic;
    lcd_rw : out std_logic;
    lcd_db : out std_logic_vector(7 downto 4);
    line1_buffer : in std_logic_vector(127 downto 0); -- 16x8bit
    line2_buffer : in std_logic_vector(127 downto 0));

    end entity lcd16x2_ctrl;

    architecture rtl of lcd16x2_ctrl is

    constant DELAY_15_MS : positive := 15 * 10**6 / CLK_PERIOD_NS + 1;
    constant DELAY_1640_US : positive := 1640 * 10**3 / CLK_PERIOD_NS + 1;
    constant DELAY_4100_US : positive := 4100 * 10**3 / CLK_PERIOD_NS + 1;
    constant DELAY_100_US : positive := 100 * 10**3 / CLK_PERIOD_NS + 1;
    constant DELAY_40_US : positive := 40 * 10**3 / CLK_PERIOD_NS + 1;

    constant DELAY_NIBBLE : positive := 10**3 / CLK_PERIOD_NS + 1;
    constant DELAY_LCD_E : positive := 230 / CLK_PERIOD_NS + 1;
    constant DELAY_SETUP_HOLD : positive := 40 / CLK_PERIOD_NS + 1;

    constant MAX_DELAY : positive := DELAY_15_MS;

    -- this record describes one write operation
    type op_t is record
    rs : std_logic;
    data : std_logic_vector(7 downto 0);
    delay_h : integer range 0 to MAX_DELAY;
    delay_l : integer range 0 to MAX_DELAY;
    end record op_t;
    constant default_op : op_t := (rs => '1', data => X"00", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US);
    constant op_select_line1 : op_t := (rs => '0', data => X"80", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US);
    constant op_select_line2 : op_t := (rs => '0', data => X"C0", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US);

    -- init + config operations:
    -- write 3 x 0x3 followed by 0x2
    -- function set command
    -- entry mode set command
    -- display on/off command
    -- clear display
    type config_ops_t is array(0 to 5) of op_t;
    constant config_ops : config_ops_t
    := (5 => (rs => '0', data => X"33", delay_h => DELAY_4100_US, delay_l => DELAY_100_US),
    4 => (rs => '0', data => X"32", delay_h => DELAY_40_US, delay_l => DELAY_40_US),
    3 => (rs => '0', data => X"28", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US),
    2 => (rs => '0', data => X"06", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US),
    1 => (rs => '0', data => X"0C", delay_h => DELAY_NIBBLE, delay_l => DELAY_40_US),
    0 => (rs => '0', data => X"01", delay_h => DELAY_NIBBLE, delay_l => DELAY_1640_US));

    signal this_op : op_t;

    type op_state_t is (IDLE,
    WAIT_SETUP_H,
    ENABLE_H,
    WAIT_HOLD_H,
    WAIT_DELAY_H,
    WAIT_SETUP_L,
    ENABLE_L,
    WAIT_HOLD_L,
    WAIT_DELAY_L,
    DONE);

    signal op_state : op_state_t := DONE;
    signal next_op_state : op_state_t;
    signal cnt : natural range 0 to MAX_DELAY;
    signal next_cnt : natural range 0 to MAX_DELAY;

    type state_t is (RESET,
    CONFIG,
    SELECT_LINE1,
    WRITE_LINE1,
    SELECT_LINE2,
    WRITE_LINE2);

    signal state : state_t := RESET;
    signal next_state : state_t;
    signal ptr : natural range 0 to 15 := 0;
    signal next_ptr : natural range 0 to 15;

    begin

    proc_state : process(state, op_state, ptr, line1_buffer, line2_buffer) is
    begin
    case state is
    when RESET =>
    this_op <= default_op;
    next_state <= CONFIG;
    next_ptr <= config_ops_t'high;

    when CONFIG =>
    this_op <= config_ops(ptr);
    next_ptr <= ptr;
    next_state <= CONFIG;
    if op_state = DONE then
    next_ptr <= ptr - 1;
    if ptr = 0 then
    next_state <= SELECT_LINE1;
    end if;
    end if;

    when SELECT_LINE1 =>
    this_op <= op_select_line1;
    next_ptr <= 15;
    if op_state = DONE then
    next_state <= WRITE_LINE1;
    else
    next_state <= SELECT_LINE1;
    end if;

    when WRITE_LINE1 =>
    this_op <= default_op;
    this_op.data <= line1_buffer(ptr*8 + 7 downto ptr*8);
    next_ptr <= ptr;
    next_state <= WRITE_LINE1;
    if op_state = DONE then
    next_ptr <= ptr - 1;
    if ptr = 0 then
    next_state <= SELECT_LINE2;
    end if;
    end if;

    when SELECT_LINE2 =>
    this_op <= op_select_line2;
    next_ptr <= 15;
    if op_state = DONE then
    next_state <= WRITE_LINE2;
    else
    next_state <= SELECT_LINE2;
    end if;

    when WRITE_LINE2 =>
    this_op <= default_op;
    this_op.data <= line2_buffer(ptr*8 + 7 downto ptr*8);
    next_ptr <= ptr;
    next_state <= WRITE_LINE2;
    if op_state = DONE then
    next_ptr <= ptr - 1;
    if ptr = 0 then
    next_state <= SELECT_LINE1;
    end if;
    end if;

    end case;
    end process proc_state;

    reg_state : process(clk)
    begin
    if rising_edge(clk) then
    if rst = '1' then
    state <= RESET;
    ptr <= 0;
    else
    state <= next_state;
    ptr <= next_ptr;
    end if;
    end if;
    end process reg_state;

    -- we never read from the lcd
    lcd_rw <= '0';

    proc_op_state : process(op_state, cnt, this_op) is
    begin
    case op_state is
    when IDLE =>
    lcd_db <= (others => '0'
    lcd_rs <= '0';
    lcd_e <= '0';
    next_op_state <= WAIT_SETUP_H;
    next_cnt <= DELAY_SETUP_HOLD;

    when WAIT_SETUP_H =>
    lcd_db <= this_op.data(7 downto 4);
    lcd_rs <= this_op.rs;
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= ENABLE_H;
    next_cnt <= DELAY_LCD_E;
    else
    next_op_state <= WAIT_SETUP_H;
    next_cnt <= cnt - 1;
    end if;

    when ENABLE_H =>
    lcd_db <= this_op.data(7 downto 4);
    lcd_rs <= this_op.rs;
    lcd_e <= '1';
    if cnt = 0 then
    next_op_state <= WAIT_HOLD_H;
    next_cnt <= DELAY_SETUP_HOLD;
    else
    next_op_state <= ENABLE_H;
    next_cnt <= cnt - 1;
    end if;

    when WAIT_HOLD_H =>
    lcd_db <= this_op.data(7 downto 4);
    lcd_rs <= this_op.rs;
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= WAIT_DELAY_H;
    next_cnt <= this_op.delay_h;
    else
    next_op_state <= WAIT_HOLD_H;
    next_cnt <= cnt - 1;
    end if;

    when WAIT_DELAY_H =>
    lcd_db <= (others => '0'
    lcd_rs <= '0';
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= WAIT_SETUP_L;
    next_cnt <= DELAY_SETUP_HOLD;
    else
    next_op_state <= WAIT_DELAY_H;
    next_cnt <= cnt - 1;
    end if;

    when WAIT_SETUP_L =>
    lcd_db <= this_op.data(3 downto 0);
    lcd_rs <= this_op.rs;
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= ENABLE_L;
    next_cnt <= DELAY_LCD_E;
    else
    next_op_state <= WAIT_SETUP_L;
    next_cnt <= cnt - 1;
    end if;

    when ENABLE_L =>
    lcd_db <= this_op.data(3 downto 0);
    lcd_rs <= this_op.rs;
    lcd_e <= '1';
    if cnt = 0 then
    next_op_state <= WAIT_HOLD_L;
    next_cnt <= DELAY_SETUP_HOLD;
    else
    next_op_state <= ENABLE_L;
    next_cnt <= cnt - 1;
    end if;

    when WAIT_HOLD_L =>
    lcd_db <= this_op.data(3 downto 0);
    lcd_rs <= this_op.rs;
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= WAIT_DELAY_L;
    next_cnt <= this_op.delay_l;
    else
    next_op_state <= WAIT_HOLD_L;
    next_cnt <= cnt - 1;
    end if;

    when WAIT_DELAY_L =>
    lcd_db <= (others => '0'
    lcd_rs <= '0';
    lcd_e <= '0';
    if cnt = 0 then
    next_op_state <= DONE;
    next_cnt <= 0;
    else
    next_op_state <= WAIT_DELAY_L;
    next_cnt <= cnt - 1;
    end if;

    when DONE =>
    lcd_db <= (others => '0'
    lcd_rs <= '0';
    lcd_e <= '0';
    next_op_state <= IDLE;
    next_cnt <= 0;

    end case;
    end process proc_op_state;

    reg_op_state : process (clk) is
    begin
    if rising_edge(clk) then
    if state = RESET then
    op_state <= IDLE;
    else
    op_state <= next_op_state;
    cnt <= next_cnt;
    end if;
    end if;
    end process reg_op_state;


    end architecture rtl;
نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. راه اندازي AVR
    توسط alifar در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2013/07/01, 17:29
  2. كمك در راه اندازي لود سل
    توسط rezarezaast در انجمن ابزار دقیق
    پاسخ: 6
    آخرين نوشته: 2011/08/29, 14:01
  3. كمك در راه اندازي لود سل
    توسط rezarezaast در انجمن ابزار دقیق
    پاسخ: 0
    آخرين نوشته: 2011/08/21, 08:38
  4. راه اندازي MMC
    توسط love_el52 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2009/09/28, 09:11
  5. راه اندازي lcd 4*16
    توسط SMf در انجمن برنامه نويسي و اينترفيس
    پاسخ: 1
    آخرين نوشته: 2008/10/18, 21:33

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •