Autor Tema: pantalla lcd ??????  (Leído 6239 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
pantalla lcd ??????
« en: 19 de Enero de 2006, 13:01:00 »
Alguien sabe controlar perfectamente la pantalla lcd, ??? poner cosas como Hola mundo o algo así ??? Gracias !!

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: pantalla lcd ??????
« Respuesta #1 en: 19 de Enero de 2006, 14:23:00 »
Hola ElRival, te a faltado poner un par de detalles, ejemplo:

Con que controlaras la pantalla.
Que lenguaje de programacion usas.
Que tipo de pantalla.
Etc.

Suerte

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: pantalla lcd ??????
« Respuesta #2 en: 19 de Enero de 2006, 18:11:00 »
En este hilo dejo el código el amigo micro_mon para controlar un LCD compatible con el  Hitachy  HD44780:

http://miarroba.com/foros/ver.php?foroid=169665&temaid=4306151.

No lo he probado pero supongo que funciona.

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: pantalla lcd ??????
« Respuesta #3 en: 24 de Enero de 2006, 08:43:00 »
Perdon !!! Bueno , el LCD es uno típico de 16x2 , y la fpga es una Spartan 3 de 200.000 puertas..... al final he conseguido que funcione algo pero no consigo controlar la posición del las letras ,por ejemplo , si quiero poner "hola mundo" ......

HHHHHHHH->OOOOOOOO->LLLLLLLL...........etc.... y lo que yo quiero es que en una línea me aparezca todo el mensaje, teneis idea de como controlar esto ???? o como hacer que los caracteres de la ram del lcd pasen de una dirección a otra ???

Gracias !!!

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: pantalla lcd ??????
« Respuesta #4 en: 24 de Enero de 2006, 12:55:00 »
Buenas.

Si has conseguido que te funcione algo, y tu problema es que cuando intentas escribir HOLA MUNDO te sale HHHHHHH..OOOOOO, etc, lo mejor que que pongas el código fuente VHDL para que pueda ver que esta fallando.

Vamos el fallo en este caso es que en vez de dar un pulso en la señal de enable estas danto varios con la misma letra y por eso se repite, pero mejor que pongas el código que tienes para ver como puedo ayudarte mejor.

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: pantalla lcd ??????
« Respuesta #5 en: 24 de Enero de 2006, 13:29:00 »
Os explico, lo he hecho por separado.......

EL primer fuente con todos los comportamientos de las entidades están aquí....



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


entity div25Mhz is             --divisor de 25Mhz !!
Port ( CLK : in std_logic;
       CLK1 : out std_logic);
end div25Mhz;

architecture Behavioral of div25Mhz is
begin
process (CLK)        
variable CUENTA:std_logic_vector(1 downto 0):="00";--
begin

     if clk"event and clk="1"then
          --if CUENTA=2 then    --CUANDO LLEGA UNA SEÑAL DE RELOJ
         if CUENTA=2 then       --VALE CUENTA 2?
       CLK1<="1";                --SÍ , DAMOS UN PULSO
       CUENTA:=(OTHERS=>"0");       --EMPEZAMOS OTRA VEZ
         else                  --NO, SIGUE EN CERO E INCREMENTAMOS 1
      CLK1<="0"       ;
          CUENTA:=CUENTA+ 1;
        end if;
   end if;
end process;
end Behavioral;
-----------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity divkhz is                        --Divisor de 250Khz
    Port ( clk : in std_logic;
           salida : out std_logic);
end divkhz;

architecture Behavioral of divkhz is

begin

PROCESS(clk)
variable tmp :std_logic_vector(7 downto 0 ):="00000000";
   BEGIN
      IF(clk"EVENT AND clk="1") THEN
         if tmp = 80 then
            tmp := (others =>"0");
            salida <= "1";
         else
            tmp := tmp+1;
            salida <= "0";
         end if;
      END IF;
   END PROCESS;
end Behavioral;
-------------------------------------------------------------------------


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

-- ------------------------------
    Entity LCD_DRV is
-- ------------------------------
  port( Clk  : in std_logic;                      -- System Clock
        Rst  : in std_logic;                      -- asynchronous Reset, active high

        Tick : in std_logic;                      -- Tick at 250 kHz (one clock cycle long)

        Din  : in std_logic_vector (7 downto 0);  -- Input data
        Dav  : in std_logic;                      -- Write Data command (1 clock cycle)

        Busy    : out   std_logic;                -- "1" if device busy

        -- LCD signals
        Dout    : inout std_logic_vector(7 downto 0); -- LCD data is a bidirectional bus...
        Lcd_Sel : out   std_logic;                -- LCD register select
        Lcd_Rw  : out   std_logic;                -- LCD Read / nWrite
        Lcd_En  : out   std_logic                 -- LCD Enable
        );
end LCD_DRV;


-- ------------------------------
    Architecture RTL of LCD_DRV is
-- ------------------------------

  type State_type is (Boot, Initial, Display, Entrymode, Clear,
                      Address_set, Waiting, Verify, Putchar, Homecursor);
  signal State : State_type;

  -- Function set for 8-bit data transfer and 2-line display
  constant SET   : std_logic_vector(7 downto 0) := "00111100";  -- 0011 N F xx

  -- Display ON, with cursor.**I set the last digit to one so the cursor does blink**
  constant DON   : std_logic_vector(7 downto 0) := "00001111";

  -- Set Entry Mode to increment cursor automatically after each character displayed.
  --**If the last digit is set to 1, then the whole display is shifted to the left.**
  constant SEM   : std_logic_vector(7 downto 0) := "00000110";

  -- Clear screen command.
  constant CLR   : std_logic_vector(7 downto 0) := "00000001";

  -- DD RAM address set
  constant DDRAS : std_logic_vector(7 downto 0) := "10000000";

  -- Home cursor
  constant HOME1 : std_logic_vector(7 downto 0) := "00000010"; -- set addr to Beg of line 1
  constant HOME2 : std_logic_vector(7 downto 0) := "11000000"; -- set addr to Beg of line 2

-- Timing Constants :

  constant Big_delay    : integer := 7500;  -- 30 ms
  constant Clr_delay    : integer := 500;   -- 2 ms
  constant Small_delay  : integer := 12;    -- > 39 us after E down
  constant En_delay     : integer := 2;
  constant LastPosition : integer := 16;

  signal DavM  : std_logic;
  SIGNAL Dav : std_logic;
  signal DataM : std_logic_vector (7 downto 0);
  signal Position : integer range 0 to 32;
  signal Count    : integer range 0 to Big_delay;

begin

  Lcd_Rw <= "0";                        -- always in Write mode...


  process (Clk, Rst)

  begin

    if Rst = "1" then
      State    <= Boot;
      Position <= 0;
      Count    <= 0;
      DavM     <= "0";
      Lcd_En   <= "0";
      Lcd_Sel  <= "1";
      Busy     <= "1";
      Dout     <= (others=>"0");

    elsif rising_edge(Clk) then

      if Dav = "1" then
      
        DavM  <= "1";
        DataM <= Din;
        Busy  <= "1";
      end if;

      if Tick = "1" then

        case State is

          when Boot =>                  -- Power up wait 30 ms
            Lcd_Sel  <= "1";
            Lcd_En   <= "0";
            Busy <= "1";
            if Count = Big_delay then
              Lcd_Sel <= "0";
              Count <= 0;
              State <= Initial;
            else
              Count <= Count + 1;
            end if;


          when Initial =>               -- Set Function & Mode
            Dout    <= SET;
            Lcd_Sel <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Small_delay then
              State <= EntryMode;
              Count <= 0;
            else
              Count <= Count+1;
            end if;


          when EntryMode =>             -- set Entry Mode,
            Dout    <= SEM;
            Lcd_Sel <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Small_delay then
              State <= Display;
              Count <= 0;
            else
              Count <= Count+1;
            end if;


          when Display =>               -- set Display ON
            Dout    <= DON;
            Lcd_Sel <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Small_delay then
              State <= Clear;
              Count <= 0;
            else
              Count <= Count+1;
            end if;

          when Clear =>                 -- Clear the screen
            Dout     <= CLR;
            Position <= 0;
            Lcd_Sel  <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Clr_delay then
              Count <= 0;
              State <= Address_set;
            else
              Count <= Count+1;
            end if;

          when Address_set =>           -- DD RAM address set
            Dout    <= DDRAS;
            Lcd_Sel <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Small_delay then
              State <= Waiting;
              Count <= 0;
            else
              Count <= Count+1;
            end if;

            
          when Waiting =>               -- Waits for input
            if DavM = "1" then
              DavM    <= "0";
              State   <= Verify;
              Lcd_Sel <= "1";
            else
              Busy <= "0";
            end if;

 
          when Verify =>
              if DataM = x"0C" then     -- FormFeed => Clear Screen
                State <= Clear;
              elsif Position = 16 then
                Dout     <= HOME2;
                State    <= HomeCursor;
              elsif Position = 32 then
                Position <= 0;
                Dout     <= HOME1;
               State    <= HomeCursor;
              else
                Dout  <= DataM;
                State <= Putchar;
              end if;

          when Putchar =>               -- Display the character on the LCD
            Lcd_Sel <= "1";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Small_delay then
              Position <= Position + 1;
              Count    <= 0;
              State    <= Waiting;
            else
              Count <= Count + 1;
            end if;

          when HomeCursor =>
            Lcd_Sel <= "0";
            if Count = 1 then
              Lcd_En <= "1";
            elsif Count = En_delay then
              Lcd_En <= "0";
            end if;
            if Count = Clr_delay then
              Dout  <= DataM;
              State <= Putchar;
              Count <= 0;
            else
              Count <= Count+1;
            end if;

        end case;
      end if;
    end if;
  end process;
end RTL;
----------------------------
--------------------------
---------------------------
-----------------------------

Aquí estaría el bloque con el que introduzco los datos.......






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


entity holamundo is
    Port ( busy : in std_logic;
           clk   :in std_logic;
           reset : in std_logic;
           Salida : out std_logic_vector(7 downto 0));
end holamundo;

architecture Behavioral of holamundo is
signal clk1: std_logic ;
signal letra: std_logic_vector(3 downto 0);
begin


process (CLK)
        
variable CUENTA:std_logic_vector(24 downto 0):="0000000000000000000000000";--VARIABLE PARA CONTAR HASTA 50 MILL
begin

     if clk"event and clk="1"then
          --if CUENTA=250 then    --CUANDO LLEGA UNA SEÑAL DE RELOJ
         if CUENTA=250 then       --VALE CUENTA 250?
       CLK1<="1";                --SÍ , DAMOS UN PULSO
       CUENTA:=(OTHERS=>"0");       --EMPEZAMOS OTRA VEZ
         else                  --NO, SIGUE EN CERO E INCREMENTAMOS 1
      CLK1<="0"       ;
          CUENTA:=CUENTA+ 1;
        end if;
   end if;
end process;



process (clk1)
begin
   if clk1"event and clk1="1" then
      if reset ="1" then
         letra <= (others=>"0");
          elsif letra =15 then
           
            letra <= (others=>"0");
          else
            letra <= letra + 1;
       end if;
   end if;
end process;

process (letra)
 begin
case letra is

when "0000" => salida<= "00100000";--espacio
when "0001" => salida<= "00100000";--espacio
when "0010" => salida<= "01001000"; -- H
when "0011" => salida<= "01001111"; -- O
when "0100" => salida<= "01001100"; -- L
when "0101" => salida<= "01000001"; -- A
when "0110" => salida<= "00100000";--espacio
when "0111" => salida<= "01001101"; -- M
when "1000" => salida<= "01010101"; -- U
when "1001" => salida<= "01001110"; -- N
when "1010" => salida<= "01000100"; -- D
when "1011" => salida<= "01001111"; -- O
when "1100" => salida<= "00100000";--espacio
when "1101" => salida<= "00100000";--espacio
when "1110" => salida<= "00100000";--espacio
when "1111" => salida<= "00100000";--espacio
when others => salida <=(others=>"0");
end case;
Dav <= "1";
end process;
end Behavioral;
--------------------------------------------------------------------------------
----------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------------------------------------------------------

Y finalmente la conexión entre los dos bloques.......






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

--use work.componentes.all;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity mapeado is

  port( Clk  : in std_logic;                      -- System Clock
        Rst  : in std_logic;                      -- asynchronous Reset, active high

        --Tick : in std_logic;                      -- Tick at 250 kHz (one clock cycle long)

       -- Din  : in std_logic_vector (7 downto 0);  -- Input data
        --Dav  : in std_logic;                      -- Write Data command (1 clock cycle)

        Busy    : out   std_logic;                -- "1" if device busy

        -- LCD signals
        Dout    : inout std_logic_vector(7 downto 0); -- LCD data is a bidirectional bus...
        Lcd_Sel : out   std_logic;                -- LCD register select
        Lcd_Rw  : out   std_logic;                -- LCD Read / nWrite
        Lcd_En  : out   std_logic                 -- LCD Enable
        );
end mapeado;

architecture Behavioral of mapeado is

SIGNAL CABLE1,CABLE2,CABLE4,CABLE5: std_logic ;
signal DAV: std_logic;
SIGNAL CABLE3: STD_LOGIC_VECTOR(7 DOWNTO 0);

COMPONENT div25Mhz
Port ( CLK : in std_logic;
       CLK1 : out std_logic);
end COMPONENT;
----------------------------------
COMPONENT divkhz
    Port ( clk : in std_logic;
           salida : out std_logic);
end COMPONENT;
----------------------------------
COMPONENT LCD_DRV
  port( Clk  : in std_logic;                      -- System Clock
        Rst  : in std_logic;                      -- asynchronous Reset, active high
        Tick : in std_logic;                      -- Tick at 250 kHz (one clock cycle long)
        Din  : in std_logic_vector (7 downto 0);  -- Input data
        Dav  : in std_logic;                      -- Write Data command (1 clock cycle)
        Busy    : out   std_logic;                -- "1" if device busy
        -- LCD signals
        Dout    : inout std_logic_vector(7 downto 0); -- LCD data is a bidirectional bus...
        Lcd_Sel : out   std_logic;                -- LCD register select
        Lcd_Rw  : out   std_logic;                -- LCD Read / nWrite
        Lcd_En  : out   std_logic                 -- LCD Enable
        );
end COMPONENT;
-------------------------------------
COMPONENT holamundo

    Port ( busy : in std_logic;
           clk   :in std_logic;
           reset : in std_logic;
           Salida : out std_logic_vector(7 downto 0));

END COMPONENT ;
--------------------------------------------------------
begin


dav<="1";

U1: div25mhz PORT MAP (CLK,cable1);
U2: divkhz   PORT MAP (cable1,cable2);
u3: lcd_drv  PORT MAP (CABLE1,CABLE5,CABLE2,CABLE3,DAV,CABLE4,DOUT,LCD_SEL,LCD_RW,LCD_EN);
U4: holamundo PORT MAP(CABLE4,CLK,CABLE5,CABLE3);
end Behavioral;
------------------------------------------------------------------
--------------------------------------------------------------------
----------------------------------------------------------------------


Gracias !!!!

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: pantalla lcd ??????
« Respuesta #6 en: 24 de Enero de 2006, 14:33:00 »
Bueno, pues he detectado 2 fallos:

El primero es que la señal dav esta siempre a "1". Con esta señal le dices al módulo LCD_DRV que escriba un byte en el lcd. al estar siempre a 1, el dato que haya en el bus de entrada siempre se cargará en el registro DataM,  con lo cual nunca dejas de escribir en el LCD. Tu sensación es la de llenarse la pantalla de H luego de O, y asi inifinito tiempo.

El módulo LCD_DRV está tan bien hecho, que tan sólo necesitas colocar el dato en el bus y activar la señal dav a "1", pero debes desactivarla inmediatamente. Esta señal no debe permanecer más de un System clock en estado alto, ya que de lo contrario, se puenden repetir las letras.

En resumen, dav debe ser controlada en el módulo holamundo y permanecer tan sólo un ciclo de reloj en estado alto.


El segundo fallo, es el modo en que incrementas el registro "letra" en el módulo holamundo. Utilizas un registro de cuenta, para incrementar la letra que quieres mostrar. Yo mejor utilizaba la señal de busy, que para eso esta.



De esta forma y agrupando los dos problemas en uno, yo haría una máquina de estados, con 4 estados:
1--> Espera a que busy valga cero.
2--> Activa dav
3--> Desactiva dav
4--> Incrementas el registro letra y saltas al estado 1

Con esta máquina de estados, tu LCD debe andar a las mil maravillas y el mensage que debes leer es el de HOLA MUNDO en ambas lineas.

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: pantalla lcd ??????
« Respuesta #7 en: 25 de Enero de 2006, 02:39:00 »
Muchas gracias Antonio !!!

Aunque ahora lo he hecho así , siguiendo tus indicaciones y tampoco funciona.....
este es el holamundo, y del LCD_DRV le he quitado que siempre esté a "1", y ahora ya no sale nada, se queda el cursor en la primera posicion parpadeando


-------------------------


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


entity holamundo is
    Port ( busy : in std_logic;               --   "1 si está en estado waiting
           clk   :in std_logic;
           reset : in std_logic;
           dav : out std_logic;
           Salida : out std_logic_vector(7 downto 0));
end holamundo;

architecture Behavioral of holamundo is
signal clk1: std_logic ;
signal letra: std_logic_vector(3 downto 0);

begin


process (CLK)
        
variable CUENTA:std_logic_vector(24 downto 0):="0000000000000000000000000";--VARIABLE PARA CONTAR HASTA 50 MILL
begin

     if clk"event and clk="1"then
          --if CUENTA=2 then    --CUANDO LLEGA UNA SEÑAL DE RELOJ
         if CUENTA=7 then       --VALE CUENTA 2?
       CLK1<="1";                --SÍ , DAMOS UN PULSO
       CUENTA:=(OTHERS=>"0");       --EMPEZAMOS OTRA VEZ
         else                  --NO, SIGUE EN CERO E INCREMENTAMOS 1
      CLK1<="0"       ;
          CUENTA:=CUENTA+ 1;
        end if;
   end if;
end process;

 ---------

--process (clk1)

--begin
--   if clk1"event and clk1="1" then
--      if reset ="1" then
  --       letra <= (others=>"0");
    --      elsif letra =10 then
      --     
--            letra <= (others=>"0");
--        else
--            letra <= letra + 1;
--       end if;
--   end if;
--end process;

process (busy)
 begin

  IF(clk"event and clk="1"and busy="0") THEN
salida<= "01001000"; -- H
dav<="1"   ;
dav<="0"   ;
 salida<= "01001111"; -- O
dav<="1"   ;
dav<="0"   ;
 salida<= "01001100"; -- L
dav<="1"   ;
dav<="0"   ;
 salida<= "01000001"; -- A
dav<="1"   ;
dav<="0"   ;
 salida<= "00100000";--espacio
dav<="1"   ;
dav<="0"   ;
 salida<= "01001101"; -- M
dav<="1"   ;
dav<="0"   ;
 salida<= "01010101"; -- U
dav<="1"   ;
dav<="0"   ;
 salida<= "01001110"; -- N
dav<="1"   ;
dav<="0"   ;
 salida<= "01000100"; -- D
dav<="1"   ;
dav<="0"   ;
 salida<= "01001111"; -- O
dav<="1"   ;
dav<="0"   ;
 salida<= "00100000";--espacio
dav<="1"   ;
dav<="0"   ;
end if ;
end process;
end Behavioral;

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: pantalla lcd ??????
« Respuesta #8 en: 25 de Enero de 2006, 06:07:00 »
Puede ser que no lleve bien los tiempos ?

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: pantalla lcd ??????
« Respuesta #9 en: 25 de Enero de 2006, 18:14:00 »
Lo que quería explicarte era más sencillo:

Codigo:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity holamundo is
Port ( busy : in std_logic;
       clk :in std_logic;
       reset : in std_logic;
       salida : out std_logic_vector(7 downto 0);
       dav : out std_logic);
end entity holamundo;

architecture Behavioral of holamundo is
signal letra: std_logic_vector(3 downto 0);
signal estado : std_logic_vector(3 downto 0);
begin


process (clk, reset) begin
if(reset = "1") then
  estado <= (others => "0");
  dav <="0";
elsif(clk"event and clk="1")then
  if(estado = X"0"Giño then
    if(busy = "0") then
      dav <= "1";
      estado <= X"1";
    end if;
  elsif(estado=X"1"Giñothen
    dav <= "0";
    estado <= X"2";
  elsif(estado=X"2"Giñothen
    letra <= letra + "1";
    estado <= X"0";
  end if;
end if;
end process;

process (letra) begin
case letra is
  when "0000" => salida<= "00100000";--espacio
  when "0001" => salida<= "00100000";--espacio
  when "0010" => salida<= "01001000"; -- H
  when "0011" => salida<= "01001111"; -- O
  when "0100" => salida<= "01001100"; -- L
  when "0101" => salida<= "01000001"; -- A
  when "0110" => salida<= "00100000";--espacio
  when "0111" => salida<= "01001101"; -- M
  when "1000" => salida<= "01010101"; -- U
  when "1001" => salida<= "01001110"; -- N
  when "1010" => salida<= "01000100"; -- D
  when "1011" => salida<= "01001111"; -- O
  when "1100" => salida<= "00100000";--espacio
  when "1101" => salida<= "00100000";--espacio
  when "1110" => salida<= "00100000";--espacio
  when "1111" => salida<= "00100000";--espacio
  when others => salida <=(others=>"0");
end case;
end process;
end Behavioral;


Prueba a ver si funciona

Desconectado ElRival

  • PIC10
  • *
  • Mensajes: 16
RE: pantalla lcd ??????
« Respuesta #10 en: 26 de Enero de 2006, 03:58:00 »
Muchisiisisisisisisisismas gracias !!!! ya funciona oeoeoeoeoeoeoeoeoe,

Desconectado juankho

  • PIC10
  • *
  • Mensajes: 12
Re: pantalla lcd ??????
« Respuesta #11 en: 26 de Agosto de 2009, 18:16:52 »
compañeros he tratado de ejecutar el codigo anterior  pero me sale un sin numero de errores... alguien me puede facilitar el codigo fuente...

Desconectado arlex

  • PIC10
  • *
  • Mensajes: 49
Re: pantalla lcd ??????
« Respuesta #12 en: 12 de Octubre de 2009, 16:17:41 »
hola amigos, tengo algunas preguntas sobre el codigo que dejo el amigo antoniof,
primero: cual es la fracuancia de reloj que esta usando?
segundo:  los pines rs, rw y enable del lcd a donde van conectados?
gracias.