Hola tengo un pic conectado a un LCD 3310 de Nokia pero no puedo borrar la ram del mismo, yo lo grabo con un programa que muestra unas letras y luego le grabo mi programa y me en la pantalla me sigue mostrando los datos del programa anterior, ya no se que estoy haciendo mal probe muchos de loa que hay en la wb, adaptandolo a mi placa y nada. Les paso las configuraciones a ver si ustedes pueden detectar algo:
#define LCD_RST PORTD, 0X03
#define LCD_DorC PORTF, 0X06
#define LCD_SCE PORTF, 0X07
#define LCD_SCLK PORTC, 0X03
#define LCD_SDIN PORTC, 0X05
PRINCIPAL
;******************************* INICIALIZO PORTS *********************************************
Config_PortA
; clrf PORTA ; Se inicializa borrando los Latches
; clrf LATA ; Otras metodo para borar los Latches
movlw 0x01 ; Configura los pines del Puerto A y Puerto B,
movwf ADCON0,ACCESS ; como digitales carga este valor en el REG ADCON1
movlw 0x07 ; Desactiva el modulo comparador1
movwf CM1CON,ACCESS ;
movlw 0x07 ; Desactiva el modulo comparador2
movwf CM2CON,ACCESS ;
movlw b'11111' ; Config del Puerto A [ RA5 RA4 RA3 RA2 RA1 RA0]
movwf TRISA,ACCESS ; [ E E E E E E ]
; CLRF PORTB ; Se inicializa borrando los Latches
movlw b'11111111' ; Config del Puerto B [ RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0]
movwf TRISB,ACCESS ; [ E E E E E E E E ]
; CLRF PORTC ; Se inicializa borrando los Latches
movlw b'10000011' ; Config del Puerto C [ RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0]
movwf TRISC,ACCESS ; [ E S S S S S E E ]
; CLRF PORTD ; Se inicializa borrando los Latches
movlw b'00100000' ; Config del Puerto D [ RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0]
movwf TRISD,ACCESS ; [ S S E S S S S S ]
; CLRF PORTE ; Se inicializa borrando los Latches
movlw b'00100011' ; Config del Puerto E [ RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0]
movwf TRISE,ACCESS ; [ S S E S S S E E ]
; CLRF PORTF ; Se inicializa borrando los Latches
movlw b'00001000' ; Config del Puerto F [ RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0]
movwf TRISF,ACCESS ; [ S S S S E S X X ]
; CLRF PORTG ; Se inicializa borrando los Latches
movlw b'00000011' ; Config del Puerto G [ RG7 RG6 RG5 RG4 RG3 RG2 RG1 RG0]
movwf TRISG,ACCESS ; [ X X X S S S E E ]
; clrf SSP1CON1,ACCESS ; Deshabilito el primer modulo MSSP I2C, BANKED=1 ACCESS=0
;_____________________Configuracion puerto serie SPI________________________
CFG_SPI
movlb h'0F' ; Moving to bank 15 to access ODCON3
bcf ODCON3,SPI1OD ; Turning off open drain outputs
CLRF SSP1CON1
; movlw b'00100010' ;divisor de frecuencia /4
movlw 0X31 ; SPI master, clk/16, ckp=1
movwf SSP1CON1
CLRF SSP1STAT
; movlw b'10000000'
movlw 0x80 ; set up spi port, SPI master,
movwf SSP1STAT
clrf SSP2CON1,ACCESS ; Deshabilito el segundo modulo MSSP I2C, BANKED=1 ACCESS=0
bcf UCON,USBEN,ACCESS ; Desactiva el modulo USB
;_______________________Inicializacion del LCD_______________________________
INIT_LCD
BCF LCD_RST ; Activa reset a nivel bajo
MOVLW D'10'
CALL DELAY ; Retardo en ms, que se carga en W.
BSF LCD_RST ; Activa reset a nivel alto
SET_LCD
MOVLW D'50'
CALL DELAY ; Retardo en ms, que se carga en W.
movlw 0x21 ; Chip enable solamente.
call TX_SPI_C
movlw 0xC5 ; Vop
call TX_SPI_C
movlw 0x13 ; Bias loop
call TX_SPI_C
movlw 0x20 ; Horizontal mode, normal set command.
call TX_SPI_C
movlw 0x09 ; Mod control all dots on 9
call TX_SPI_C
MOVLW D'250'
CALL DELAY ; Retardo en ms, que se carga en W.
movlw 0x08 ; Mod control all dots off.
call TX_SPI_C
MOVLW D'10'
CALL DELAY ; Retardo en ms, que se carga en W.
MOVLW 0X00
CALL X_address ; Posicion X a 0,0
MOVLW 0X00
CALL Y_address ; Posicion y a 0,0
CALL CLEAR_LCD ; Borro la RAM del LCD
MOVLW D'10'
CALL DELAY ; Retardo en ms, que se carga en W.
movlw 0x0C ; Mod control normal.
CALL TX_SPI_C ; Transmicion por SPI de comandos
RETLW 0X00
CLEAR_LCD
MOVLW .6 ; Columnas del caracter
movwf CounterC
PIXEL_84
movlw .84 ; Cantidad de pixel
movwf CounterA
BITS_FILAS
movlw .8 ; Cantidad de bits de las columnas
movwf CounterB
bsf LCD_DorC ; MODO DATO
bcf LCD_SCE ; Enable display!!!!!!!!!!!!!!!!!!!!!!
SPI_to_LCD
MOVLW 0X00
movwf SSP1BUF ;Transmision por puerto SPI
SPI_LOOP
NOP
btfss PIR1,SSP1IF ;espera a que se envie el dato
goto SPI_LOOP
bcf PIR1,SSP1IF ;borra flag interrupcion
nop
nop
decfsz CounterB
goto SPI_to_LCD
; bsf LCD_SCE ; Disable display!!!!!!!!!!!!!!!!!!!!!!
decfsz CounterA
goto BITS_FILAS
decfsz CounterC
goto PIXEL_84
retlw 00
;********************** Posicion X ******************************************
X_address
iorlw b'10000000' ;añade bit de comando
call TX_SPI_C
return
;*********************** Posicion Y *****************************************
Y_address
iorlw b'01000000' ;añade bit de comando
call TX_SPI_C
return
;_________________________video invertido____________________________________
Invert_video
movlw b'00001101' ;mode [Inverse video mode]
call TX_SPI_C
return
;_________________________video normal____________________________________
normal_video
movlw b'00001100' ;mode [normal mode]
call TX_SPI_C
return
;________________Transmision de datos por puerto serie SPI___________________
TX_SPI_C
bcf LCD_DorC ;Modo COMANDO
TX_SPI
bcf LCD_SCE ;enable display!!!!!!!!!!!!!!!!!!!!!!
movwf SSP1BUF ;Transmision por puerto SPI
espera
NOP
btfss PIR1,SSP1IF ;espera a que se envie el dato
goto espera
bcf PIR1,SSP1IF ;borra flag interrupcion
bsf LCD_SCE ;display OFF
bsf LCD_DorC ;Modo DATO (por defecto)
RETLW 0X00
No se porque no puedo borrar la RAM del LCD, la transmición del SPI creo que esta bien ya que puedo invertir los pixel en la pantalla.
Espero pronta sus respuestas
Saludos