TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: dj_valle en 15 de Febrero de 2006, 06:56:00
-
hola, estoy practicando con un lcd nokia 3310. He mirado el datasheet y tengo unas preguntas con un programa pequeño que hice para activar la pantalla.
¿cual es el tiempo de espera del reloj para que lo recepcion el lcd? ¿las señales de reloj se las puedes dar por un puerto del micro (uso un 16f876)?
os dejo el programa a ver que tengo mal:
LIST P=PIC16F876
INCLUDE <P16f876.INC>
#DEFINE BANK0 BCF STATUS,5
#DEFINE BANK1 BSF STATUS,5
DREG1 EQU 0X20
ORG 0
GOTO INICIO
INICIO
BANK1
;***** CONFIGURACION DE LOS PUERTOS COMO SALIDAS ******
MOVLW B"000000"
MOVWF TRISA
MOVLW B"00000000"
MOVWF TRISB
MOVLW B"00000000"
MOVWF TRISC
BANK0
BCF PORTC,3 ;SEÑAL DE RELOJ
BSF PORTC,1 ;D/C = 0
BSF PORTC,0 ;ACTIVAMOS EL CHIP "SCE" POR BAJO
BSF PORTC,2
BCF PORTC,2 ;APLICAMOS UN RESET MENOS 100MS
CALL DELAY ;TIEMPO APLICACION RESET
BSF PORTC,2 ;QUITAMOS RESET
;********* ACTIVAMOS EL CHIP PD = 0 -- 00100001 CHIP ACTIVO, MOVIMIENTO HORIZONTAL, EXTENDED INSTRUCTION SET
BCF PORTC,5 ;COLOCAMOS 0
BSF PORTC,3
BCF PORTC,3 ;"0"
BSF PORTC,3
BCF PORTC,3 ;"00"
BSF PORTC,5
BSF PORTC,3
BCF PORTC,3 ;"001"
BCF PORTC,5
BSF PORTC,3
BCF PORTC,3 ;"0010"
BSF PORTC,3
BCF PORTC,3 ;"00100"
BSF PORTC,3
BCF PORTC,3 ;"001000"
BSF PORTC,3
BCF PORTC,3 ;"0010000"
BSF PORTC,5
BSF PORTC,3
BCF PORTC,3 ;00100001"
BCF PORTC,5
;********* ENVIAMOS DATOS PARA PONER TODOS ENCENDIDOS *********
BUCLE
;********* SECUENCIA D/C = 0 -- 00001001
BCF PORTC,5 ;COLOCAMOS 0 EN PUERTO
BSF PORTC,3 ;MANDAMOS SEÑAL DE RELOJ
BCF PORTC,3
BSF PORTC,3
BCF PORTC,3 ;"00"
BSF PORTC,3
BCF PORTC,3 ;"000"
BSF PORTC,3
BCF PORTC,3 ;"0000"
BSF PORTC,5 ;QUEREMOS MANDAR 1
BSF PORTC,3
BCF PORTC,3 ;"00001"
BCF PORTC,5 ;COLOCAMOS UN 0
BSF PORTC,3
BCF PORTC,3 ;"000010"
BSF PORTC,3
BCF PORTC,3 ;"0000100"
BSF PORTC,5 ;MANDAMOS 1
BSF PORTC,3
BCF PORTC,3 ;"00001001"
BCF PORTC,5
;********* TODO MANDADO **********
GOTO BUCLE
DELAY
MOVLW 0XFF
MOVWF DREG1
DELAY1
DECFSZ DREG1
GOTO DELAY1
NOP
RETURN
END
no se si se podra hacer asi las señales del reloj, espero alguien me puede guiar un poco, gracias de antemano.
-
por cierto estoy utilizando divisores de tension a la entrada de los pines del lcd, para obtener los 3"3v, sabeis si le meto directamente la salida del puerto al lcd pasa algo (con los 5v)? es para asegurar que llegan bien los datos...
tambien añadi ahora la configuracion de las temeperaturas, el bias y nada de nada, sigue sin encender.
el lcd funciona pq con un programa anterior que use se me encendia y se me apagaban todos los pixeles.
-
por cierto estoy utilizando divisores de tension a la entrada de los pines del lcd, para obtener los 3"3v, sabeis si le meto directamente la salida del puerto al lcd pasa algo (con los 5v)? es para asegurar que llegan bien los datos...
tambien añadi ahora la configuracion de las temeperaturas, el bias y nada de nada, sigue sin encender.
el lcd funciona pq con un programa anterior que use se me encendia y se me apagaban todos los pixeles.
las señales las tngo en el puerto C:
rc0 - sce
rc1 - d/c
rc2 - res
rc3 - sck
rc5 - sdin
-
Puedes buscar la librería que hizo Nocturno para esta pantalla. Este escrita en C30 pero puedes resolver tus dudas echandole un vistazo.
-
no me soluciona nada la libreria, sabes el tiempo que hay que emplear entre mandar un dato y el siguiente, o entre las señales de reloj?
sabes si hay que poner el chip disable cada vez que mandas una linea de programa? es que en algunos ejemplos lo vi asi, en otros no. la mayoria estan en C y no me aclaro.
un saludo. y gracias
LIST P=PIC16F876
INCLUDE <P16f876.INC>
#DEFINE BANK0 BCF STATUS,5
#DEFINE BANK1 BSF STATUS,5
#DEFINE SCK PORTB,1
#DEFINE SDIN PORTB,2
#DEFINE DC PORTB,3
#DEFINE SCE PORTB,4
#DEFINE RESET PORTB,5
;**** REGISTROS CONTADORES DE TEMPORIZACION *********
DREG1 EQU 0X20
DREG2 EQU 0X21
DREG3 EQU 0X22
DREG4 EQU 0X23
DREG5 EQU 0X24
ORG 0
GOTO INICIO
INICIO
BANK1
;***** CONFIGURACION DE LOS PUERTOS COMO SALIDAS ******
MOVLW B"000000"
MOVWF TRISA
MOVLW B"00000000"
MOVWF TRISB
MOVLW B"00000000"
MOVWF TRISC
BANK0
START
CALL PAUSE
BSF DC
BSF SCE
;********* RESETEO LCD **********
BSF RESET
CALL PAUSE
BCF RESET
;********* MANDAMOS 00100001 CHIP ACTIVE, HORIZONTAL ADDRESSING, EXTENDED INSTRUCTION
BCF DC ;MODE SELECT
BCF SCE ;CHIP ENABLE
; EMPEZAMOS A MANDAR DATOS
BCF SCK
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"0"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00"
BSF SDIN ;PREPARAMOS UN 1
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"001"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"0010"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00100"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"001000"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"0010000"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00100001"
;***** ENVIO COMPLETO **********
BSF SCE ;CHIP DISABLE
;**** MANDAMOS 11001011 VOP
BCF SCE ;CHIP ENABLE
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"1"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"11"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"110"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"1100"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"11001"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"110010"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"11001011"
;**** ENVIO COMPLETO
BSF SCE ;CHIP DISABLE
;***** MANDAMOS 00010011" ;bias System
BCF SCE ;CHIP ENABLE
BCF SCK
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"000"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"0001"
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK
BCF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"0000100"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00001001"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"000010011"
BSF SCE
BUCLE
;***** MANDAMOS PANTALLA NEGRA -- 00001001 ****
BCF SCE ;CHIP ENABLE
;***** EMPEZAMOS A MANDAR DATOS ****
BCF SCK
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"0"
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"00"
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"000"
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"0000"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00001"
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"000010"
BCF SDIN ;PREPARAMOS UN CERO
CALL DELAY
BSF SCK ;SEÑAL DE RELOJ
CALL DELAY
BCF SCK ;"0000100"
BSF SDIN
CALL DELAY
BSF SCK
CALL DELAY
BCF SCK ;"00001001"
;***** ENVIO COMPLETO ******
BSF SCE ;CHIP DISABLE
GOTO BUCLE
PAUSE
MOVLW 0XFF
MOVWF DREG3
D3 MOVLW 0XFF
MOVWF DREG4
D1 MOVLW 0XFA
MOVWF DREG5
D2 DECFSZ DREG5
GOTO D2
DECFSZ DREG4
GOTO D1
DECFSZ DREG3
GOTO D3
RETLW 00
DELAY
MOVLW 0XFF
MOVWF DREG1
DELAY1
MOVLW 0XFF
MOVWF DREG2
DELAY2
DECFSZ DREG2
GOTO DELAY2
DECFSZ DREG1
GOTO DELAY1
RETLW 00
END