como estamos !
Aquí les dejo una pequeña guía para usar un display del celular nokia6015 y nokia3586
q se puede encontrar entre celulares q alguna vez tuvimos
,
o en una feria de pulgas cerca del barrio, a un bajo precio, como para prototipo.- suerte
Primero: el chip o driver de esta pantalla es el S1D15G14.
Resolución 98x68 pixeles a color
Bus de Datos tipo I2C.
datasheet:
http://www.mikrocontroller.net/attachment/2528/D15G14E_14_030526.pdflos colores se logran mandando el byte de pixel:
-rojo 11100000
-verde 00011100
-azul 00000011
los demás colores se logran con la combinación de estos.
IMPORTANTE
este display trabaja con max 3,3volts
por eso se usan estas resistencias y diodos zener para no dañar el integrado.
pines del display
proyecto q tiene esta pantalla -->
http://www.todopic.com.ar/foros/index.php?topic=30519.msg254862#msg254862LES DEJO EL CODIGO DE UN EJEMPLO EN PIC BASIC PRO (PBP)
PIC 18F4550
'ADC SETUP PARA EL EJEMPLO
'CONECTEN UNA POTENSIOMETRO A EL PIN 2 (PORTA.0 ,ADC0) PARA SUMINISTRAR VOLTAGE ENTRE 0 Y 5VOLT AL ADC PARA EL EJEMPLO
LATA = 0
TRISA = %00001011 ' Set PORTA to 2 input
ADCON0 = %00000001 ' PORTA.0 is analog ADON MODULE ENABLED
'7 6 5 4 3 2 1 0
ADCON1 = %00001110 ' AN0 is analog VSS VREF- VDD VREF+ — — VCFG0 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0
' 1 = ENABLE ' VREF- VREF+
ADCON2 = %00000000 ' CLOCK AND TAD
'LCD GRAFICO
'VVVVVVVVVVVVVVVVVV VARIABLES VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
'PORTS
SCLK VAR PORTA.5 'CLOCK I2C
SDATA VAR PORTE.0 'DATA I2C
CS VAR PORTE.1 'ESTE PIN SE PONE PIN=LOW=0 ANTES DE ENVIAR LOS DATOS POR EL BUS I2C
LCDRESET VAR PORTE.2 'ESTE PIN PERMANECE HI=1
'ESCRITURA
X VAR BYTE BANK0 'EJE X
Y VAR BYTE BANK0 'EJE Y
DATO0 VAR BYTE BANK0 'ESTE BYTE TRANSPORTA EL BYTE Q SE ESCRIBIRÁ EN CADA PIXEL
DC VAR BIT BANK0 'ESTE BIT SI (ES =0 EL BYTE ENVIADO POR EL BUS I2C ES UN COMANDO) Y (SI ES =1 EL BYTE ES COLOR DEL PIXEL)
LIN1 VAR BYTE(98)BANK0 'LINEA DIBUJADA
'PROGRAMA
I VAR BYTE
SAM VAR BYTE
I3 VAR BYTE
'ESTAS VARIABLES NO LAS USO EN EL PROGRAMA, PERO ES PARA DAR LA IDEA
'COLORES ***********************
'*
'PRIMARIOS '*
BLANCO CON %11111111 '*
NEGRO CON %00000000 '*
ROJO CON %11100000 '*
VERDE CON %00011100 '*
AZUL CON %00000011 '*
'*
'*
'SECUNDARIO '*
MORADO CON %11100011 '*
AMARI CON %11111100 '*
VERDE_OSCURO CON 4 '*
AZUL_OSCURO CON 1 '*
BURDEO CON 32 '*
CAFE cON 36 '*
VIOLETA_OSCURO CON 33 '*
ROSADO1 CON 97 '*
ROSADO2 CON 161 '*
ROSADO3 CON 225 '*
'*******************************
'COLOR DISPLAY
COLOR VAR BYTE
CONTRASTE VAR BYTE
'******** OUT PORTS *****************************************************************
HIGH SDATA
HIGH SCLK
HIGH CS
HIGH LCDRESET
PAUSE 500 'PAUSE STARTUP
GOSUB INITIALIZELCD' ESTO ES NECESARIO PARA INICIAR EL DISPLAY ((IMPORTANTE))
'PROGRAMA
LOOP:'EJEMPLO DE USO (((UN OSCILOSCOPIO (DE MUY BAJA FRECUENCIA))))
ADCIN 0, SAM
SAM=SAM/3 ' ESTO ES PARA QUE LO TOMADO POR EL ADC (EJ.=255) SE PUEDA VER EN LA LINEA DE ARRIBA DEL DISPLAY
FOR I = 0 TO 96 '...............
'
LIN1(I) = LIN1(I+1) 'ESTO ES PARA PASAR LA MUESTRA (UN PIXEL)HACIA LA IZQUIERDA
'
NEXT I '.......................'
LIN1(97)= SAM 'PONE EL PIXEL RECOGIDO A LA DERECHA DEL DISPLAY
GOSUB DISPLAYLINES
GOTO LOOP
''''''''''' SUBRUTINAS '''''''''''''''''''
DISPLAYLINES:
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
LOW CS ; CS LOW
DC = 0 : DATO0 = $2C 'COMMAND
GOSUB SENDOUT
DC = 1 'DATA
FOR Y = 0 TO 66
FOR X = 0 TO 97
DATO0 = NEGRO
I3 = 0
IF X = 8 THEN DATO0 = %00011100 'GRID Y
IF X = 18 THEN DATO0 = %00011100 'GRID Y
IF X = 28 THEN DATO0 = %00011100 'GRID Y
IF X = 38 THEN DATO0 = %00011100 'GRID Y
IF X = 48 THEN DATO0 = AMARI 'GRID Y EJ: CON CONSTANTE
IF X = 58 THEN DATO0 = %00011100 'GRID Y
IF X = 68 THEN DATO0 = %00011100 'GRID Y
IF X = 78 THEN DATO0 = %00011100 'GRID Y
IF X = 88 THEN DATO0 = %00011100 'GRID Y
IF Y = 11 THEN DATO0 = %11100000 'GRID X
IF Y = 22 THEN DATO0 = %00100010 'GRID X
IF Y = 33 THEN DATO0 = %00100011 'GRID X
IF Y = 44 THEN DATO0 = %01100011 'GRID X
IF Y = 55 THEN DATO0 = %11100011 'GRID X
'MARCO
IF Y = 0 THEN DATO0 = MORADO 'GRID X
IF Y = 66 THEN DATO0 = MORADO 'GRID X
IF X = 0 THEN DATO0 = MORADO 'GRID Y
IF X = 97 THEN DATO0 = MORADO 'GRID Y
IF Y < LIN1(X) THEN DATO0 = AZUL ' LINEA DIBUJADA
'IF Y = LIN1(X) THEN DATO0 = AZUL ' LINEA DIBUJADA TRATEN ESTA TABIEN PERO DESABILITEN LA ANTERIOR
GOSUB SENDOUT
NEXT X
NEXT Y
HIGH CS ; CS HIGH
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
RETURN
INITIALIZELCD:' ESTO ES NECESARIO PARA INICIAR EL DISPLAY ((IMPORTANTE))
'HARDWARERESET:
PAUSE 20
LOW LCDRESET
PAUSE 20
HIGH LCDRESET
PAUSE 20
'SOFTWARERESET:
LOW CS
DC = 0 : DATO0 = $01 ' COMMAND
GOSUB SENDOUT
HIGH CS
PAUSE 10
'INITIALESCAPE:
LOW CS
DC = 0 : DATO0 = $C6 ' COMMAND
GOSUB SENDOUT
HIGH CS
PAUSE 10
'REFRESHSET:
LOW CS
DC = 0 : DATO0 = $B9 ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = $00 ' DATA
GOSUB SENDOUT
HIGH CS
PAUSE 10
'DISPLAYCONTROL:' PROGRAMAR ANTES DE SLEEP OUTCOMMAND
LOW CS
DC = 0 : DATO0 = $B6 ' COMMAND
GOSUB SENDOUT
DC = 1 ' DATA
DATO0 = 128
GOSUB SENDOUT
DATO0 = 128
GOSUB SENDOUT
DATO0 = 129
GOSUB SENDOUT
DATO0 = 84
GOSUB SENDOUT
DATO0 = 69
GOSUB SENDOUT
DATO0 = 82
GOSUB SENDOUT
DATO0 = 67
GOSUB SENDOUT
HIGH CS
PAUSE 10
'GREYSCALE0:' PROGRAMAR ANTES DE SLEEP OUTCOMMAND
LOW CS
DC = 0 : DATO0 = $B3 ' COMMAND
GOSUB SENDOUT
DC = 1 ' DATA
DATO0 = 1
GOSUB SENDOUT
DATO0 = 2
GOSUB SENDOUT
DATO0 = 3
GOSUB SENDOUT
DATO0 = 4
GOSUB SENDOUT
DATO0 = 5
GOSUB SENDOUT
DATO0 = 6
GOSUB SENDOUT
DATO0 = 7
GOSUB SENDOUT
DATO0 = 8
GOSUB SENDOUT
DATO0 = 9
GOSUB SENDOUT
DATO0 = 10
GOSUB SENDOUT
DATO0 = 11
GOSUB SENDOUT
DATO0 = 12
GOSUB SENDOUT
DATO0 = 13
GOSUB SENDOUT
DATO0 = 14
GOSUB SENDOUT
DATO0 = 15
GOSUB SENDOUT
HIGH CS
PAUSE 10
'GREYSCALE1:' PROGRAMAR ANTES DE SLEEP OUTCOMMAND
LOW CS
DC = 0 : DATO0 = $B4 ' COMMAND
GOSUB SENDOUT
DC = 1 ' DATA
DATO0 = 1
GOSUB SENDOUT
DATO0 = 2
GOSUB SENDOUT
DATO0 = 3
GOSUB SENDOUT
DATO0 = 4
GOSUB SENDOUT
DATO0 = 5
GOSUB SENDOUT
DATO0 = 6
GOSUB SENDOUT
DATO0 = 7
GOSUB SENDOUT
DATO0 = 8
GOSUB SENDOUT
DATO0 = 9
GOSUB SENDOUT
DATO0 = 10
GOSUB SENDOUT
DATO0 = 11
GOSUB SENDOUT
DATO0 = 12
GOSUB SENDOUT
DATO0 = 13
GOSUB SENDOUT
DATO0 = 14
GOSUB SENDOUT
DATO0 = 15
GOSUB SENDOUT
HIGH CS
PAUSE 10
'VOLTCONTROL:
LOW CS
DC = 0 : DATO0 = $BA ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 64 ' DATA1
GOSUB SENDOUT
DC = 1 : DATO0 = %11111111 ' DATA2
GOSUB SENDOUT
HIGH CS
PAUSE 10
'GAMMACURVE:
LOW CS
DC = 0 : DATO0 = $B5 ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 1 ; DATA
GOSUB SENDOUT
HIGH CS
PAUSE 10
'POWERCONTROL:
LOW CS
DC = 0 : DATO0 = $BE ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 4 ' DATA
GOSUB SENDOUT
HIGH CS
PAUSE 10
'PIXELFORMAT:
LOW CS
DC = 0 : DATO0 = $3A ;COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = %00000010 ;DATA '8BIT PIXEL
GOSUB SENDOUT
HIGH CS
PAUSE 10
LOOKUPTABLE:
LOW CS
DC = 0 ' COMMAND
DATO0 = $2D
GOSUB SENDOUT
DC = 1 ; DATA
'RED
DATO0 = 0
GOSUB SENDOUT
DATO0 = 3
GOSUB SENDOUT
DATO0 = 5
GOSUB SENDOUT
DATO0 = 7
GOSUB SENDOUT
DATO0 = 9
GOSUB SENDOUT
DATO0 = 11
GOSUB SENDOUT
DATO0 = 13
GOSUB SENDOUT
DATO0 = 15
GOSUB SENDOUT
'GREEN
DATO0 = 0
GOSUB SENDOUT
DATO0 = 3
GOSUB SENDOUT
DATO0 = 5
GOSUB SENDOUT
DATO0 = 7
GOSUB SENDOUT
DATO0 = 9
GOSUB SENDOUT
DATO0 = 11
GOSUB SENDOUT
DATO0 = 13
GOSUB SENDOUT
DATO0 = 15
GOSUB SENDOUT
'BLUE
DATO0 = 0
GOSUB SENDOUT
DATO0 = 5
GOSUB SENDOUT
DATO0 = 10
GOSUB SENDOUT
DATO0 = 15
GOSUB SENDOUT
HIGH CS
PAUSE 10
MADCTL:
LOW CS
DC = 0 : DATO0 = $36 ' COMMAND (B7=0 TOP TO BOTTOM) (B6=1 RIGHT TO LEFT)
GOSUB SENDOUT '
DC = 1 : DATO0 = %10010001 ' DATA (B5=0 NOT INVERTED) (B4=0 TOP TO BOTTOM)
GOSUB SENDOUT '
HIGH CS ' (B3=0 RGB) (B2 Y B1= 0) (B0=0 NORMAL)
PAUSE 10
VSCRSADD:
LOW CS ; CS LOW
DC = 0 : DATO0 = $37 ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 128 ' DATA
GOSUB SENDOUT '
HIGH CS ; CS HIGH
PAUSE 10
SLEEPOUT:
LOW CS ; CS LOW
DC = 0 : DATO0 = $11 ' COMMAND
GOSUB SENDOUT
HIGH CS ; CS HIGH
PAUSE 10
TEMPERGRADSET:
LOW CS ; CS LOW
DC = 0 : DATO0 = $B7 ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 0 ; DATA
FOR I = 1 TO 14
GOSUB SENDOUT
NEXT I
HIGH CS ; CS HIGH
PAUSE 10
BOOSTERVOLTON:
LOW CS ; CS LOW
DC = 0 : DATO0 = $03 ' COMMAND NORMAL
GOSUB SENDOUT
HIGH CS ; CS HIGH
PAUSE 500 ; WAIT, VOLT = ESTABLE
INVERSIONCOLORS:
LOW CS ; CS LOW
DC = 0 : DATO0 = $21 ' COMMAND NORMAL
GOSUB SENDOUT
HIGH CS ; CS HIGH
PAUSE 10
INITCONTRAST:
LOW CS ; CS LOW
DC = 0 : DATO0 = $25 ' COMMAND
GOSUB SENDOUT
DC = 1 : DATO0 = 68 ; DATA MAX 127
GOSUB SENDOUT
HIGH CS ; CS HIGH
PAUSE 10
DISDPLAYON:
LOW CS ; CS LOW
DC = 0 : DATO0 = $29 ' COMMAND
GOSUB SENDOUT
HIGH CS ; CS HIGH
PAUSE 10
RETURN
'RUTINA DE COMUNICACIÓN PROTOCOLO I2C PARA DISPLAY CHIP S1D15G14
SENDOUT:
ASM
BCF _SCLK ;CLOCK BIT CLEAR _
BCF _SDATA ;DATA BIT CLEAR _
BTFSC _DC ;BIT 8 DC SKIP IF DC = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,7 ;BIT 7 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,6 ;BIT 6 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,5 ;BIT 5 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,4 ;BIT 4 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,3 ;BIT 3 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,2 ;BIT 2 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,1 ;BIT 1 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
BTFSC _DATO0,0 ;BIT 0 DATA BYTE SKIP IF = 0
BSF _SDATA ;SDATA BIT SET
BSF _SCLK ;
BCF _SDATA ;DATA BIT CLEAR _
BCF _SCLK ;CLOCK BIT CLEAR _
ENDASM
RETURN
Espero que les ayude en sus proyectos dejen sus comentarios y preguntas.
Saludos