30
Este documento esta elaborado con la finalidad de proporcionar ayuda en el uso de el display: DG-16080-11 (display grafico de 160x80 puntos). Recomendamos abrir este texto con el block de notas y maximizar la ventana. Este texto se ira modificando y ampliando en funcion de las dudas que Uds nos hagan saber, con el proposito de compartir dicha informacion ya que tambien puede ser util para otros. Este texto se llamara en adelante: AYUDA+ddmmaa.TXT (ultima fecha de actualizacion) Descarga el siguiente archivo: DG-16080-11.PDF, este manual contiene los datos técnicos de el display asi como las instrucciones para controlarlo. Agradezco de antemano sus dudas y comentarios a nuestro mail: [email protected] En el Demo que esta en las tiendas donde se venda el display, se uso un PIC16F54 con el objeto de demostrar que este Display puede ser usado con un chip sumamente básico. Sin embargo puedes conectarlo y usarlo con otro microcontrolador, tan avanzado como lo requieras o de otros fabricantes. Los datos fueron almacenados en una memoria 24LC256 para darle capacidad y poder poner todos los graficos y texto que estan en el demo. El uso de una memoria externa es opcional, aqui no explicamos su uso, solo nos concentraremos en el display. Las conexiones quedaron como sigue: PINOUT CONEXION DISPLAY DEMO 1.Vss GND 0V 2.Vcc vCC 5V 3.Vadj pot 10k ver manual

Ayuda en El Uso de El Display

Embed Size (px)

Citation preview

Page 1: Ayuda en El Uso de El Display

Este documento esta elaborado con la finalidad de proporcionar ayuda en el uso de el display: DG-16080-11 (display grafico de 160x80 puntos).

Recomendamos abrir este texto con el block de notas y maximizar la ventana.

Este texto se ira modificando y ampliando en funcion de las dudas que Uds nos hagan saber, con el proposito de compartir dicha informacion ya que tambien puede ser util para otros.

Este texto se llamara en adelante: AYUDA+ddmmaa.TXT (ultima fecha de actualizacion)

Descarga el siguiente archivo: DG-16080-11.PDF, este manual contiene los datos técnicos de el display asi como las instrucciones para controlarlo.

Agradezco de antemano sus dudas y comentarios a nuestro mail: [email protected]

En el Demo que esta en las tiendas donde se venda el display, se uso un PIC16F54 con el objeto de demostrar que este Display puede ser usado con un chip sumamente básico.

Sin embargo puedes conectarlo y usarlo con otro microcontrolador, tan avanzado como lo requieras o de otros fabricantes.

Los datos fueron almacenados en una memoria 24LC256 para darle capacidad y poder poner todos los graficos y texto que estan en el demo.

El uso de una memoria externa es opcional, aqui no explicamos su uso, solo nos concentraremos en el display.

Las conexiones quedaron como sigue:

PINOUT CONEXION DISPLAY DEMO 1.Vss GND 0V 2.Vcc vCC 5V 3.Vadj pot 10k ver manual 4.RS RA2 (PIC) 5.R/W GND 6.E RA3 (PIC) 7.D0 RB0 (PIC) 8.D1 RB1 (PIC) 9.D2 RB2 (PIC) 10.D3 RB3 (PIC) 11.D4 RB4 (PIC) 12.D5 RB5 (PIC) 13.D6 RB6 (PIC)

Page 2: Ayuda en El Uso de El Display

14.D7 RB7 (PIC) 15./CS GND 16./RST al Vcc atravez de un resistor de 10k 17.Vlcd pot 10k ver manual 18.Dsp OFF No Conectar 19.EL alimentacion para el Backlight 20.EL Electroluminiscente

El esquema queda asi:

24LC256 PIC Display ----- ----------- ---------- +5v| | | | | | || SDA|----|RA0 RB0 |-------|D0 Vcc|---|| SCL|----|RA1 RB1 |-------|D1 | \| | | RB2 |-------|D2 | / ----- | RB3 |-------|D3 Vadj|-->\ 10K <= OJO: ver la nota al final del texto en el circuito demo | RB4 |-------|D4 | / | RB5 |-------|D5 Vlcd|---| | RB6 |-------|D6 | | RB7 |-------|D7 | | | | | | | | | | RA2 |-------|RS | | RA3 |-------|E CS |---| | | | R/W|---| | | |--|Res Vss|---| ----------- | ---------- | | EL| |EL | +5v <--10K--| | | GND | | ----- | | | |INV-TH-203(2) | | ----- En esta configuracion las terminales R/W,/CS, se conectaron a 0v dejando unicamente Rs y E para controlarlo.

OJO: El display tiene una bandera de espera (manual pag 13 y 14) la cual tiene que ser leiday comprobada antes de enviar el siguiente dato. para facilitar el aprendizaje nos la hemos saltado temporalmente evitando la lectura hacia el display y la rutina de comprobacion, etc. con la siguiente condicion: el oscilador del micro lo tienes que poner a velocidades bajas o bien en tu programa colocar ciclos de tiempo de espera.

Comprueba los tiempos de las instrucciones (ciclo interno) y de tu programa con los del display (ver manual) el procesador no tiene que rebasarlos de lo contrario se perderian datos durante la comunicacion del uC al display.

Page 3: Ayuda en El Uso de El Display

Ya comprobamos que si funciona puesto que asi trabaja el demo que esta en las tiendas donde se venden estos displays.(con un cristal de 4MHz)

Es por eso que la terminal R/W de el display la mandamos a 0v porque solo realizamos ciclosde escritura utilizando unicamente la terminal E:

RS=1: instruccion RS=0: datos

E : habilita la funcion write durante la transicion de 1 a 0 (ver manual) Aqui se observa que para lograr comunicacion con el display solo tenemos que indicar si vamos a enviar una instruccion o un dato (RS), luego poner el dato en D(0-7), y despues generar la transicion de 1 a 0 en (E), para que el display acepte la informacion, asi por cada dato o inst. que enviemos.

Una vez conectado realiza un programa en C o en el lenguaje que uses y con el que estes familiarizado, para el chip que vayas a usar.

