Autor Tema: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)  (Leído 7664 veces)

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

Desconectado garquetti

  • PIC10
  • *
  • Mensajes: 14

Estimados amigos: En agradecimiento a los conocimientos que he adquirido en este foro, les acerco un proyecto con el display del celular Motorola C115 con PIC16F628A.  En Argentina este celu es muy popular y creo que es muy facil conseguir alguno que no funcione, en mi caso use uno que me regalo un amigo luego de que se le cayera al inhodoro (previa desinfeccion  :D).
Bien vamos al grano, este display utiliza el controlador ST7558 de Sitronix (mas abajo pongo el link al DS). Para controlarlo utilice el Pic16f628a, del cual solo se usan 3 pines, la comunicacion es I2c y el tercero es el de reset. El programita en PBP que adjunto realiza las siguientes funciones:
Resetea por hard el display
Inicializa
Limpia la pantalla
Escribe una palabra
Alterna entre video normal e inverso.

Para preparar el display para su uso, desarme el celular y despegue el flat de la placa y luego solde con un soldador de punta fina ocho conductores finos y listo. Para la alimentacion del circuito use la bateria del mismo celular.
Espero que sea de utilidad y estoy atento sus comentarios.
Nuevamente gracias a todos  :-/

Código: [Seleccionar]
****************************************************************
'*  Name    : C115.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25/04/2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Define osc 4
cmcon=7 'para f628a
Rst var portb.4
Clk var portb.7
Dat var portb.6
Contador var word
Dato var byte
TRISB  = 0 'puerto b como salida
OPTION_REG.7 = 0 'activar pull up  portb

'Reset RB4
'Datos RB6
'Clock RB7



rst = 0
dat = 1
clk = 1
Pause 200
rst = 1



ini:
'inicio i2c
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = %00000000 ' Bit de Control A0=0         00h
Gosub Enviar
dato = %00101110 ' MXMY                         2eh
gosub enviar
Dato = %00100001 ' Extend Set H=1               21h
Gosub enviar
Dato = %00010010 ' Bias                         12h
gosub enviar
Dato = %11000000 ' VOP                          c0h
Gosub enviar
Dato = %00001011 ' Boost                        0bh
Gosub enviar
Dato = %00100000 ' Normal Set H=0          20h
Gosub enviar
Dato = %00010001 ' PRS                          11h
Gosub enviar
Dato = %00001101 ' video Normal/Invertido               0ch normal 0dh invertido
Gosub enviar
gosub terminar
nop
nop




clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
Dato = %00100000 ' Normal Set H=0               20h
Gosub enviar
Dato = %00001000 ' Display off
gosub Enviar
gosub terminar

clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = $40 ' Bit de Control      A0=1                 40h
Gosub Enviar


Dato = %00000000 ' escribe
for contador = 1 to 4080
gosub Enviar
next
gosub terminar

clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
Dato = %00100000 ' Extend Set H=0               20h
Gosub enviar
Dato = $C ' Display on
gosub Enviar
gosub terminar

clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = $40 ' Bit de Control A0=1                    40h
Gosub Enviar

for contador = 1 to 25
dato = %00000000 ' Escribe
gosub enviar
next

dato = %11111111 ' Escribe    C
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %11000011 ' Escribe
gosub enviar
dato = %11000011 ' Escribe
gosub enviar
dato = %11000011 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar

dato = %11111111 ' Escribe   U
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %11000000 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar

dato = %11011111 ' Escribe  S
gosub enviar
dato = %11011111 ' Escribe
gosub enviar
dato = %11011011 ' Escribe
gosub enviar
dato = %11111011 ' Escribe
gosub enviar
dato = %11111011 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar

dato = %11111111 ' Escribe H
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %00011000 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar

dato = %11111111 ' Escribe M
gosub enviar
dato = %11111110 ' Escribe
gosub enviar
dato = %00001100 ' Escribe
gosub enviar
dato = %11111110 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar


dato = %11111111 ' Escribe A
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %00110011 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar

dato = %11111111 ' Escribe N
gosub enviar
dato = %11111100 ' Escribe
gosub enviar
dato = %00110000 ' Escribe
gosub enviar
dato = %01111111 ' Escribe
gosub enviar
dato = %11111111 ' Escribe
gosub enviar

dato = %00000000 ' Escribe
gosub enviar
gosub terminar


for contador = 1 to 1000
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = $0 ' Bit de Control A0=0                      0h
Gosub Enviar
dato = $20 ' Extend Set           20h
Gosub Enviar
Dato = $C    ' video Normal/Invertido               0ch normal 0dh invertido
Gosub enviar
gosub terminar
pause 400
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = $0 ' Bit de Control A0=0          0h
Gosub Enviar
dato = $20 ' Extend Set           20h
Gosub Enviar
Dato = $D    ' video Normal/Invertido               0ch normal 0dh invertido
Gosub enviar
gosub terminar
pause 400
next


Dat = 0
clk = 0

end








Enviar:
dat = dato.7
clk = 1
clk = 0

dat = dato.6
clk = 1
clk = 0


dat = dato.5
clk = 1
clk = 0


dat = dato.4
clk = 1
clk = 0


dat = dato.3
clk = 1
clk = 0


dat = dato.2
clk = 1
clk = 0


dat = dato.1
clk = 1
clk = 0


dat = dato.0
clk = 1   
clk = 0

clk = 1
clk = 0


return

 

terminar:
dat = 0
clk = 1
dat = 1
return



end

