Autor Tema: SPI y LCD NOKIA 3310  (Leído 1481 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
SPI y LCD NOKIA 3310
« en: 10 de Marzo de 2012, 15:25:31 »
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:

Código: [Seleccionar]
#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




Código: [Seleccionar]
;_______________________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

Código: [Seleccionar]
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

Código: [Seleccionar]
;********************** 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

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: SPI y LCD NOKIA 3310
« Respuesta #1 en: 10 de Marzo de 2012, 23:23:02 »
Hola, me di cuenta que la LCD no acepta datos, solo los comandos, y no se por que, no puedo darme cuenta cual es el error.
Si me pueden ayudar se los agradeceré.
Saludos

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: SPI y LCD NOKIA 3310
« Respuesta #2 en: 12 de Marzo de 2012, 09:53:48 »
Hola lo encontre, es esta parte:
Código: [Seleccionar]
TX_SPI_D
bcf         LCD_SCE          ;enable display!!!!!!!!!!!!!!!!!!!!!!    PRIMERO VA ESTO!
bsf         LCD_DorC         ;Modo DATO (por defecto)          Y LUEGO ESTO, SINO NO ANDA!!
movwf SSP1BUF ;Transmision por puerto SPI

SPI_DELAY
        NOP
btfss     PIR1,SSP1IF         ;espera a que se envie el dato
goto     SPI_DELAY
bcf     PIR1,SSP1IF         ;borra flag interrupcion
bsf      LCD_SCE         ;display OFF
RETLW   0X00

Gracias y saludos


 

anything