Genera dos tablas de datos una de ellas sera la inicializacion de el DISPLAY y en la otra los datos que quieras que aparezcan en el:

para iniciarlo en modo caracteres: 20char x 10 renglones (200chrs) la configuracion es:

tabla1= 00,38,01,77,02,13,03,4F,04,07,08,00,09,00,0A,00,0B,00,0C

datosTABLA1 RS Descripcion

00 1 INST: MODE CONTROL 38 0 Set: Dsp on,Master,cursor ON char BLink,Mode CHAR,Built-in ROM CHAR

01 1 INST: CHARACTER PITCH (-1) 77 0 set: 8 bits vertical CHAR, 8 bits horizontal x CHR => 20 chr x 10 rngl

02 1 INST: NUM CHAR (-1) 13 0 set: 20 char horizontalmente

03 1 INST: DISPLAY DUTY (-1) 4F 0 Set: 80 (valor de puntos verticalmente)

04 1 INST: CURSOR POsITION (-1) 07 0 Set: en el bit 8 (vertical)

08 1 INST: DSP START ADD LOWER 00 0 Set: posicion 0

09 1 INST: DSP START ADD UPPER 00 0 Set: posicion 0

Page 4: Ayuda en El Uso de El Display

0A 1 INST: RAM ADD LOWER 00 0 Set: posicion 0

0B 1 INST: RAM ADD UPPER 00 0 Set: posicion 0

0C 1 INST: WRITE DATA TO RAM

Recuerda que los datos (SET) Estan menos UNO despues de cada instruccion señalada con (-1).

La secuencia es: coloca RS=1 y E=1,luego lee un dato de la TABLA1(8bits) y mandala al puerto (en el demo PIC-Puerto B) enseguida coloca E=0. En este momento el display recibe la instruccion.

Luego coloca RS=0 y E=1 manda el siguiente dato de la TABLA1 al puerto y luego coloca E=0, eneste instante el display recibe el SET para la instruccion anterior.

Asi hasta terminar la primer tabla de datos, se observa que la instruccion WRITE DATA es la ultima,posteriormente coloca RS=0 y envia tu segunda tabla de datos sin modificar RS ya que apartir de aqui los datos entran en forma secuencial para llenar el display.

La secuencia para la segunda tabla seria: ( E=1, Dato al display via puerto(PB), E=0)asi consecutivamente hasta terminar la tabla.

recuerda no usar una misma instruccion en tu programa del uC, para los procesos de la secuencias esto con el proposito de generar los tiempos hacia el display y de ser necesario incluye alguna rutina de retardoentre las transiciones de E.

En el demo no se usaron rutinas de retardo ya que las instrucciones para leer la memoria nos proporcionan dichos tiempos.

La segunda tabla seria por ejemplo:

datosTABLA2 RS Descripcion

50 0 "P" 52 0 "R" 55 0 "U" 45 0 "E" 42 0 "B" 41 0 "A"

Entonces las secuencias quedarian como sigue:(no usamos un lenguaje de programacion en especifico, intentando sea lo mas generico posible,para que puedan usarlo con el micro que deseen y del fabricante que sea)

Page 5: Ayuda en El Uso de El Display

tabla1= 00,38,01,77,02,13,03,4F,04,07,08,00,09,00,0A,00,0B,00,0C

tabla2= 50,52,55,45,42,41

pone RS=0 variable X=13h (19 datos de la primer tabla)

ciclo1 pone RS=RS xor 1 (*) Pone E=1 Lee dato de TABLA1 manda dato al puerto (display) pone E=0 rutina de retardo (opcional) decrementa en uno a variable X si variable X es diferente de cero regresa a ciclo1

pone RS=0 variable X=06h (6 datos de la segunda tabla)

ciclo2 pone E=1 Lee dato de TABLA2 manda dato al puerto (display) pone E=0 rutina de retardo (opcional) decrementa en uno a variable X si variable X es diferente de cero regresa a ciclo2

FIN de secuencias

(*) aqui tienes que ejecutar una funcion XOr entre el valor de el bit que hayas designado para RSy "1", Ej: RS = Ra2(pic) entonces Ra2=Ra2 [XOR] 04h (0000 0100).esto hará que el valor se invierta en forma alternada y nos de los valores para (RS) conformea la primer tabla, observa que se ha iniciado RS=0 para que en el primer ciclo esta se conviertaen "1" para la primer instruccion, posteriormente cambiara su valor alternando 0,1,0,1,etc.En el ciclo2 RS no cambia su valor de CERO ya que solo mandaremos DATOS al display.

Si has tenido exito estaras viendo en el Display: PRUEBA, junto con muchos caracteres basura queestan en la memoria de el display.

tienes que lograr comunicacion con el display, antes de continuar conlos siguientes ejemplos.

Al final de este documento he agregado un ejemplo para PIC en ensamblador.

Pueden usarlo practicamente en cualquier pic solo tienen que agregar la inicializacion de los puertos,

Page 6: Ayuda en El Uso de El Display

este ejemplo ya fue checado en un circuito de prueba, el cual esta trabajando con el oscilador interno a 4Mhzy sin tiempos de retardo, pueden copiar el texto al MPLAB, agragarle la configuracion de puertos y ensamblarlo

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

El Display no posee instruccion alguna para borrar el contenido de la memoria RAM por lo que despues del ciclo de inicializacion apareceran caracteres basura. por lo tanto habra que realizar un ciclo de borrado (clear screen):

--------- este ciclo va despues de la inicializacion TABLA1

variable X=C8h (200 caracteres) ciclo3 pone E=1 manda 00 al puerto (display) pone E=0 rutina de tiempo decrementa en uno variable X si variable X es diferente de cero regresa a ciclo3 ** pone RS=1 pone E=1 manda 0A al puerto (instruccion RAM ADD LOWER) pone E=0 pone RS=0 pone E=1 manda XX al puerto (direccion 00 a C7) pone E=0 pone RS=0 ------- aqui continua el ciclo2 que envia la TABLA2 al display