El link al DS http://www.sitronix.com.tw/sitronix/product.nsf/Doc/ST7558?OpenDocument
« Última modificación: 26 de Mayo de 2008, 21:16:16 por garquetti »

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Display Motorola C115 y 16f628 en PBP
« Respuesta #1 en: 24 de Mayo de 2008, 12:43:56 »
Perfecto aporte!!! Ya que aqui no se consiguen muchos los display de nokia siempre tan comunes para estos proyectos!!!.. Podrias explicar un poquito como funciona esta libreria ?

Gracias por el aporte"!!
PICMANIACO!

Desconectado garquetti

  • PIC10
  • *
  • Mensajes: 14
Re: Display Motorola C115 y 16f628 en PBP
« Respuesta #2 en: 24 de Mayo de 2008, 21:09:26 »
Facundo: gracias por tu comentario, basicamente este programa implementa la comunicación I2c por soft, luego utilizando la información del datasheet del fabricante, donde estan todos los comandos. Te detallo como funciona el programa.

Definición de  variables
Puerto b como salida
Habilitar resistencias Pull Up

Reset por hard
Código: [Seleccionar]
rst = 0
dat = 1
clk = 1
Pause 200
rst = 1
 

Inicialización de la comunicación I2c
Código: [Seleccionar]
clk = 1
dat = 0
clk = 0

Envio de comandos de inicialización mediante la subrutina Enviar
1 Envia la dirección del dispositivo esclavo a escribir (78H nunca cambia)
2 Bit de control (en 1 para escribir ram, en este caso esta en 0)
3 Setea MX,MY (modo de escribir, normal o reverso , lo dejamos normal)
4 Seleccionamos el set de instrucciones extendido
5 Setea Bias Ratio (use el del ejemplo del DS)
6 Voltaje de operación
7 Setea Boost (se puede controlar la intensidad del LCD con esta instrucción)
8 Seleccionamos el set de instrucciones normal
9 Set Vlcd (alto o bajo, en este caso alto)
10 Setea video normal o invertido (normal)
 termina la comunicación I2c
Código: [Seleccionar]
terminar:
dat = 0
clk = 1
dat = 1
return

Luego de inicializado apago el display
Código: [Seleccionar]
'Apagar el display
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
Dato = %00100000 ' Extend Set H=0               20h
Gosub enviar
Dato = %00001000 ' Display off
gosub Enviar
gosub terminar

Escribo todo el display con espacios

Código: [Seleccionar]
' Escribir todos los pixel con espacios en blanco
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
dato = $40 ' Bit de control A0 = 1             40h
Gosub Enviar
Dato = %00000000 ' escribe
for contador = 1 to 4080
gosub Enviar
next
gosub terminar

vuelvo a encender el display

Código: [Seleccionar]
Enciende el display
clk = 1
dat = 0
clk = 0
dato = %01111000 ' direccion del dispositivo    78h
gosub enviar
Dato = %00100000 ' Extend Set H=0               20h
Gosub enviar
Dato = $C ' Display on
gosub Enviar
gosub terminar

Bueno ahora empiezo a escribir, creo que el programa esta documentado como para que se entienda, como comentario adicional debo decir que si no se especifica la direccion X,Y donde escribir, empieza a escribir en la esquina superior izquierda del display, y se incrementa automaticamente al escribir nuevamente. De todas maneras todo esta en el datasheet. Cualquier duda consulten. Luego subira alguna foto del aparato.


Desconectado garquetti

  • PIC10
  • *
  • Mensajes: 14
Re: Display Motorola C115 y 16f628 en PBP
« Respuesta #3 en: 26 de Mayo de 2008, 21:04:28 »
Ahi va funcionando modo normal

Desconectado garquetti

  • PIC10
  • *
  • Mensajes: 14
Re: Display Motorola C115 y 16f628 en PBP
« Respuesta #4 en: 26 de Mayo de 2008, 21:10:05 »
En video inverso


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)
« Respuesta #5 en: 27 de Mayo de 2008, 02:10:50 »
Ha quedado muy bien garquetti. Muchas gracias por compartirlo

Desconectado diego_z

  • PIC16
  • ***
  • Mensajes: 225
Re: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)
« Respuesta #6 en: 23 de Septiembre de 2011, 10:55:04 »
 :-/
« Última modificación: 23 de Septiembre de 2011, 11:17:24 por diego_z »
,,,,option,,,,,,,,,,,explicit,,,,,,,

DR800 big a la venta ,solo argentina por privado

Desconectado diego_z

  • PIC16
  • ***
  • Mensajes: 225
Re: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)
« Respuesta #7 en: 02 de Octubre de 2011, 16:42:34 »
expectacular  , gracias por el codigo y la explicacion , y como seria siquiero ubicarme en un punto x de la pantalla para comenzar a escribir sin borrar o reescribir lo que ya esta ? :-/
,,,,option,,,,,,,,,,,explicit,,,,,,,

DR800 big a la venta ,solo argentina por privado

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)
« Respuesta #8 en: 02 de Octubre de 2011, 18:07:02 »
muy buen aporte, lo pondre en mi lista de cosas por hacer  :mrgreen:
"Nada es imposible, no si puedes imaginarlo"

Desconectado diego_z

  • PIC16
  • ***
  • Mensajes: 225
Re: Display Motorola C115 y 16f628 en PBP (Codigo y circuito funcionando)
« Respuesta #9 en: 02 de Octubre de 2011, 18:14:13 »
bien , solucionado
« Última modificación: 03 de Octubre de 2011, 10:08:15 por diego_z »
,,,,option,,,,,,,,,,,explicit,,,,,,,

DR800 big a la venta ,solo argentina por privado