TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: garquetti en 24 de Mayo de 2008, 11:10:35
-
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 :-/
****************************************************************
'* 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
-
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"!!
-
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
rst = 0
dat = 1
clk = 1
Pause 200
rst = 1
Inicialización de la comunicación I2c
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
terminar:
dat = 0
clk = 1
dat = 1
return
Luego de inicializado apago el display
'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
' 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
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.
-
Ahi va funcionando modo normal
-
En video inverso
-
Ha quedado muy bien garquetti. Muchas gracias por compartirlo
-
:-/
-
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 ? :-/
-
muy buen aporte, lo pondre en mi lista de cosas por hacer :mrgreen:
-
bien , solucionado