** Recuerda que al terminar la rutina de borrado, el apuntador interno de la memoria de el display estara en 00C8 el cual señala una posicion de RAM fuera de el display, tienes que volver a mandar el SET para la instruccion: RAM ADD lower y upper (instrucciones 8 y 9 en el manual) y juntas (16bits) forman la direccion para escribir en la memoria RAM destinada al display:

En el ejemplo configuramos el display a 20x10 caracteres, quedando las direcciones(16bits) de memoria de la siguiente manera (hexadecimal):

0000 0001 0002 0003 0004 0005 0006 ...... 0013 <--- 20 caracteres renglon 1 0014 0015 0016 0017 0018 0019 001A ...... 0027 <--- 20 caracteres renglon 2 -------

Page 7: Ayuda en El Uso de El Display

------- ------- 00B4 00B5 00B6 00B7 00B8 00B9 00BA ...... 00C7 <--- 20 caracteres renglon 10

Se observa que los 8 bits de la izq (RAM ADD upper) siempre estan en cero, por lo que en modo texto no es necesario modificar este registro.

Entonces si quieres "escribir" en el display desde el principio (angulo superior izq) solamente tienes que mandar el set para RAM ADD LOWER = cero.

O si lo prefieres puedes ponerlo en cualquier valor de 00h a C7h. esto seria como un (goto) Ej: si quieres poner "PRUEBA" al centro (aprox) de la pantalla el valor para LOWER seria 56h. esto pondria el apuntador en el 5o renglon y en la columna 8 entonces la palabra "PRUEBA" queda centrada. De esta manera indicas donde vas a empezar a "escribir" en la pantalla.

En el modo grafico es lo mismo pero serian 1600 bytes (20 bytes x 80 renglones), los que ocupa el display de RAM, entonces se tienen que modificar los 16 bits de direccion: upper y lower.

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

MODO GRAFICO

Para configurarlo en forma grafica solo cambia el SET de la primera instruccion a (32H) y usa el resto de la configuracion tal cual.

00 INST: MODE CONTROL 32 <-- SET para modo grafico 01 77 02 13 -- -- etc.

la segunda tabla contendra entonces los datos bit a bit para el displayRecuerda que el llenado en forma grafica es horizontal de IZQ a DER de ARRIBA a ABAJO,Entonces inicia en el angulo superior izquierdo.

Byte Byte Byte Byte <--- 20bytes x 8 bits = 160 puntos

Page 8: Ayuda en El Uso de El Display

1 2 3 20

01234567 01234567 01234567 ............ 01234567 <--- renglon 1 01234567 01234567 01234567 ............ 01234567 <--- renglon 2 01234567 01234567 01234567 ............ 01234567 <--- renglon 3 01234567 01234567 01234567 ............ 01234567 <--- renglon 4 01234567 01234567 01234567 ............ 01234567 <--- renglon 5 ---------- ---------- ---------- 01234567 01234567 01234567 ............ 01234567 <--- renglon 80 Como crear imagenes para el modo grafico:

