UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G. CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1 Introducción Para poder utilizar una GLCD es de suma importancia conocer el funcionamiento de la misma, por lo cual fue necesario encontrar el datasheet de la GLCD “JHD12864”, posteriormente conocer la forma de inicializarla. Una vez inicializando la GLCD se pasa la imagen a resolución de 64x64 pixeles (los mismos que la GLCD), esto se hizo mediante un algoritmo en Matlab, en el cual ingresamos la imagen *.jpg y Matlab crea un documento con el nombre de logo.doc, en este documento se encuentran código de la imagen en hexadecimal para lo pixeles mencionados. Desarrollo Imagen utilizada: 1
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Introducción
Para poder utilizar una GLCD es de suma importancia conocer el funcionamiento de la misma, por lo cual fue necesario encontrar el datasheet de la GLCD “JHD12864”, posteriormente conocer la forma de inicializarla. Una vez inicializando la GLCD se pasa la imagen a resolución de 64x64 pixeles (los mismos que la GLCD), esto se hizo medianteun algoritmo en Matlab, en el cual ingresamos la imagen *.jpg yMatlab crea un documento con el nombre de logo.doc, en este documento se encuentran código de la imagen en hexadecimal para lo pixeles mencionados. Posteriormente se hace la implementación y adecuación del circuito y en la nexis2.
Desarrollo Imagen utilizada:
1
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Código desarrollado en Matlab para la conversión de la imagen a pixeles.
%Codificacion de imagen para GLCD clc,clear all,close all; imagen=imread('hives.jpg'); %Obtener imagenimagen=rgb2gray(imagen); %Pasar imagen a tonos de grisesimagen=im2bw(imagen,graythresh(imagen)); %Pasar imagen a blanco y negroimagen=imresize(imagen,[64 64]); %Pasar imagen a resolución de 64x64 pixeles (los mismos que la GLCD)imshow(imagen) %Mostrar imagen log=fopen('logo.doc','w'); %Crea o abre el archivo logo para guardar la secuencian=6; %n=contador de linea de impresionfor i=64:-1:1 %For 1, optiene el hexadecimal para la pagina 0 de GLCD a=imagen(1:8,i)'; %Guarda en a la columna i de la fila 1 a la fila 8 y la traspone b=int2str(a); %Convierte en string el vector a y lo guarda en b c=bin2dec(b); %Convierte b en decimal y lo guarda en c f1=dec2hex(c); %Convierte c en hexadecimal y lo guarda en f1 fprintf(log,'%i=>"10"&X"%s",\n',n,f1); %Imprime 'n=>"00"&X"fi",' en el archivo logo n=n+1;end fprintf(log,' %i=>"00"&X"BE",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 1 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 2, optiene el hexadecimal para la pagina 1 de GLCD
2
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
a=imagen(9:16,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"BD",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 2 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 3, optiene el hexadecimal para la pagina 2 de GLCD a=imagen(17:24,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"BC",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 3 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 4, optiene el hexadecimal para la pagina 3 de GLCD a=imagen(25:32,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c);
3
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"BB",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 4 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 5, optiene el hexadecimal para la pagina 4 de GLCD a=imagen(33:40,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"BA",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 5 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 6, optiene el hexadecimal para la pagina 5 de GLCD a=imagen(41:48,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"B9",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 6
4
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 7, optiene el hexadecimal para la pagina 6 de GLCD a=imagen(49:56,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fprintf(log,' %i=>"00"&X"B8",\n',n); %Imprime en logo.doc el comando para cambiar a pagina 7 n=n+1; fprintf(log,' %i=>"00"&X"40",\n',n); %Imprime comando para colocar cursor en fila 0 n=n+1; for i=64:-1:1 %For 8, optiene el hexadecimal para la pagina 7 de GLCD a=imagen(57:64,i)'; b=int2str(a); c=bin2dec(b); f1=dec2hex(c); fprintf(log,'%i=>"10"&X"%s",\n',n,f1); n=n+1;end fclose(log); n
5
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Ahora bien el resultado obtenido en matlab es:
Y se crea un documento con el codigo en hexadecimal, que se utiliza en el codigo VHDL.
6
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Código en VHDL para visualizar una imagen en una GLCD
L_DI:out STD_LOGIC:='0'; --Bit 1=DATA/0=CommandL_RW:out STD_LOGIC:='0'; --Bit 1=READ/0=WRITEL_E: out STD_LOGIC:='0'; --Bit ENABLE(flanco de bajada)L_DATA: out STD_LOGIC_VECTOR(7 downto 0); --Vector de datos para la GLCDL_CS1: out STD_LOGIC:='0'; --Chip select(izquierda),activado con 1L_CS2: out STD_LOGIC:='0'; --Chip select(derecha),activado con 1L_RST: out STD_LOGIC:='0'; --Reset GLCD(activo bajo)CLK: in STD_LOGIC; -- RELOJ A 50MHz
debug_led: inout std_logic:='1'; --LED para depuraciónRESET: in STD_LOGIC); --Reset externo BTN1
end GLCD_Driver;
architecture Behavioral of GLCD_Driver is
type glcd_machine is(retraso_arranque,config_del_display,idle);signal glcd_state: glcd_machine:=Retraso_Arranque; --Estado Inicialattribute fsm_encoding: string; --Codificación de los datos
7
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
--Codificación binaria al sintetizarattribute fsm_encoding of glcd_state: signal is "compact";
--Signalssignal glcd_data: std_logic_vector(9 downto 0):="00"&X"00";signal delay_count: std_logic_vector(20 downto 0):="0"&X"00000"; --Contador Generalsignal glcd_enable: std_logic:='0';signal x_pos: std_logic_vector(7 downto 0):=X"00"; --Número de página en Xsignal y_pos: std_logic_vector(7 downto 0):=X"00"; --Posición en el eje ysignal number: std_logic_vector(7 downto 0):=X"F0"; --Valor mostrado al limpiarsignal fin: std_logic:='0';signal CLKdiv: std_logic_vector(6 downto 0); -- divisor para una frecuencia de 1 MHz
--EDITARtype GLCD_Cmd_Table is array(integer range <>) of std_logic_vector(0 to 9);--bit 9 D/L, bit 8 RWconstant GLCD_Cmd:GLCD_Cmd_Table:=(0=>"00"&X"00",
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
520=>"10"&X"FE",521=>"10"&X"FF",522=>"10"&X"FF",523=>"10"&X"FF",524=>"10"&X"FF",525=>"10"&X"FD",526=>"10"&X"FD",527=>"10"&X"FF",528=>"10"&X"FF",529=>"10"&X"FF",530=>"10"&X"FE",531=>"10"&X"FB"); --Fin del código obtenido con el algoritmo de matlab
signal GLCD_Ptr: integer range 0 to GLCD_Cmd'HIGH:=0;
begin
PROCESS(CLK,RESET)begin
if(CLK'event and CLK='1') then -- Divisor para obtener una frecuencia de 1 MHzCLKdiv<=CLKdiv+1;
end if;
if(RESET='0')thenL_RST<='0'; --Resetear la GLCDglcd_state<=retraso_arranque;delay_count<=(others=>'0');GLCD_Ptr<=0;L_CS1<='0';L_CS2<='0';
26
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
elsif(CLKdiv(6)='1' and CLKdiv(6)'event)then -- a 1 Mhzcase glcd_state is
when retraso_arranque=>if(delay_count="0"&X"CFFFF")then
delay_count<="0"&X"00000";glcd_state<=config_del_display;L_RST<='1'; --Sacar al display del reset
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Codigo en UCF para direccionamiento de las salidas y entradas a la Nexis 2.
--Vector de datos para la GLCDnet "L_DATA(7)" loc = "M16"; --8vo dato de salida enviado a la Glcd por la nexis net "L_DATA(6)" loc = "M15"; --7mo dato de salida enviado a la Glcd por la nexisnet "L_DATA(5)" loc = "M14"; --6to dato de salida enviado a la Glcd por la nexisnet "L_DATA(4)" loc = "L17"; --5to dato de salida enviado a la Glcd por la nexisnet "L_DATA(3)" loc = "L16"; --4to dato de salida enviado a la Glcd por la nexisnet "L_DATA(2)" loc = "K12"; --3ro dato de salida enviado a la Glcd por la nexisnet "L_DATA(1)" loc = "K13"; --2do dato de salida enviado a la Glcd por la nexisnet "L_DATA(0)" loc = "L15"; --1er dato de salida enviado a la Glcd por la nexis
net "L_DI" loc = "G15"; --Bit 1=DATA/0=Commandnet "L_RW" loc = "J16"; --Bit 1=READ/0=WRITEnet "L_E" loc = "G13"; --Bit ENABLE(flanco de bajada)net "L_CS1" loc = "H16"; --Chip select(izquierda),activado con 1net "L_CS2" loc = "H15"; --Chip select(derecha),activado con 1net "L_RST" loc = "F14"; --Reset GLCD(activo bajo)
net "CLK" loc = "B8"; -- RELOJ A 50MHznet "debug_led" loc = "J14"; --LED para depuraciónnet "RESET" loc ="G18"; --Reset externo
29
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Diagrama proporcionado por el datasheet de la glcd
Diagrama esquematico de conexiones
30
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Resultados :
31
UPIITA-IPN Garduño Paita Ayrton Gerardo Vázquez Hernández Alba Elena Yasumura Melchor Takeo G.
CIRCUITOS LÓGICOS REPORTE “GLCD” EQUIPO : THE HIVES 5BM1
Conclusiones :
Garduño Paita Ayrton Gerardo:
Vázquez Hernández Alba Elena:
Es una buena experiencia haber trabajado con una GLCD ya que era un instrumento que no había utilizado y fue todo un reto personal, ademas de conocer como inicializarla, y poder auxiliarme del programa MATLAB para convertir a pixeles una imagen, claro el # de pixeles debía coincidir con los de la GLCD. Tmbien es importante considerar la atención para cablear ya que si no es muy complicado corroborar el buen funcionamiento.
Yasumura Melchor Takeo G.:
Bibliografía, Cibergrafía y referencias.*Datasheet GLCD JHD12864*Ejemplo proporcionado por el profesor Jaramillo.