Home
CAN-005, Utilización de displays LCD gráficos (SED1335)
Contents
1. D4 PA 5 D5 El port A hace las veces de bus de datos mientras que los ports libres del port E generar n por software las se ales de control La se al CS podr a conectarse PAT meei D7 directamente a masa a criterio del usuario El nico inconveniente es una posible escritura no intencional al momento del arranque problema que tambi n podemos ea AE a tener con este esquema dado que los ports utilizados son entradas al momento de PEO AO reset Podr an inclu rse sendos pull ups si esta posibilidad resultara un PEA CS inconveniente El circuito de contraste de este display es totalmente interno el mismo puede ajustarse mediante un preset ubicado en la parte posterior del display El display dispone adem s de un pin de reset el cual podemos controlar a voluntad o conectar al reset del circuito Para el desarrollo de esta nota de aplicaci n simplemente lo conectamos mediante un pull up a la tensi n de alimentaci n Software Breve descripci n del display gr fico Estos displays son sumamente vers tiles la memoria puede ser dividida en diferentes pantallas las cuales a su vez pueden definirse como gr ficas o de texto habilitarse y o superponerse independientemente Para el caso del modo texto el SED1335 dispone de un generador de caracteres y una ROM de caracteres de 5x7 aunque es posible utilizar una ROM externa o la misma RAM del display Al momento de definir cada pantalla d
2. rea de memoria asociando esa posici n de memoria f sica con un puntero extendido que hace referencia a esa posici n El rea apuntada corresponde a una estructura del tipo puntero long gt longitud de los datos n long datos propiamente dichos n bytes De esta forma resulta muy f cil incluir las im genes al programa ximport cika pbm cika tximport rabtip pbm rabtip tximport goku pbm goku El nico inconveniente de trabajar de esta forma es que acceder a la memoria por su direcci n f sica resulta algo engorroso por lo que es preferible copiarla al rea base y transferirla de all al display Dynamic C trae funciones para hacer sto Para utilizar poca memoria partimos la imagen en bloques movemos estos bloques de una a otra rea y copiamos al display En este caso ser an 40 bloques de 240 bytes c u tdefine IMGCHUNK 240 fdefine CHUNKS 40 void LCD_dump long imgdata int Xx v unsigned char buffer IMGCHUNK LCD_cursor 1200 selecciona pantalla gr fica LCD_WriteCmd 0x42 MWRITE for y 0 y lt CHUNKS y xmem2root buffer imgdata IMGCHUNK y sizeof long IMGCHUNK trae bloque de xmem for x 0 x lt IMGCHUNK x LCD_Write buffer x copia al display Mostraremos ahora unas simples funciones para hacer gr ficos de tres dimensiones en perspectiva Las mismas tienen como objeto demostrar una aplicaci n posible del display y han sido portadas de viejos programas BASIC p
3. e interrumpe el display Si nuestra aplicaci n requiere que no haya parpadeo flicker al momento de escritura podemos primero chequear el flag de ocupado busy y realizar nuestra escritura en el momento que el controlador no accede a la RAM para refrescar el LCD Si por el contrario toleramos el flicker o como en nuestro caso hacemos una escritura muy r pida que el mismo no se nota podemos obviar un paso y escribir directamente sobre el controlador sin chequear el busy flag Algoritmos Si bien el display tiene muchas formas de utilizaci n en esta nota de aplicaci n desarrollaremos algoritmos en base a las m s simples Para direccionar un punto debemos traducir sus coordenadas a una direcci n lineal para ello deberemos multiplicar la coordenada vertical y por la cantidad de bytes en sentido horizontal de la pantalla 40 si utilizamos la totalidad de 320 pixels 40 bytes y sumarle la coordenada horizontal x dividida por 8 pixels por byte El resto de dividir x 8 es el n mero de pixel dentro del byte Dado que el MSB se halla a la izquierda el pixel O correponde al bit 7 y el pixel 7 al bit 0 es decir address 40 y x 8 bit 7 resto x 8 Para graficar funciones debemos tener en cuenta que la coordenada 0 0 se halla en el extremo superior izquierdo de la pantalla Para mostrar pantallas deberemos agrupar los datos de modo tal de poder enviarlos de forma que aproveche de manera eficiente los contadores autoincrementados y la estruc
4. n at mica se realiza mediante la instrucci n ldd LoaD and Decrement que copia hacia la posici n apuntada por DE el contenido de la posici n apuntada por HL decrementando ambos punteros y el contador BC El inconveniente es que m s adelante debemos volver a cargar el mismo valor en los punteros preferimos esto en vez de salvarlos en el stack porque es m s r pido o incrementarlos nuevamente m s r pido a n Nos pareci menos confuso para el desarrollo de la nota volver a cargar el mismo valor sacrificando eficiencia por claridad El resto de las funciones se ha escrito en C dado que con el incremento de velocidad logrado es suficente para el m dulo utilizado y las prestaciones esperadas de una nota de aplicaci n void LCD_WriteCmd unsigned char cmd BitWrPortI PEDR amp PEDRShadow 1 LCD_A0 Sube A0 Cmd LCD_Write cmd BitWrPortI PEDR amp PEDRShadow 0 LCD_A0 Baja A0 Data void LCD_WriteStrCmd unsigned char cmd int len LCD_WriteCmd cmd manda comando while len manda par metros LCD_Write cmd unsigned char LCD_ReadData unsigned char data WrPortI SPCR amp SPCRShadow 0x80 _PA0 7 Inputs BitWrPortI PEDR amp PEDRShadow 1 LCD_A0 Sube A0 Data BitWrPortI PEDR amp PEDRShadow 0 LCD_RD Baja RD data RdPortI PADR lee datos del bus BitWrPortI PEDR amp PEDRShadow 1 LCD_RD Sube RD BitWrPortI PEDR amp PEDRShadow 0 LCD
5. CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 Cika Nota de Aplicaci n CAN 005 T tulo Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 7 o Electr nica autor Sergio R Caprile Senior Engineer Revisiones Fecha Comentarios O 16 7 03 Nos interiorizaremos ahora en el desarrollo de una interfaz para conectar un m dulo LCD gr fico inteligente Powertip PG320240FRS a un m dulo Rabbit 2000 Se trata de un display de 320x240 pixels basado en chips controladores compatibles con el SED1335 de S MOS y su clon de Epson Analizaremos m s tarde el software de control y un simple programa demostraci n que sirve para comprobar el correcto funcionamiento de los m dulos LCD que tengamos en stock y de paso demostrar sus capacidades A fin de probar la mayor parte posible del hardware la interfaz ser de 8 bits y realizar lectura y escritura del controlador LCD Hardware El SED1335 presenta una interfaz con dos posibles modos de trabajo tipo Motorola E RS R W o tipo Intel RD WR A0 El PG320240FRS de Powertip Rabbit LCD lo utiliza en esta ltima modalidad Para la interfaz con el micro no es necesario ning n tipo de glue logic hacemos a AE bl una conexi n directa entre los ports del Rabbit y el LCD al igual que con la gran PAD D2 mayor a de los microcontroladores como puede apreciarse en la tabla a la derecha PA 3 D3 PA 4
6. _A0 Baja A0 Sts WrPortI SPCR amp SPCRShadow 0x84 _PA0 7 Outputs return data Algunas funciones de soporte para generar demoras void MsDelay int iDelay unsigned long ul0 ul0 MS_TIMER valor actual del timer while MS_TIMER lt ul0 unsigned long iDelay CAN 005 3 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 Veamos ahora la funci n de inicializaci n la cual es algo extensa dadas las prestaciones del SED1335 y su inherente complejidad void LCD_init const static unsigned char init_stringl 0x40 INIT B00110000 32 char CGRAM 8 pixel chars no top screen corr LCD normal 0x87 0x7 8x8 characters 39 59 320 pixels 8 pixel characters gt 40 characters per line 239 240 lines 30 txt lines 40 0 virtual screen display screen y const static unsigned char init_string2 0x44 SCROLL Oz SAD1L screen 1 empieza en 0x0000 0 SADIH 239 SL1 scrolling lines 239 dec 0xB0 SAD2L screen 2 empieza en 1200 0x4b0 0x04 SAD2H 239 SL2 scrolling lines 0 SAD3L 0 SAD3H 0 SAD4L 0 SAD4H const static unsigned char init_string3 0x5D CSRFORM 0x04 CRX cursor horiz 4 pixel 0x86 CRY cursor vert 6 pixel CM block cursor y const static unsigned char init_string4 Ox5A HDOT_SCR 0x5a scroll rate 0 1 pixel scrol
7. a de escritura en assembler Dado que solamente nuestra rutina accede al port A prescindimos de su correspondiente shadow register no obstante dado que el port E puede compartirse con otra tarea creemos buena pr ctica el actualizar el shadow register Esta actualizaci n debe hacerse de forma at mica para evitar que una interrupci n altere el valor en la mitad de la operaci n LCD control signals fdefine LCD_RD 4 fdefine LCD_AO 0 fdefine LCD_WR 3 fdefine LCD_CS 1 Low level functions tasm function requires one parameter sp 2 data to write r LCD_Write CAN 005 2 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 ld hl sp 2 extrae del stack el valor a escribir Ya a L usa solo el LSB unsigned char byte ioi ld PADR a lo escribe PA0 7 se mantienen como salidas ld h1 PEDRShadow apunta al control del port E shadow ld de PEDR apunta al control del port E res LCD_WR HL Baja WR ioi ldd ahora atomic ld h1 PEDRShadow apunta al control del port E shadow ld de PEDR apunta al control del port E set LCD_WR HL Sube WR ioi ldd ahora ret tendasm El prefijo ioi es el que nos permite utilizar cualquier instrucci n de acceso a memoria como instrucci n de TO Esta es una de las mayores diferencias entre Rabbit y Z 80 en cuanto a set de instrucciones descartando claro est las funciones agregadas Obs rvese como la operaci
8. ca S R L agrega texto LCD_printat 29 30 julio 2003 MsDelay 10000 espera 10 segs CAN 005 7
9. efinimos tambi n en qu posici n de memoria comienza y c mo se asigna la memoria La estructura de memoria de cada pantalla es lineal tanto en modo gr fico como en modo textol En este ltimo modo el primer byte corresponde al caracter ubicado arriba a la izquierda y el ltimo byte corresponde al ubicado abajo a la derecha En el modo gr fico los pixels se agrupan horizontalmente en bytes correspondiendo el primer byte de memoria a los primeros ocho pixels de la primera l nea de arriba a la izquierda y el ltimo byte a los ltimos ocho pixels de la ltima l nea de abajo a la derecha El bit m s significativo del primer byte de memoria corresponde al punto situado en la pantalla arriba a la izquierda y el bit menos significativo del ltimo byte de memoria corresponde al punto situado en pantalla abajo a la derecha CAN 005 1 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 El direccionamiento del byte a leer o escribir en memoria se hace mediante comandos especificando el offset desde la primera direcci n correspondiente a la pantalla que nos ocupa Tiene adem s un contador autoincrementado el cual apunta a la direcci n siguiente luego de una lectura o escritura Esto resulta ptimo para enviar los datos byte por byte hasta completar una pantalla Una caracter stica interesante del display es que puede funcionar a una alta velocidad de acceso simplemente da prioridad a la interfaz con el procesador
10. go es un simple ejemplo de la utilizaci n de Dynamic C para escribir un corto y simple programa de control que nos permita demostrar el funcionamiento del display LCD Para observar si todos los pixels funcionan correctamente pintamos la pantalla de negro y luego la blanqueamos Luego graficamos unas funciones en 3D y finalmente mostramos unas im genes MAIN PROGRAM main int i LCD_init while 1 LCD_cleartxt i borra pantalla de texto LECD_cleargfx borra pantalla gr fica MsDelay 1000 espera 1 seg LED_cursor 1200 pantalla gr fica LCD_fi11 0xFF 9600 pone en negro MsDelay 3000 espera 3 segs LCD_cleargfx borra LCD_printat 0 0 Graficos en 3D en tiempo real texto superpuesto paraboloide 30 6 20 20 8 0 8 0 10 0 10 0 gr fico 3D MsDelay 10000 espera 10 segs LCD_cleartxt borra texto anterior LCD_dump cika muestra logo Cika MsDelay 3000 espera 3 segs LCD_cleargfx borra logo LCD_printat 0 0 Graficos en 3D en tiempo real elipsoide 45 80 0 30 30 0 6 28 3 14 3 14 gr fico 3D MsDelay 10000 espera 10 segs LCD_cleartxt borra texto anterior LCD_dump goku muestra imagen LCD_printat 0 0 Texto y graficos superpone texto LCD_printat 1 2 superpuestos MsDelay 6000 espera 3 segs LECD_cleartxt borra texto LCD_dump rabtip muestra logos LCD_printat 25 8 Cika Electroni
11. l y const static unsigned char init_string5 0x5B OVLAY NBO00000001 XOR screens 1 y 2 y const static unsigned char init_string6 0x59 DISP_ON NBO0010110 cursor flash 2 Hz SAD1 2 no flashing SAD3 off y WrPortI PEDR PEDRShadow B00011010 CS RD WR HIGH WrPortI PEDDR PEDDRShadow AB10011011 PE0 1 4 3 7 output WrPortI SPCR SPCRShadow 0x84 _PA0 7 Outputs MsDelay 1000 espera LCD reset BitWrPortI PEDR amp PEDRShadow 0 LCD_CS Baja CS LCD_WriteStrCmd LCD_WriteStrCmd LCD_WriteStrCmd init_string3 sizeof init_string3 E init_stringl sizeof init_stringl Fs dis LCD_WriteCmd 0x4C CSRDIR_RIGHT cursor incrementa a la derecha init_string2 sizeof init_string2 inicializa el display f LCD_WriteStrCmd init_string4 sizeof init_string4 H LCD_WriteStrCmd init_string5 sizeof init_string5 LCD_WriteStrCmd init_string6 sizeof init_string6 r CAN 005 4 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 Rutinas de soporte de alto nivel sumamente simples High level functions void LCD_cursor int address LCD_WriteCmd 0x46 CSRW LCD_Write addresss0xFF LO byte LCD_Write address gt gt 8 80xFF HI byte void LCD_fill unsigned char pattern int len int i LCD_WriteCmd 0x42 MWRITE while len LCD_Write pat
12. or lo que son mucho menos que ptimas No obstante puede observarse que trabajar con n meros en coma flotante es sumamente f cil y podr adem s apreciarse la velocidad de c lculo de la combinaci n Rabbit Dynamic C ya que la funci n se dibuja mientras se va calculando simple 3D function plotting void paraboloide int PERSP float SCALE int TRAZOSX int TRAZOSY float X0 float X1 float YO float Y1 auto int XX yy auto float X y Z2 auto float persp xt zt auto float h1 h2 h3 h4 cs si persp PERSP 0 01745329 convierte a radianes cs cos persp calcula perspectiva si sin persp h1 X1 X0 159 calcula paso de barrida h2 Y1 Y0 float TRAZOSX 1 h3 X1 X0 float TRAZOSY 1 h4 Y1 Y0 159 for y Y0 y lt Y1 y h2 barre en un sentido for x X0 x lt X1 x h1 z x x 4 y y 9 15 xt x y cs zt z y si xx 160 int SCALE xt yy 120 int SCALE zt CAN 005 6 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 LCD_plot xx yy 5 barre en el otro sentido for x X0 x lt X1 x h3 for y Y0 y lt Y1 y h4 z x x 4 y y 9 15 xt x y cs zt z y si xx 160 int SCALE xt 5 yy 120 int SCALE zt LCD_plot xx yy void elipsoide int PERSP float SCALE int TRAZOSX int TRAZOSY float X0 float X1l float YO float Y1 lt eliminada por cuestiones de espacio muy similar a paraboloide gt El siguiente fragmento de c di
13. tern llena con pattern void LCD_cleargfx void LCD_cursor 1200 direcciona la pantalla gr fica LCD_fi11 0 9600 borra pantalla llena con 0 s void LCD_cleartxt void LCD_cursor 0 direcciona pantalla de texto LCD_fi11 1200 borra pantalla llena con espacios void LCD_printat unsigned int row unsigned int col char ptr LCD_cursor 40 row col posiciona cursor LCD_WriteCmd 0x42 MWRITE while ptr escribe caracteres LCD_Write ptr Plot image data 8 pixels per byte MSB left void LCD_plot int x int y int strip bit data strip x gt gt 3 bit x amp B0111 y 1200 strip 40 y LCD_cursor y RA LCD_WriteCmd 0x43 data LCD_ReadData data 0x80 gt gt bit LCD_cursor y 1 LCD_WriteCmd 0x42 LCD_Write data el strip x 8 bit resto pantalla gr fica empieza en address 1200 direcciona strip en pantalla gr fica MREAD lee set bit MSB a la izquierda vuelve a direccionar autoincrementa MWRITE escribe Para mostrar pantallas dado que la extensi n de las mismas es de 9600 bytes puede no ser conveniente cargarlas en el espacio base por lo que nos conviene usar el espacio extendido de memoria Afortunadamente Dynamic C provee una funci n que permite al momento de compilaci n leer un archivo y ubicarlo para CAN 005 CAN 00S5 Utilizaci n de displays LCD gr ficos SED1335 con Rabbit 2000 ocupar un
14. tura de memoria dada la estructura lineal esto se reduce simplemente a enviar todos los bytes corridos Si comparamos la estructura de memoria del display con la forma de guardar im genes blanco y negro en formato BMP ver amos que son muy similares por ejemplo BMP va de abajo a arriba y el display de arriba a abajo por lo que la imagen se ve espejada verticalmente BMP usa el 0 para el negro y el 1 para el blanco si el display es STN 1 corresponde a un punto negro Adem s BMP incluye un encabezado de 62 bytes Por consiguiente para adaptar una imagen debemos llevarla a la resoluci n deseada espejarla verticalmente invertir sus colores salvarla en formato BMP y por ltimo descartar los 62 bytes del comienzo con alg n editor hexa Para imprimir textos calculamos simplemente la posici n de memoria a partir de fila y columna de modo similar address 40 fila columna para 40 caracteres por fila matriz de caracteres de 8x8 Desarrollo Desarrollamos a continuaci n el software de base para manejo del display Definiremos dos pantallas una gr fica de 320x240 y una de texto de 40x30 con caracteres de 8x8 usando el generador interno por lo que se ver n caracteres de 5x7 en una trama de 8x8 Para una mejor comprensi n dada la complejidad del SED1335 se recomienda consultar su manual t cnico Dada la gran cantidad de informaci n a mover hacia el display para la presentaci n de pantallas decidimos escribir la rutina b sic
Download Pdf Manuals
Related Search
Related Contents
Manuel d`entretien du serveur Sun Fire V125 Specifiche tecniche Genie GTH-844 Specifications Machinedrum User's manual Mis respuestas a vuestras preguntas 3 Cisco Systems 78-11180-01 User's Manual JVC KY-F58 Camcorder User Manual Copyright © All rights reserved.
Failed to retrieve file