Gracias al valioso aporte de un buen electrónico y lector de este texto, incluimos la siguiente liga: (http://bitmap2lcd.com/pages/download.html) este programa es una excelente herramienta para la creacion de imagenes para LCD

De todas formas dejo el texto que se habia escrito originalmente para aquellos que les gusta experimentar:

Para editar las imagenes de una forma "rapida" he utilizado el programa PAINT de Windows: Ir al menu IMAGEN y dentro de el a ATRIBUTOS se abrira una pequeña ventana, modifiquen el ancho a: 160 y el alto a: 80, ahi mismo seleccionen PIXELES y BLANCO Y NEGRO.

De esta forma tendran ya la plantilla de 160x80 a un bit por "pixel" (B/N).

A partir de aqui pueden escribir (modifiquen el tamaño y tipo de letra adecuado a la plantilla) copiar alguna imagen o dibujo, solo recuerden que debe ser en ByN y que no se salga de la plantilla sino recortenlo.

Pueden trabajar primero en las imagenes por separado. mas adelante explico como editar, fotos, etc.

si quieren dibujar punto a punto denle al zoom personalizado y selecccionen 600% y ahi mismo en ZOOM seleccionen MOSTRAR CUADRICULA, de esta forma es mas facil trabajar.

una vez terminado denle en IMAGEN -> VOLTEAR/GIRAR -> VOLTEAR VERTICALMENTE; Nuestra imagen esta ahora de cabeza, luego denle nuevamente en IMAGEN -> INVERTIR COLORES; Nuestra imagen queda como un negativo y asi la almacenamos con el nombre que sea.BMP Nota: durante la edicion puede cambiar de B/N a colores sin darnos cuenta, asegurense de que su dibujo este en B/N antes de almacenarlo.

Posteriormente necesitamos quitarle el encabezado BMP y hacer una conversion de bytes para generar el archivo .bin con los datos de nuestro dibujo, como no he encontrado ningun programa que haga eso, modifique un programa viejito que habia hecho en pascal para hacer esa

Page 9: Ayuda en El Uso de El Display

tarea el cual lo encuentran en la pagina como "bmp2bin.ZIP" este corre en DOS pero no se preocupen windows lo reconoce, asi que funciona de la siguiente manera:

El programa debe estar en la misma carpeta donde esta su dibujo.BMP El nombre que le den a su dibujo no debe ser mayor de ocho caracteres (por el formato viejito) con el explorador de windows pueden ejecutar el programa o bien crear un acceso directo. (no es necesario ir a DOS) una vez puesto en marcha el programa pregunta por el nombre de el archivo BMP Escribir el nombre de el archivo solamente, SIN la extension BMP y dar (ENTER) el programa ejecuta la conversion y se cierra automaticamente. Una vez realizado esto, en la carpeta aparece un archivo con el mismo nombre pero de tipo BINario, el cual ya esta listo para usarlo en su micro y transferirlo al display de manera secuencial.

Conversion de fotos o dibujos:

Si van a convertir alguna imagen en color o algun otro dibujo ya existente, toma en cuenta que el display es de 160 x 80 monocromatico por lo que la conversion tendra que reducirlo dependiendo que tan grande este y talvez se pierda mucha calidad,es recomendable que las fotos o imagenes sean de baja resolucion, para evitar la perdida.

si ya tienes la imagen editala por ejemplo en corel photo-paint (te da mejores resultados que paint de windows):

1 Cargalo en baja resolucion ahi te da la opcion de definir el tamaño de la imagen, colocalo a 160 de ancho, si esta activado la autoproporcion, la altura la da automaticamente.

2 primero conviertelo a tonos grises (8bits), cambia el brillo y contraste, tratando de obtener una imagen con menos grises y mas blancos y negros, esto ayudara en la siguiente conversion. (este paso es opcional con la practica te daras cuenta que imagenes lo necesitan).

3 luego conviertela en Blanco y negro ahi te pregunta el algoritmo de conversion de inicio te da la de medios tonos, cambiala seleccionando FLOYD-STEINBERG. 4 recortala y almacenala en formato BMP.

Posteriormente cargala en paint y anexale texto o lo que necesites ahi es mas facil darle el terminado que necesitamos descrito anteriormente.

Con la practica te daras cuenta que es muy sencillo, ademas puedes importar a travez del portapapeles iconos, dibujos de power point, de la web y convertirlos, algunos ya vienen en blanco y negro.

Page 10: Ayuda en El Uso de El Display

TOUCHSCREEN

Bien para el Touch screen describire brevemente el conexionado y la técnica para sensarlo, mas sin embargo, es necesario desarrollar algoritmos de calibrado, presion y que eliminen las lecturas por capacitancia parasita, etc. deberan de leer un poco de la teoria con respecto a los Touch screen de 4 terminales, en la pagina he subido dos archivos PDF con algo de teoria ojala les sean utiles.

Fisicamente es facil identificar las cuatro barras en la periferia de el touch-PANELllamaremos IZQ,DER= X+,X- y ARR,ABA= Y+,Y-

Y+

| R | R | X+ --R--R---R--R-- X- | R | R |

Y-

Visto de frente el display, tenemos a la derecha la conexion del PANEL con cuatro terminalesnombrados de arriba -> abajo y quedan como sigue:

-------------------- | | | | | | | |------ 1 Y+ OJO: ESTAS 4 TERMINALES DEL FLEXIBLE DEL PANEL TOUCH | display |------ 2 Y- NO SON SOLDABLES !!!! | |------ 3 X+ USE UN CONECTOR APROPIADO, EL CUAL SI SE PUEDE SOLDAR A SU CIRCUITO | |------ 4 X- pueden comprarlo en Republica de el Salvador No24 local 16 P.B. | | | | | | -------------------- ||||||||||||| 1 PINOUT 20

Page 11: Ayuda en El Uso de El Display

En la siguiente tabla se resume cual es el metodo para dar lectura al panel:

Escaneo X+ X- Y+ Y-

Stand By GND Hi-Z Hi-Z Int**

Coord X GND Vcc Hi-Z ADC

Coord Y Hi-Z ADC GND Vcc

Entonces la lectura se da de la siguiente manera:

Stand BY: X+ lo colocamos a GND y la terminal Y- a la interrupcion y a su vez a Vcc atravez de un resistor, cuando tocamos el PANEL obtendremos una transicion de 1 a 0 la cual es usada para indicar que el touch-screen ha sido presionado. **(Int)

en seguida vamos a "leer" el valor de "X" , para lo cual conectamos X+=GND y X-=Vcc y usamos Y- para tomar la lectura atravez de un ADC (10bits de preferencia) Y+ no se conecta (Hi-Z) .posteriormente tomamos la lectura de "Y" conectando Y+=GDN y Y-=Vcc y tomamos la lectura en X- con el ADC, X+ no se conecta.

Estas lecturas deben ser tomadas rapidamente para evitar que cambien los valores de X y Y.

Un buen algoritmo seria una rutina donde se toman varias lecturas de "X" y "Y" rapidamente (escaneo) hasta el momento que deja de presionar el PANEL, hay que tomar en cuenta que al momento de presionar el PANEL, las lecturas no son absolutas, si las graficaramos obtendriamos algo asi como una campana.

Posteriormente aplicar algun algoritmo para desechar los valores que estan fuera del promedio y poder definir cual es el valor exacto donde se presiono. Tambien es importante tomar en cuenta que hay que aplicar un algoritmo para determinar cual fue la presion que se ejercio en el PANEL ya que tambien depende de eso el valor resultante, esto es: si tocamos el panel en un mismo punto con diferente presion obtendremos lecturas diferentes.

Usando un PIc con ADC resulta muy facil ya que el PANEL puede conectarse directamente, y atravez del programa generar todos los switcheos que se necesitan entre las cuatro terminales, para lo cual tambien usaremos el voltaje de referencia y GND internos, ver el manual de el chip que vayan a usar para determinar entre que terminales(pins) les permite cambiar estos valores y el ADC.

tambien he subido un pequeño esquema electronico para quienes quieran practicar con un ADC independiente. Analizandolo se ve la aplicaccion de la tecnica que estamos usando.

BACKLIGHT

Page 12: Ayuda en El Uso de El Display

En el demo utilizamos el: INV-TH-203(2), es un inversor destinado para EL's

Pronto subire un esquema para conectar el Backlight Electroluminiscente.

recuerden que este se alimenta con 100 VCA rms a 400Hz.

subi un hoja tecnica de uno de los tantos chips que se usan en los PDAs, celurares, etc.como referencia para aquellos que les gusta experimentar.

circuito y programa demo para PIC's

NOTA IMPORTANTE

En el manual(pag13) nos indica lo siguiente: Vlcd=Vcc-Vadj y el siguiente esquema de coneccion:

+5v | | Vcc|---| | \ | / Vlcd|-->\ VR= 10K-20K | / Vadj|---|

El pin Vlcd es una salida de voltaje negativo para alimentar el ICdrive del LCD

Si se usa la configuracion que muestra el manual, cuando VR disminuye su valor entre Vcc y Vlcd se produce un "corto" entre estas dos fuentes de Voltaje provocando que se caliente el CI:SCI7661 que esta incluido en el display.

He colocado el pot de 10K como se muestra en el siguiente esquema y funciona igual, checando las corrientes entre pines estan dentro de parametros normales de funcionamiento.

Page 13: Ayuda en El Uso de El Display

PIC Display ----------- ---------- +5v | | | | | | RB0 |-------|D0 Vcc|---| | RB1 |-------|D1 | \ | RB2 |-------|D2 | / | RB3 |-------|D3 Vadj|-->\ 10K | RB4 |-------|D4 | / | RB5 |-------|D5 Vlcd|---| | RB6 |-------|D6 | | RB7 |-------|D7 | | | | Dsp OFF|--- nc | | | | | RA0 |-------|RS | | RA1 |-------|E CS |---| | | | R/W|---| | | |--|Res Vss|---| ----------- | ---------- | | EL| |EL | +5v <--10K--| | | GND | | nc nc programa:

lo he escrito en base al ejemplo del texto de ayuda, solo cambie la segunda tabla por un texto mas largo de 199 caracteres, con el proposito de que al final, se vea el cursor parpadeando. Si enviara los 200 caracteres el cursor quedaria en una posicion fuera de el display. notese que el cursor parpadea en una posicion de RAM de display que puede contener un caracter basura.

todas las lineas que conectan al PIC con el display configurarlas como out.Funciona configurando el oscilador interno a 4Mhz.

;aqui va la configuracion de puertos ;dependiendo de el chip a usar

goto ini ;saltamos las tablas de datos

;**************** Tablas de datos tbl1 addwf 02,1 dt 00,38,01,77,02,13,03,4F,04,07,08,00,09,00,0A,00,0B,00,0C

tbl2 addwf 02,1 dt " Prueba de Display " dt " Este Demo envia " dt " 199 caracteres " dt " en modo texto "

Page 14: Ayuda en El Uso de El Display

dt " Puede conectarse a " dt " cualquier CPU o " dt " Microcontrolador " dt " *** GIOSYS *** " dt "** ELECTRONICA **" dt " 8 - Junio - 2012 "

ini bcf 05,0 ;pone RS=0 movlw 0x13 movwf 20 ;variable X=13h (19 datos de la primer tabla) ;**************** ciclo 1 Inicializa display

C1 movlw 0x01 xorwf 05,1 ;pone RS=RS xor 1 bsf 05,1 ;Pone E=1 movf 20,0 ;usamos a variable x como apuntador de tabla sublw 0x13 ;ajustamos el apuntador para leer tabla call tbl1 ;Lee dato de TABLA1 movwf 06 ;manda dato al puerto B (display) bcf 05,1 ;pone E=0 ;rutina de retardo (opcional) <----- no se uso decfsz 20,1 ;decrementa en uno a variable X goto C1 ;si variable X es diferente de cero regresa a ciclo1

bcf 05,0 ;pone RS=0 movlw 0xC7 movwf 20 ;variable X=C7h (199 datos de la segunda tabla) ;**************** ciclo 2 envia datos al display

C2 bsf 05,1 ;pone E=1 movf 20,0 ;usamos a variable x como apuntador de tabla sublw 0xC7 ;ajustamos el apuntador para leer tabla call tbl2 ;Lee dato de TABLA2 movwf 06 ;manda dato al puerto (display) bcf 05,1 ;pone E=0 ;rutina de retardo (opcional) <----- no se uso decfsz 20,1 ;decrementa en uno a variable X goto C2 ;si variable X es diferente de cero regresa a ciclo2 Fin goto Fin end

en el ciclo 1 dejamos el algoritmo para que coincidiera con el texto, pero pueden cambiar lo siguiente:

Page 15: Ayuda en El Uso de El Display

C1 movlw 0x01 xorwf 05,1 ;pone RS=RS xor 1 bsf 05,1 ;Pone E=1

por solo estas dos instrucciones:

C1 movlw 0x03 xorwf 05,1 ;pone RS=RS xor 1 y E=1

LIST P=18F4550 ;Directiva para definir el procesador

#include <P18F4550.INC> ;Definicion de SFRs para el procesador

;******** Configuracion del Oscilador **********

CONFIG FOSC = INTOSCIO_EC ;Osc interno, RA6 como

pin, USB usa Osc EC

;******** Otros bits de configuracion **********

CONFIG PWRT = ON ;PWRT habilitado

CONFIG BOR = OFF ;Brown out reset deshabilitado

CONFIG WDT = OFF ;Watchdog deshabilitado

CONFIG MCLRE = OFF ;MCLR como entrada

CONFIG PBADEN = ON ;Todos los pines como entradas analogicas

CONFIG LVP = ON ;Programacion en bajo voltaje apagado

;********* Bits de proteccion ******************

CONFIG CP0 = OFF ;los bloques del codigo de programa

CONFIG CP1 = OFF ;no estan protegidos

CONFIG CP2 = OFF

CONFIG CP3 = OFF

CONFIG CPB = OFF ;Sector Boot no esta protegido

CONFIG CPD = OFF ;La EEPROM no esta protegida

Despues debemos de considerar variables para hacer rutinas de retardo:

CBLOCK 0x000 ;Variables en la ACCESS RAM (Banco 0) max 96 bytes

Cantms:2 ;variable para generar hasta 65535 ms

CantSeg ;Variable para producir retardos de hasta 255 seg

ENDC

#DEFINE pine LATE,1

Page 16: Ayuda en El Uso de El Display

#DEFINE pinrs LATE,0

Iniciando perifericos

ORG 0x0000

goto Main ;Se va al inicio del codigo principal

Main

;******************* Inicializamos perifericos

***************************

clrf LATD

clrf TRISE,.0

movlw B'01100000' ;Ajustamos el oscilador interno a 4 MHz

movwf OSCCON,.0

movlw B'00001111'

movwf ADCON1,.0 ;Todos los pines como I/O digitales

clrf TRISD,.0

Mandar datos a la GLCD es sencillo, como si se tratara de una 16x2, El problema es el PIN R/W, ya que el fabricante dice que: "el display tiene una

bandera de espera la cual tiene que ser leiday comprobada antes de enviar el siguiente dato. Para evitar esto, solo debemos poner a tierra R/W para que

siempre estemos escribiendo en el display, cuando mandemos un dato el PIN E debe de tener una cierta espera, yo le puse un retardo de casi 20 uS, con

un oscilador interno a 4 Mhz.

Los pasos para configurar el GLCD modo caracter, 20 char x 10 renglones son los siguientes:

tabla1= 00,38,01,77,02,13,03,4F,04,07,08,00,09,00,0A,00,0B ,00,0C

pone RS=0

variable X=13h (19 datos de la primer tabla)

ciclo1 pone RS=RS xor 1 (*)

Pone E=1

Lee dato de TABLA1

manda dato al puerto (display)

pone E=0

rutina de retardo (opcional)

Page 17: Ayuda en El Uso de El Display

decrementa en uno a variable X

si variable X es diferente de cero regresa a ciclo1

En el MPLAB quedaria asi:

Código:

Código:

;******************INICIA GLCD********************

bcf pinrs

movlw 0x13 ;

movwf 0x003

movlw 0x0B

movwf 0x004 ;

clrf TBLPTRU

clrf TBLPTRH ; limpia TBLPTRU

movlw 0x82

movwf TBLPTRL ; carga a 82 en TBLPTRL

ciclo:

movlw 0x01

xorwf LATE,1,.0

bsf pine

TBLRD*+ ; TABLAT++

movf TABLAT, W ; W <- TABLAT

movwf LATD ; dato <- W

bcf pine

rcall retarm

decfsz 0x003,f

goto ciclo ; bucle eterno

bcf pinrs

goto pruebas

ORG 0x82

DB

0X00,0X38,0X01,0X77,0X02,0X13,0X03,0X4F,0X04,0X07,0X08,0X00,0X09,0X00,

0X0A,0X00,0X0B,0X00,0X0C

Page 18: Ayuda en El Uso de El Display

; *************FIN DE LA TABLA ****************

El proveedor recomienda ejecutar una funcion XOr entre el valor de el bit que se haya designado para RS y "1", Ej: RS = Ra2(pic) entonces Ra2=Ra2 [XOR] 04h (0000 0100).esto hará que el valor se invierta en forma alternada y nos de los valores para (RS) conforme a la primer tabla, observemos que se ha iniciado RS=0 para que en el primer ciclo esta se convierta en "1" para la primer instruccion, posteriormente cambiara su valor alternando 0,1,0,1,etc.En el ciclo2 RS no cambia su valor de CERO ya que solo mandaremos DATOS al display.

Ahora enviamos caracteres al display, yo envie la palabra: "Hamburguesa".La secuencia es:variable X=11h (1 datos de la segunda tabla porque la palabra hamburguesa tiene 11 letras)

ciclo2 pone E=1Lee dato de TABLA2manda dato al puerto (display)pone E=0rutina de retardo (opcional)decrementa en uno a variable X si variable X es diferente de cero regresa a ciclo2 FIN de secuencias

;***********MANDA CARACTERES*************

clrf TBLPTRUclrf TBLPTRH ; limpia TBLPTRUmovlw 0XEEmovwf TBLPTRL ; carga a 101 en TBLPTRLcicda: bsf pineTBLRD*+ ; TABLAT++movf TABLAT, W ; W <- TABLATmovwf LATD ; dato <- Wbcf pinercall retarmdecfsz 0x004,f goto cicdapushgoto sigue

ORG 0XEEDB "Hamburguesa"

;*************FIN DE ENVIO DE CARACTERES**************

sigue:retarmmovlw 0x20movwf 0x005mass decfsz 0x005,fgoto massreturn

END ;Directiva fin del programa

Bueno, el proveedor de esta pantalla dice que despues de configurar la GLCD apareceran caracteres basura, el recomienda una

rutina sencilla que posteo con algunas de sus propias palabras:

El Display no posee instruccion alguna para borrar el contenido de la memoria RAM por lo que despues del ciclo de inicializacion

apareceran caracteres basura. por lo tanto habra que realizar un ciclo de borrado (clear screen):

--------- este ciclo va despues de la inicializacion TABLA1

variable X=C8h (200 caracteres)

ciclo3 pone E=1

manda 00 al puerto (display)

pone E=0

rutina de tiempo

decrementa en uno variable X

Page 19: Ayuda en El Uso de El Display

si variable X es diferente de cero regresa a ciclo3

** pone RS=1

pone E=1

manda 0A al puerto (instruccion RAM ADD LOWER)

pone E=0

pone RS=0

pone E=1

manda XX al puerto (direccion 00 a C7)

pone E=0

pone RS=0

------- aqui continua el ciclo2 que envia la TABLA2 al display

Recordar que al terminar la rutina de borrado el apuntador interno de el display estara en 00C8 el cual señala una posicion de

RAM fuera de el display, tienes que volver a mandar el SET para la instruccion: RAM ADD lower y upper y juntas (16bits) forman

la direccion para escribir en la memoria RAM destinada al display.

En el ejemplo se configura el display a 20x10 caracteres, quedando la memoria de la siguiente manera (hexadecimal):

0000 0001 0002 0003 0004 0005 0006 ...... 0013 <--- 20 caracteres renglon 1

0014 0015 0016 0017 0018 0019 001A ...... 0027 <--- 20 caracteres renglon 2

-------

-------

-------

00B4 00B5 00B6 00B7 00B8 00B9 00BA ...... 00C7 <--- 20 caracteres renglon 10

Se observa que los 8 bits de la izq (upper) siempre estan en cero, entonces si queremos "escribir" en el display desde el principio

(angulo superior izq) solamente debemos mandar el set para LOWER=cero.

si preferimos ponerlo en cualquier valor de 00h a C7h. esto seria como un goto(xy) Ej: si ponemos "HOLA" al centro (aprox) de la

pantalla el valor para LOWER seria 58h.

Asi indicaremos donde queremos empezar a "escribir" en la pantalla.

Page 20: Ayuda en El Uso de El Display

Realize una rutina para estas instrucciones, metiendolas justo entre el fin de la tabla 1 y el principio de donde dice: ENVIO DE

CARACTERES quedando como sigue:

;*****LIMPIA LA PANTALLA***********

movlw 0x0C8 ;PARA LIMPIAR LA PANTALLA

movwf 0x00A ;PARA LIMPIAR LA PANTALLA

limpia bsf pine

movlw 0x00

movwf LATD

bcf pine

rcall retarm ; ***********retardo

decfsz 0x00A,f,.0

goto limpia

bsf pinrs

bsf pine

movlw 0x0A

movwf LATD

bcf pine

bcf pinrs

bsf pine

movlw 0x00 ;*********GOTO(XY)

movwf LATD ; ********GOTO(XY)

bcf pine

rcall retarm ; ***********retardo

bcf pinrs

;*************FIN LIMPIAR LA PANTALLA***********

Bueno la cuestion es que no funciona, no se ve nada en la pantalla, se queda en blanco y no sirve esta minirutina, aqui pido su

ayuda, ya que me es urgente hechar a andar esa screen, despues voy a meterle graficos y posteriormente el manejo de la touch,

en 3 meses lo debo de terminar, asi que voy a decir siempre como lo hize, gracias.

Cita

Page 21: Ayuda en El Uso de El Display

r

Temas similares

1. USB y PIC 18F2550 Desarrollo de proyectos en ASM   Microcontroladores y sistemas embebidos

2. Problema con modulo EUSART de PIC18F4550 en ASM   Microcontroladores y sistemas embebidos

3. Touch Resistivo, Manejo de Glcd mas Matriz de Resistencias   Microcontroladores y sistemas embebidos

4. LCD grafico GLCD basado en controlador KS0108, desarrollo en MikroC   Microcontroladores y sistemas embebidos

5. cable serial touch screen monitor   PC Hardware

¿No es lo que buscabas? Intenta buscar un tema similar

116 Comentarios

20/02/2012 # 2

Daniel Meza Saludos... hace algunos meses trabajé con ese mismo GLCD, pero con el uC PIC16F874A. El proyecto consistía

básicamente en un contador de oscilaciones en un determinado tiempo programado por el usuario.

De igual manera está hecho en ASM. Te dejo el código, allí viene la rutina que usé para el borrado del GLCD y están

declarados los puertos que controlan cada pin del GLCD.

Otra cosa es que revises también la señal de contraste, ya que esta no se conecta como comunmente en los demás

LCD's.

Citar

21/02/2012 # 3

nietzche Muchas gracias Daniel, me funciona el codigo de limpiar la pantalla, pero no sabes porque razon no funciona mi rutina?,

estoy haciendo cada paso como lo dice la nota del proveedor ???

Por cierto veo que le pusiste rutina de demora de 1 milisegundo cuando E =0, yo solo le coloco 20 microsegundos, sera

suficiente ???

Por cierto, lo de la sennal del contraste la conecte tal y como el esquema de conexionado que aparece en la pagina de

el proveedor.

Citar

21/02/2012 # 4

Daniel Meza No estoy muy metido aún en el asm de los PIC18, pero me parece que el problema está en que utilizas los registros

Page 22: Ayuda en El Uso de El Display

LATD en lugar de PORTD. Sobre la temporización, utilicé 1 milisegundo para asegurar que no tenga problemas de

temporización (peor caso), ese valor me pareció suficiente y no se nota el retardo al momento de mostrar texto en el

GLCD, me parece que en el caso de imágenes si se alcanza a notar el llenado de datos.

Citar

26/02/2012 # 5

nietzche Oye daniel una pregunta, en tu codigo cuando mandas ya sea datos o comandos, mandas primero el dato al puerto y

luego habilitas o desahbilitas los pines RS y E, en el manual dice que mandes RS a 0/1, E=1 mandes datos y luego E=0,

es lo mismo ??????????

Citar

26/02/2012 # 6

Daniel Meza Es lo mismo, lo importante es que el byte, ya sea una instrucción o un dato estén estables al momento de mandar E a

bajo, no hay falla entre activar primero RS y después enviar el dato o enviar el dato primero y después activar RS,

siempre y cuando RS y el dato estén estables al momento de "escribir" los datos en el GLCD por medio de E=0

Citar

27/02/2012 # 7

nietzche Ahora la pregunta que sigue, despues de que envio caracteres al GLCD, tengo que situar el cursor en donde yo quiera

poner el caracter y mandar las palabras no es asi ?.

Citar

27/02/2012 # 8

Page 23: Ayuda en El Uso de El Display

Daniel Meza Es correcto como paso inicial, es decir, supongamos que "limpias" el GLCD, en seguida tienes que ajustar la posición del

cursor, situándolo en donde quieres que aparezca tu texto (Esto se hace escribiendo la posición correspondiente en los

registros de posición, si no mal recuerdo se accede a ellos por medio de los comandos 0x0A y 0x0B, corrobora en la

hoja de datos). Una vez situado el cursor, los caracteres se irán desplegando uno en seguida del otro en el orden que

los envíes, esto es, internamente el GLCD actualiza el cursor para mostrar el siguiente caracter.

Citar

27/02/2012 # 9

nietzche Biem, tu ayuda me ha servido de mucho, me atore porque solo mandaba el lower del cursor sin mandar el upper, ahora

intentare mandar graficos al glcd, o graficos y texto, haber como me sale. Has trabajado con su modulo Touch ???????

Citar

27/02/2012 # 10

Daniel Meza Bien... para trabajar los gráficos te recomiendo el programa Bitmap2LCD, es muy fácil convertir imágenes en código

para pegarlo en tu programa. Referente al modulo Touch no lo he usado, me he entretenido más intentando hacer

funcionar su backlight... ¿ya lo has conseguido tu?

Citar

27/02/2012 # 11

nietzche ok si tengo el bitmap, lo estoy usando, solo que me cuesta trabajo migrar al 18f4550, es muy diferente, sobre el

backlight, en la pagina esa que dan, recomiendan el SP4423, pero no lo he visto en AG, no se si en el salvador lo

tengan, supongo que desarmando algun modulo de alguna lcd que tenga backlight, pueda funcionar, o hacerlo con

componentes pasivos, unos opamps que generen el pulso que dice es de aprox. 300Hz y algun circuito elevador de

tension para los 150Vpp, manejar bien la corriente, y lo que me llama la atencion es poder variar la intensidad

luminosa, yo creo que bajando el Vpp se logra, cuando tenga mayor avance de mi tesis hare esa parte, suena

interesante.

Page 24: Ayuda en El Uso de El Display

Citar

27/02/2012 # 12

Daniel Meza Tampoco encontré ese integrado, intenté armar algo con un inversor pero no me va por el uso de un transformador

grande (no tengo mucho espacio).

Recién adquirí el módulo, solicité a la página del distribuidor que me enviara el diagrama para hacerlo funcionar, y aún

no recibo respuesta .

En varios locales he visto que lo tienen como muestra y haciendo funcionar su backlight con un circuito bien sencillo, he

pensado pedirles que me lo muestren para copiarlo jaja.

En fin, ya es otro tema, saludos y suerte con esa tésis.

Citar

28/02/2012 # 13

nietzche gracias por la suerte, oye le has metido graficos a la lcd ?

Citar

28/02/2012 # 14

Daniel Meza si... una que otra imágen. Te dejo un programa que muestra una imágen, (aunque no recuerdo que imágen era),

nuevamente está implementada para el PIC16F874, la puedes adaptar. Los datos de la imágen los obtuve de

Bitmap2LCD

Img.txt

Citar

28/02/2012 # 15

nietzche Ahhh ya veo, como metes los datos en la memoria de programa?, es necesario escribir en los registros EECON?.

Para mandar 1600 bytes usas la bandera Z, yo uso un decrementador en 2 registros de 8 bits, asi son 16 bits, para que

usas esa bandera?, la vdd nunca he podido mandar graficos a la GLCD.

Page 25: Ayuda en El Uso de El Display

Citar

28/02/2012 # 16

Daniel Meza Para almacenar los datos en la FLASH del PIC solamente se declaran como contantes con la directiva DT.

ORG 0x0800

Tabla2

DT 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00

De esta manera, al ensamblar el programa, a partir de la dirección 0x800 (En este caso), estarán los datos definidos por

DT.

El registro EECON lo utilizo para controlar la lectura de datos de la tabla anterior, EEADRH y EADR son los bytes alto y

bajo respectivamente del puntero de donde se leerán los datos, EEDATA es el registro donde se devuelve el dato leido.

Con respecto a lo del conteo de datos, lo que hago es inicializar dos variables (Puntero alto y bajo) con la dirección de

inicio de la tabla por medio de las instrucciónes:

movlw HIGH Tabla2

movwf AdH

clrf AdL

de esta forma AdH contine 0x08 y Adl contiene 0x00, en conjunto apuntan a 0x0800, al inicio de la tabla.

Durante la rutina de lectura de datos la dirección formada por AdH y AdL se copian a los registros EEADRH y EADR para

obtener los bytes de la imágen.

Una vez hecho esto, el registro AdL se incrementa para apuntar al siguiente byte, y así sucesivamente hasta que estos

registros llegan a AdH=0x0E y AdL=0x40, es decir 0x0800 + 0x640 (1600 en decimal) momento en el cual se han

enviado los 1600 bytes.

He de aclarar que la forma que usas tu de 2 registros es más cómoda, yo lo implementé así a modo de prueba.

Espero haber sido claro... si no pues nos estamos comunicando

Page 26: Ayuda en El Uso de El Display

Citar

28/02/2012 # 17

nietzche Ahh es direccionamiento indirecto no es asi?, para mi micro yo uso los comandos TBLT que son un dolor de cabeza si no

se sabe usarlos, lo malo es que simule el programa con la funcion de debugg y los datos salen uno por uno al glcd, pero

por alguna razon la GLCD se ve con lineas raras que no son las que yo mando, lo que veo es que no pusiste la rutina

aquella de limpiar la pantalla y poner el cursor en 0X00, ya no vale aqui o ke onda ?

Citar

29/02/2012 # 18

Daniel Meza Si, es direccionamiento indirecto. ¿Usas algún simulador como proteus?, aunque este no disponga del módulo GLCD

puedes ir viendo como salen los datos del uC.

En este caso no utilicé la rutina de limpiar pantalla ya que la misma imágen sustituye a los datos "basura" del comienzo.

pero por alguna razon la GLCD se ve con lineas raras que no son las que yo mando

En este punto, ¿Lo que se ve tiene algún parecido con la imagen que piensas mostrar?, me refiero a que si medio se

distingue alguna forma o figura familiar

Citar

01/03/2012 # 19

nietzche respecto alo del proteus puedo usar el 128 x 64 como si fuera la glcd?, supongo que mas alla de esos limites la pantalla

del proteus no mostrara los resultados no?.

ala imagen la adjunto.

Miniatura de Adjuntos

 

Citar

01/03/2012 # 20

Daniel Meza respecto alo del proteus puedo usar el 128 x 64 como si fuera la glcd?

No es posible. Esta GLCD tiene un controlador distinto al modelo que viene en proteus.

Page 27: Ayuda en El Uso de El Display

Haz una prueba del GLCD, configurala en modo gráfico y envía un patrón de pixeles. Supongamos 0x55 1600 veces, de

esta manera se tendrá que ver una serie de lineas paralelas alternadas entre sí. Si el GLCD pasa esta prueba el

problema puede estar en el programa que toma los datos de la memoria del PIC y los envía al GLCD

Citar

Página 1 de 6 1 2 3 4 5 > Última » ¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Principio del formulario

Herramientas

Mostrar Versión Imprimible

Buscar más temas sobre:

Microcontroladores y sistemas embebidos Cerrar

Foros de Electrónica > Diseño digital > Microcontroladores y sistemas

embebidos