Autor Tema: Uso del GLCD de nokia 3510i con Proton  (Leído 1468 veces)

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

Desconectado kamisama

  • PIC16
  • ***
  • Mensajes: 151
Uso del GLCD de nokia 3510i con Proton
« en: 11 de Marzo de 2012, 02:50:23 »
Hola gente:

Hace rato que tenia un par de displays de Nokia, uno blanco y negro 5110 y este color, el b/n funciono de una, pero este... no funciono ni los pocos HEX que habia en la red. Ofuscado le meti 5v a todo... y tampoco funciono =P

En fin, realice otra compra y me puse a intentar probar algo mas que los dos pobres HEX que encontre en la web, por lo menos yo no tuve suerte encontrando codigo para usarlo, y lo mas legible que encontre estaba en ASM pero de AVR. Cosas muy locas.

Finalmente empece de cero, mirando la secuencia de inicializacion y leyendo el PDF. Nada funciono, le di mil vueltas al asunto (por suerte el PROTEUS hace la bronca mas manejable) y como ultima variable encontre (por simple experimentacion) que la pata de CS funciona invertida en cuanto al codigo de AVR (del que no tenia el HEX)... incluso estaba aclarado que iba asi, y por eso nunca lo habia cambiado... pero ya no quedaban mas cosas para cambiar.

En fin, por si a alguien le sirve adjunto el codigo (simple) que use para por lo menos empezar, me falta la parte de texto (como urgencia) pero bueno, seguro a alguien le puede servir, lei que habia una libreria pero no parece no estar mas en la www.

Código: Visual Basic
  1. '****************************************************************
  2. '*  Name    : UNTITLED.BAS                                      *
  3. '*  Date    : 10/03/2012                                        *
  4. '*  Version : 1.0                                               *
  5. '*  Notes   :                                                   *
  6. '*          :                                                   *
  7. '****************************************************************
  8. Device=16F877A
  9. Xtal = 4
  10. Symbol LCD_CS=PORTD.1
  11. Symbol LCD_SDA=PORTD.2
  12. Symbol LCD_RST=PORTD.0
  13. Symbol LCD_CLK=PORTD.3
  14.  
  15. Dim Lcd_Data   As Byte
  16. Dim ColorByte1 As Byte
  17. Dim ColorByte2 As Byte
  18. Dim ColorByte3 As Byte
  19. Dim X          As Word
  20. Dim wRegion    As Word
  21.  
  22.                                 ColorByte1=0xF0'255'%11000110    'RRRRGGGG - Los colores se cargan en 3 bytes para formar 2pixels con esta
  23.                                ColorByte2=0X0F'255'%00111111    'BBBBRRRR    estructura
  24.                                ColorByte3=0X00'255'%11000011    'GGGGBBBB
  25.                                
  26.                                 GoSub Inicializar
  27.                                 GoSub DefinirRegion
  28.  
  29. Demo:                           Lcd_Data=0x2c               'Escribir en la RAM y enviarpixel funciona en modo relleno, todavia no probe mas regiones
  30.                                GoSub EnviarComando         'En el ejemplo esta en modo 12bits
  31.                                For X=0 To wRegion Step 2
  32.                                     ColorByte1=ColorByte1 -1
  33.                                     If ColorByte1=128 Then ColorByte3=ColorByte3 -1
  34.                                     If ColorByte3=128 Then ColorByte2=ColorByte2 +1
  35.                                     GoSub WritePixel
  36.                                     DelayMS 10
  37.                                 Next
  38.                                 DelayMS 5000
  39.                                 GoTo Demo
  40.    
  41. Inicializar:
  42.     Low  LCD_RST
  43.     DelayMS 100    
  44.     High LCD_RST
  45.     Lcd_Data=0x11               'SleepOut
  46.    GoSub EnviarComando
  47.     Lcd_Data=0x29               'Encender Display
  48.    GoSub EnviarComando
  49.     Lcd_Data=0x03               'On Voltage Booster
  50.    GoSub EnviarComando        
  51.     Lcd_Data=0x3a               'Sets pixel format to the following data byte
  52.    GoSub EnviarComando
  53.     Lcd_Data=0x03               'The pixel format 0x03 is 12 bits per pixel
  54.    GoSub EnviarDato
  55.     Lcd_Data=0x36               'Varios Parametros pueden ir MirroY, MirrorX, VerticalWrite, BottonTop, BGR/RGB, etc
  56.    GoSub EnviarComando
  57.     Lcd_Data=0xc0               'Mirror Y
  58.    GoSub EnviarDato
  59.     Lcd_Data=0x25               'Ajustar contraste
  60.    GoSub EnviarComando
  61.     Lcd_Data=0X3C               '
  62.    GoSub EnviarDato
  63.  
  64.     Return
  65.  
  66. DefinirRegion:
  67.     Lcd_Data=0x2b              'Page(Y) Adress Set
  68.    GoSub EnviarComando
  69.     Lcd_Data=001               'y1
  70.    GoSub EnviarDato
  71.     Lcd_Data=66               'y2
  72.    GoSub EnviarDato    
  73.     Lcd_Data=0x2a              'Column Adress Set
  74.    GoSub EnviarComando
  75.     Lcd_Data=001               'x1
  76.    GoSub EnviarDato  
  77.     Lcd_Data=97               'x2
  78.    GoSub EnviarDato  
  79.     wRegion=97*66
  80.     Return
  81.  
  82. SetXYPos:
  83.  
  84.     Return    
  85.  
  86. WritePixel:    
  87.     Lcd_Data=ColorByte1
  88.     GoSub EnviarDato
  89.     Lcd_Data=ColorByte2
  90.     GoSub EnviarDato
  91.     Lcd_Data=ColorByte3    
  92.     GoSub EnviarDato
  93.     Return
  94.      
  95. EnviarDato:
  96.     Low  LCD_CS
  97.     SHOut LCD_SDA,LCD_CLK, msbfirst, [ 0XFF\1,Lcd_Data ]
  98.     High LCD_CS
  99.     Return
  100. EnviarComando:
  101.     Low  LCD_CS
  102.     SHOut LCD_SDA,LCD_CLK, msbfirst, [ 0X00\1,Lcd_Data ]
  103.     High LCD_CS
  104.     Return

Bueno, veo que es bastante simple ahora que lo veo en Proton... no le veo cosas locas como en AVR o caprichos como algunos ejemplos en C para otros micros.
Espero que puedan colar ideas a este thread porque es un LCD no muy caro y consume pocos recursos de pines y de memoria y todo eso.
Texto el siguiente paso...


 

anything