Hola,
He decidido abrir un nuevo tema al respecto debido a que el proyecto original ha sufrido algunos cambios. Se trata de un Display grafico PG320240 de Powertip controlado por un PIC16F76, actualmente lo trabajo a 8MHz y he conseguido inicializarlo con el siguiente codigo (solo pongo los valores porque el codigo completo es muy largo en assembler):
Codigo:
Display SYSTEM SET instruction
0x40
0x30
0x07
0x07
0x27
0x2B
0xEF
0x28
0x00
Display SCROLL instruction
0x44
0x00
0x00
0xF0
0x80
0x25
0xF0
0x00
0x00
0x00
0x00
Display CSR FORM instruction
0x5D
0x04
0x86
Display CSR DIR instruction
0x4C
Display HDOT SCR instruction
0x5A
0x00
Display OVLAY instruction
0x5B
0x01
Display DISP OFF instruction
0x58
;***************************************************************************
Clear text screen in first layer and leave cursor at first position
;***************************************************************************
movlw 0x4C
call lcd_cmd
movlw 0x46
call lcd_cmd
movlw 0x00
call lcd_data
movlw 0x00
call lcd_data
movlw 0x1E ;30 lines of text on screen = 240/8
movwf J
loopj1 movlw 0x28 ;40 characters per line = 320/8
movwf K
loopk1 movlw 0x42 ;LCD memory write command
call lcd_cmd
movlw 0x20 ;ASCII space
call lcd_data
decfsz K, 1 ;K=K-1, jump if K=0
goto loopk1
clrwdt
decfsz J, 1 ;J=J-1, jump if J=0
goto loopj1
;***************************************************************************
;Clear graphics screen in second layer and leave cursor at first position
;***************************************************************************
movlw 0x5B ;Set overlay parameter to graphic mode
call lcd_cmd
movlw 0x09
call lcd_data
movlw 0x4C ;Cursor movement to right
call lcd_cmd
movlw 0x46 ;Set cursor address to layer 1
call lcd_cmd
movlw 0x80
call lcd_data
movlw 0x25
call lcd_data
movlw 0x82 ;240 scan lines of graphics screen
movwf J
loopj2 movlw 0x25 ;40 bytes per line = 320/8
movwf K
loopk2 movlw 0x42 ;LCD memory write command
call lcd_cmd
movlw 0x00 ;ASCII zero
call lcd_data
decfsz K, 1 ;K=K-1, jump if K=0
goto loopk2
clrwdt
decfsz J, 1 ;J=J-1, jump if J=0
goto loopj2
movlw 0x82 ;240 scan lines of graphics screen
movwf J
loopj3 movlw 0x25 ;40 bytes per line = 320/8
movwf K
loopk3 movlw 0x42 ;LCD memory write command
call lcd_cmd
movlw 0x00 ;ASCII zero
call lcd_data
decfsz K, 1 ;K=K-1, jump if K=0
goto loopk3
clrwdt
decfsz J, 1 ;J=J-1, jump if J=0
goto loopj3
Display DISP ON instruction
0x59
0x54
Display CSRW instruction
0x46
0x00
0x00
Display MWRITE instruction
0x20
0x45
0x50
0x53
0x4F
0x4E
Hasta aqui todo parecia muy bonito pero cuando quise poner "EPSON ELECTRONICS", ya no aparecio nada. Pero me he dado cuenta que si pongo "EPSON ELECTRONI" si lo muestra por que solo despliega cadenas completas de caracteres en multiplos de 5 cada cadena. Asi que para poner "EPSON ELECTRONICS" tuve que hacer:
Codigo:
Display MWRITE instruction
0x45
0x50
0x53
0x4F
0x4E
0x20
0x45
0x4C
0x45
0x43
0x54
0x52
0x4F
0x4E
0x49
0x43
0x53
0x20
0x20
0x20
Estoy tratando de entender por que sucede esto, alguien me lo podria explicar?...
Por cierto, solo estoy poniendo en assembler el codigo del borrado de los layers de texto y grafico pero no estoy seguro de que esten correctos, es decir, si se haga asi, aunque limpia bien el LCD pero ajustando el contraste el fondo parece azul y las letras parecen un poco tenues, si se ven pero me gustaria mejorarlo.
En fin que de ahora en adelante comienza el trabajo duro, que es realizar varias pantallas que van a interactuar por medio de menus y submenus.
He tratado de adjuntar los archivos correspondientes pero no me deja, espero que alguien me haga favor de subirlos, quien se apunta? Digame como.
Gracias
Hector Rosales