Autor Tema: Display LCD nokia 6015 nokia 3586 chip S1D15G14 ejemplo de uso  (Leído 3120 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado yerflow

  • PIC10
  • *
  • Mensajes: 3
    • Yerflow
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 :P,
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.pdf


los 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#msg254862




LES DEJO EL CODIGO DE UN EJEMPLO EN PIC BASIC PRO (PBP)
PIC 18F4550


Código: [Seleccionar]






'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  :mrgreen:
« Última modificación: 15 de Junio de 2010, 10:58:19 por yerflow »

Desconectado manuel_zazu

  • PIC10
  • *
  • Mensajes: 2
Re: Display LCD nokia 6015 nokia 3586 chip S1D15G14 ejemplo de uso
« Respuesta #1 en: 29 de Julio de 2010, 03:14:33 »
esta excelente, ahora quiero saber si ese chip(s1d15g14)viene con el display, estaba a punto de comenzar a trabajar con el Philips PCF8833, hace tiempo J1M colgo informacion de como usarlo y tenia un pequeño programa que pasaba cualquier imagen (teniendo como limite el tamaño porsu pusto) a codigo para ser grabado en el micro, pero tu analizador de espectro esta de la p... atada, y mi profe de tele esta traumado con que le haga un analizador de espectro, parece que voy a seguir tu proyecto q esta buenisimo, y tendre q aprender este dialiecto de basic pbp, nunk lo habia usado pero bueno caballero un dialecto mas ya q ps... felicitaciones y gracias por compartir tu proyecto....


 

anything