TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: jeremylf en 05 de Agosto de 2009, 21:28:00

Título: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 05 de Agosto de 2009, 21:28:00
-No sabia donde poner esto-

He simulado el proyecto o ejemplo del amigo cucaracha (ESTE (http://webs.ono.com/cucaracha/lcdnokia.htm)) gracias a las librerias y modelos que encontre AQUI (http://www.todopic.com.ar/foros/index.php?topic=21455.0).

(http://img188.imageshack.us/img188/5028/imagevoj.jpg)

Decir que esas librerias y modelos solo funcionan en la version 6.9 de proteus, pues, probando con la 7.2 SP0 y SP2 no funciona nada. Manda un mensaje de error de DLL o algo asi. --- Links eliminados ---. Asi que me resigne a usar el 6.9 que yo tenia por ahi xD

Lo peor de todo, esque en esa pagina no puedo registrarme, para preguntar donde demonios ese hombre consiguio ese proteus para hacerlo funcionar, porque tengo que ser invitado por otro persona u otra mierda asi u.u'

Mi problema con esto esque, necesito usar un PIC18F2550  por el usb y pues, este 6.9 no lo tiene (creo). Por otro lado, todo fuciona correctamente y dejo tanto el hex del mismo cucaracha y su .c tanto del fuente como del nokia 3310.

Haber si alguien con experiencia en el proteus puede hacer funcionar esta libreria en el 7.2  :mrgreen:

Bueno eso es todo creo, con esto yo me inicio a muchos proyectos y por eso creo que lo puse aqui. Espero tambien que sea de ayuda para muchos que buscan librerias y simulaciones y en ccs y con pic18 y bueno eso =D


Salu2.

Editado por Nocturno.
Jeremy, no se pueden poner links a software pirata en el foro. He borrado los links.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: CoreMain en 06 de Agosto de 2009, 21:44:52
Hola jeremylf....
Encontré este modelo para la glcd nokia 3310:

http://www.tanu-sha.narod.ru/nokia3310.html

tienes q descargar Model.zip y poner los archivos en las respectivas carpetas de proteus: models y library.

Yo lo probé con Proteus 7.4 sp3 y funciona ok...

lo unico un poco molestoso, es q el ruso puso una "marca de agua" [demo version] q casi no se nota...

te dejo una captura...
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: jeremylf en 06 de Agosto de 2009, 21:57:17
Es el que uso. Un problema entonces seria que notengo el proteus 7.4 sp3 xD!

Disculpa por los links nocturno, sabia, pero pense que no eran tan directos.


Gracias

EDITO:
Porcierto nocturno, donde tu (en tu libreria para c30) hiciste las fuentes? porque estoy teniendo problemos con eso y quiero unas fuentes mas grandes, casi que ocupen toda la pantalla =S

Salu2
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: Nocturno en 07 de Agosto de 2009, 02:32:48
Están hechas en el propio código de C30. Puedes descargarlo desde mi web.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: jeremylf en 07 de Agosto de 2009, 03:25:50
Están hechas en el propio código de C30. Puedes descargarlo desde mi web.

El C30 tiene un tipo de creador de fuentes para GLCD's ?? A eso me refiero.

Por otro lado, he estado intenando migrar tu codigo al CCS y tengo unos problemas, pues el CCS no permite apuntar a cadenas constantes... Ojala haya una solucion para ello.


Salu2.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: Nocturno en 07 de Agosto de 2009, 03:37:20
Ah, ahora te entiendo. Utilicé este programa FontGen (http://dreamsware.info/)
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: MLO__ en 07 de Agosto de 2009, 11:04:02
Ah, ahora te entiendo. Utilicé este programa FontGen (http://dreamsware.info/)

Solo indica el map hasta la letra o .... ??? es por el trial?

Saludos
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: Nocturno en 07 de Agosto de 2009, 12:05:55
Pues no lo sé  :5}
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: MLO__ en 07 de Agosto de 2009, 14:16:19
Hay otro muy bueno que encontre: BitFontCreator ... se puede configurar a gusto!!  :mrgreen:

(http://img190.imageshack.us/img190/2115/fontcrreator.png)

Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: jeremylf en 07 de Agosto de 2009, 15:20:08
Probe con el Proteus 7.4 SP3 y, como dijiste CoreMain, funciona sin problemas. Ahora ya puedo usar el PIC18F2550, gracias por el dato.

Ese BitFontCreator tb tiene un tiempo de trial, almenos asi donde yo me lo he bajado x.x'

Nocturno, pude adaptar tu codigo para bitmaps (nokia_bitmpas) en CCS, fue necesario reestabler algunos tipos de variables y pues arregle el problema de llamados de matrices constantes creando una matriz temporal y grabandola con memcpy(..):
Código: [Seleccionar]
int8 Temp[504];

While (true)
{
      memcpy(Temp, Tabla_LogoNokia, sizeof(Tabla_LogoNokia));          
      for (i = 83; i > 0; i--)
      {
         nokia_bitmap(i, 0, Temp, 83, 15);
        
         nokia_imprime_memoria();
         nokia_borra_memoria();
        
         delay_ms(30);
      }
  
      delay_ms(2000);
}

Tu funcion nokia_bitmpa, como dije, solo modifique o adapte los tipos de varibles para las variables que creas alli. Por lo demas, esta igual:
Código: [Seleccionar]
void nokia_bitmap (int8 x, int8 y, int8 *bitmap, int8 ancho, int8 alto)
{
   int16 ind_bitmap,ind_memoria,xx,yy,max,desplazamiento;

   for (yy=0;yy<((alto>>3)+((alto%8)>0));yy++)
      for (xx=0;xx<ancho;xx++)
         if (((xx+x)<84) && ((xx+x)>0))
            {
               ind_memoria = yy * 84 + xx + x + (y>>3)*84;
               ind_bitmap = yy * ancho + xx;
               desplazamiento = y%8;
               MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (bitmap[ind_bitmap]<<desplazamiento);
               if (desplazamiento)
                  MemoriaVideo[ind_memoria+84] = MemoriaVideo[ind_memoria+84] | ((bitmap[ind_bitmap]>>(8-desplazamiento)) & (0xFF >> (8-desplazamiento)));
            }
}

Y por lo que he probado, hasta ahora, con esa funcion, todo funciona bien.

Ahora el problema que tengo es con la funcion de texto (nokia_text(...)) pues me imprime bien hasta el caracter 'S', despues, la 'T', la 'a' y los que sigen los hace erroneamente. He analizado el codigo pero me es un poco dificil poder entender como haces todo, espero puedas ayudarme. Hasta aqui lo tengo:
Código: [Seleccionar]
void nokia_texto(int8 x, int8 y, int8 fuente, char *caracter)
{
   int16 ind_bitmap, ind_memoria, xx, yy, max, desplazamiento;
   int8 letra, alto, ancho, EscribirByte;

   if (fuente == 1)
   {
      ancho = 3;
      alto = 6;
   }
   else if (fuente == 2)
   {
      ancho = 5;
      alto = 7;
   }
   else
   {
      ancho = 7;
      alto = 8;
   }

   letra = *caracter;
   while (letra != 0)
   {
            for (xx = 0; xx < ancho; xx++)
            {
               if (((xx + x) < 84) && ((xx + x) >= 0) && (y >= 0)&& (y <= 40))
               {
                  ind_memoria = xx + x + (y >> 3) * 84;
                  ind_bitmap = (letra - 0x20) * ancho + xx;
                  desplazamiento = y % 8;

                  if (fuente == 1)
                  {    
                     EscribirByte = Fuente_3_6[ind_bitmap];
                  }
                  else if (fuente == 2)
                  {
                     EscribirByte = Fuente_5_7[ind_bitmap];
                  }
                  else
                  {
                     EscribirByte = Fuente_7_8[ind_bitmap];
                  }
                    
                  MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (EscribirByte << desplazamiento);
                  
                  if (desplazamiento)
                  {
                     MemoriaVideo[ind_memoria + 84] = MemoriaVideo[ind_memoria + 84] | ((EscribirByte >> (8 - desplazamiento)) & (0xFF >> (8 - desplazamiento)));                        
                  }
               }
            }
            
            caracter++;
            letra = *caracter;
            x = x + ancho + 1;
   }
}

Uso la fuente 5x7 porque es la que use desde el principio y la que hizo cucaracha y todo para no tener problemas por ese lado.


Gracias, salu2.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: Nocturno en 08 de Agosto de 2009, 01:48:33
Enséñame la tabla de caracteres que estás usando, en el código no veo nada que pueda provocar un cambio a partir de la "T"
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: jeremylf en 08 de Agosto de 2009, 08:27:29
La tabla es la que tu has creado (Fuente_5_7).

Bueno, como era de esperarse, acabo de provar fisicamente todo esto y nada funciona  :? Creo que al momento de soldar los cables al lcd se pudo haber quemado algo o nose porque ya probe continuidad y demas muchas veces y nada =(


Estoy usando la misma configuracion que muestra en mi primer post, en el proteus, el mismo codigo de cucaracha, todo igual... Alguna idea? Condensador de 4.7uf, pic18f2550 a 4mhz y nada, si no es por lo del cautin y eso, que otra cosa puede estar mal ??? =S


Salu2
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: Nocturno en 08 de Agosto de 2009, 08:55:58
Pues si la tabla es la misma sólo me queda pensar que tengas algún conflicto de memoria, porque en el dsPIC funcionaba perfectamente.

Suerte con la reparación :s
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus 6.9 SP3
Publicado por: jeremylf en 09 de Agosto de 2009, 15:37:52
oh oh oh! Fe de errata...

Código: [Seleccionar]
#define NEGRITA 0  // 3 X 6
#define COMPRIMIDA 1  // 5 X 7
#define NORMAL 2  // 7 X 8

void nokia_texto(...){
.
.
.
if (fuente==1)
{ancho=3;alto=6;}
else
if (fuente==2)
{ancho=5;alto=7;}
else
{ancho=7;alto=8;}
.
.
.
if (fuente==1)
EscribirByte = Fuente_3_6[ind_bitmap];
else
if (fuente==2)
EscribirByte = Fuente_5_7[ind_bitmap];
else
EscribirByte = Fuente_7_8[ind_bitmap];
.
.
.
}

La fuente COMPRIMIDA es 1, pero si lo pones en nokia_texto enrealidad seleciona a la NEGRITA, por eso, enrealidad, estoy usando la fuente Fuente_3_6 que NO tiene caracteres en minuscula, por eso no sale nada ENREALIDAD desde la letra 'a', 'b', ... NO era de la 'T', esta confusion me confuso mas xD

Aunq creo q aun tengo problemas con las otras fuentes (CREO), seguire probando.

Estoy en lo cierto con esta supuesta Fe de errata que e detectado ???


Gracias, salu2.


Edito:
Creo que aun sigo confundido y no hay ninguna Fe de errata xD! Solo almenos el comentario que se ha puesto en la definicion de cada fuente:
Código: [Seleccionar]
#define      NEGRITA      0  // 3 X 6
#define      COMPRIMIDA   1  // 5 X 7
#define      NORMAL      2  // 7 X 8

Cuando deberia ser:
Código: [Seleccionar]
#define      NEGRITA      0  // 7x8
#define      COMPRIMIDA   1  // 3x6
#define      NORMAL      2  // 5x7

O aun sigo confundido ??? xD!


Salu2
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus
Publicado por: jeremylf en 09 de Agosto de 2009, 15:55:45
Por otro lado, como dije, tenia problemas con desde la letra 'T' (incluyendola) en la fuente Fuente_5_7 y esto es debido a que en esta parte de codigo de la funcion nokia_texto:
Código: [Seleccionar]
ind_bitmap = (letra - 0x20) * ancho + xx;

Almenos en CCS, es necesario de un cast, porque sino el logaritmo esta restringido a funcionar asta el numero 255 nomas. Entonces, es parte quedaria asi:
Código: [Seleccionar]
ind_bitmap = (int16)(letra - 0x20) * ancho + xx;

Problema arreglado, seguire probando con la otra y ultima fuente (NEGRITA) que tb me dio problemas pero espero que sea por esto.


Salu2.

Edito:
La fuente NEGRITA, ahora, ya funciona tambien. Fue tambien por ese problema de la falta de cast. Entonces, la funcion nokia_texto ahora ya funciona bien todo, seguire haciendo pruebas haber si encuentro errores y seguire con las otras funciones =D

Salu2.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus
Publicado por: jeremylf en 09 de Agosto de 2009, 17:41:45
La funcion nokia_punt(...) tb ya funciona! Tuve problemas al principio con el algoritmo para hacerlo senoidal y todo alfinal esta en los casts. La funcion queda asi:
Código: [Seleccionar]
void nokia_punto (int8 x, int8 y, int1 color)
{
   int16 ddram;
   
   ddram = x + (((int16)(y / 8) * 84));
   
   if (color)
       MemoriaVideo[ddram] = MemoriaVideo[ddram] | (1 << (y % 8));
   else
       MemoriaVideo[ddram] = MemoriaVideo[ddram] & (0xFF - (1 << (y % 8)));
}

Solo le agrege el cast para trabajar a 16 bits.

Y, al llamar a la funcion para gener puntos como una onda de forma senoidal, hay que hacerlo de esta manera:
Código: [Seleccionar]
nokia_punto(i, (int8)(24 + sin((i + j) * 3.1416 / 20) * 22), NEGRO);

Es necesario hacer cast a todo el algoritmo ya que la funcion requiere de una variable de 8 bits nomas, sino no aparece nada.

Seguire probando.
Salu2.
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus
Publicado por: Nocturno en 09 de Agosto de 2009, 17:46:39
Ánimo, que ya casi lo tienes  :-/
Título: Re: GLCD Nokia 3310 (Proyecto de Cucaracha) simulado en Proteus
Publicado por: jeremylf en 09 de Agosto de 2009, 23:09:00
Y ya esta! Toda las fuciones de tu libreria nocturno estan adaptadas para el CCS!

*PIC18F2550 a 20MHZ
*CCS 4.023
*Proteus 7.4 SP3

// Por eso de los 40000 caracteres no pongo los codigos xD pero esta adjuntado bueno.

Una foto:
(http://img197.imageshack.us/img197/9338/dibujorlzdms.jpg)

Y un video...  :mrgreen:
[/youtube]

Se ve medio lento porque la PC estaba como al 90% por la grabacion de la pantalla y todo...

Decir que la base de todo esto ha sido la inclusion de casts en muchas partes del codigo original, tambien cambios en tipos de variables y en el prorama de ejemplo tambien otros casts y demas...

Espero que a alguien le sirva, porque a mi de echo que si  :-/


Gracias por tan buena libreria nocturno, y gracias a esta adaptacion he entendido gran parte de este glcd y tus funciones y todo!

Dejo todo, la simulacion, el proyecto en CCS, el c, el hex, etc.. todo adjuntado en RAR. Ah! menos la libreria para el nokia porque post anteriores ya lo pusieron y bueno.


Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 10 de Agosto de 2009, 01:48:02
Estupendo, te quedo exactamente igual.
Enlazaré tu versión de la librería desde mi artículo para que los visitantes puedan descargar la que más les convenga.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 10 de Agosto de 2009, 03:21:18
Un gran honor  :-/
Gracias.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Suky en 10 de Agosto de 2009, 09:36:32
Excelente jeremylf , muy buen trabajo!

Saludos!
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: MLO__ en 10 de Agosto de 2009, 12:47:18
Excelente trabajo jeremy  :-/

Gracias por el aporte.

Saludos
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 10 de Agosto de 2009, 19:32:03
Muy bueno jeremylf. Saludos
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 10 de Agosto de 2009, 22:42:39
Gracias a todos. Ahora solo falta probarlo en fisico, pero el lcd que tenia noc q paso pero parece que se quemo por tanto meterle cautin JA! xD
En unos dias seguro ya tengo otro o almenos eso espero, y vere que tal.


Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: AKENAFAB en 10 de Agosto de 2009, 23:27:16
 :-/ :-/ :-/ :-/

Muy bueno , Felicitaciones!

Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 11 de Agosto de 2009, 12:29:11
lo probé en físico con un display de nokia 5120 y un 18f4550 y funciona casi perfecto.
solo tiene el problema que la bola saltarina solo se mueve en forma horizontal sobre el borde superior de la pantalla, no se cual puede ser el problema ya que en la simulación se ve que salta.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 11 de Agosto de 2009, 21:57:25
Yo tb tuve ese problema, pero lo solucione con un cast previo a la funcion nokia_bitmap de 8 bits para las funciones de seno que se usaban ahi. Se supone que deberia funcionar bien, la verdad que tampoco se que podria estar pasando ya que en la simulacion anda bien. Sera el nokia que es distinto ?


Bueno, gracias por probarlo, almenos funciona en un 95% por asi decirlo, en fisico xD!
Gracias AKENAFAB por los  :-/  :D


Salu2
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 12 de Agosto de 2009, 03:37:18
Nocturno, las letras 'Ñ' y 'ñ' (almenos a mi) no aparecen cuando uso nokia_text(...). Nose si a ti si te han funcionado correctamente  :?

Bueno, para solucion esto solo me basto agregar estas dos lineas despues del While en dicha funcion, quedando esta asi:
Código: [Seleccionar]
void nokia_texto(signed int8 x, signed int8 y, int8 fuente, char *caracter)
{
   int16 ind_bitmap, ind_memoria, xx, desplazamiento;
   int8 letra, alto, ancho, EscribirByte;

   if (fuente == 1)
   {
      ancho = 3;
      alto = 6;
   }
   else if (fuente == 2)
   {
      ancho = 5;
      alto = 7;
   }
   else
   {
      ancho = 7;
      alto = 8;
   }

   letra = *caracter;
   
   while (letra != 0)
   {
      if (Letra == 0xF1) {Letra = 0x80;}
      else if (Letra == 0xD1) {Letra = 0x81;}
   
      for (xx = 0; xx < ancho; xx++)
      {
         if (((xx + x) < 84) && ((xx + x) >= 0) && (y >= 0)&& (y <= 40))
         {
            ind_memoria = xx + x + (int16)(y >> 3) * 84;
            ind_bitmap = (int16)(letra - 0x20) * ancho + xx;
            desplazamiento = y % 8;

            if (fuente == 1)
            {   
               EscribirByte = Fuente_3_6[ind_bitmap];
            }
            else if (fuente == 2)
            {
               EscribirByte = ASCII_TABLE[ind_bitmap];
            }
            else
            {
               EscribirByte = Fuente_7_8[ind_bitmap];
            }
                   
            MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (EscribirByte << desplazamiento);
                 
            if (desplazamiento)
            {
               MemoriaVideo[ind_memoria + 84] = MemoriaVideo[ind_memoria + 84] | ((EscribirByte >> (8 - desplazamiento)) & (0xFF >> (8 - desplazamiento)));                       
            }
         }
      }
           
      caracter++;
      letra = *caracter;
      x = x + ancho + 1;
   }
}

Y listo.


Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 12 de Agosto de 2009, 04:29:07
Pues ahora mismo no lo recuerdo, pero muy probablemente no estuvieran implementadas.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 12 de Agosto de 2009, 19:08:40
ya pude hacer saltar la bolita, el tema es que la variable k no se inicia con un valor definido, esntonces al tomar un valor muy alto, el seno parece que no calcula bien.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 12 de Agosto de 2009, 19:58:16
Bueno, decir que lo de la letra Ñ y ñ con el codigo que propuse en mi post anterior solo funciona con el tipo de letra NORMAL (Fuente_5_7) ya que solo esta la tiene implementada.

Gracias pablomanieri por el detalle, ahora si, 100% ??  :D


Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 13 de Agosto de 2009, 00:20:49
Ahora si tengo problemas!!!

Probe el glcd (el que supuestamente habia quemado por tanto cautin) en su propio celular (el nokia 3310) y FUNCIONO!! Lo he vuelto a probar en mi circuito y NADAA!!!!!

AHH!! me tiene loco! que puede ser ?? Estoy usando el programa de cucaracha de su pagina tal cual modificado el #INCLUDE para el PIC18F2550 nada mas. Los registros del puerto B son los mismos, el circuito es el mismo. A diferencia que lo estoy probando con un condensador en Vout de 10uF, aunq tb lo probe con un de 1uF y NADA! el PIC corre a 4MHZ como el de cucaracha, esta trabajando a 3.3V por si las dudas con un LM1117. Uso la placa del mismo cucaracha tb, las conexiones directas al GLCD. Que peude ser? que puede ser??!!! El pic tiene su condensador 104. He revisado si bota algo con el osciloscopio y efectivamente lo hace. Pero aun asi, NADA!

Voy a llorar!!! hahah xD

Que estresante este GLCD, que mas info puedo dar? MCLR esta deshabilitado, uso leds para verificar si sige el curso del codigo y si lo hace. No prende ningun pixel, asi NINGUNO de los 4032 (84x48 xD) pixeles que tiene, ninguno!!

Ayuda! xP


Gracias, salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 13 de Agosto de 2009, 01:23:11
¿No será el contraste?
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 13 de Agosto de 2009, 01:38:19
A que te refires? al condensador que va en vout? Pues ahora lo tengo con 10uF y tb lo he probado con uno de 1uF. O otra cosa?
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 13 de Agosto de 2009, 01:58:41
Sí, tienes razón, ya no me acordaba bien y pensaba que se regula con potenciómetro.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 13 de Agosto de 2009, 03:50:13
Bueno y esto sige sin funcionar =[

Lo he probado con dos pics y  nada.

Nose si tu Nocturno o pablomanieri o alguien pueda probar esto para saber si es un problema de software o hardware (Aunq mas me incline por este ultimo aunq todo este bien =S). Bueno este es el codigo en c hecho en CCS 4.023:

Código: [Seleccionar]
#include <18F2550.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,nolvp

#FUSES MCLR, NOPBADEN

#use delay(clock=4000000)
#Include <nokia_lcd.c>

#byte PORTB=0xf81                 // Dirección del PortB
#byte TRISB=0xf93              // Dirección Del TrisB
//definiciones
#byte PORTA=5
//#byte PORTB=6
#byte PORTC=7
#byte TRISA=0x85
//#byte TRISB=0x86
#byte TRISC=0x87
//


Byte CONST TABLE3 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

Byte CONST TABLE4 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x67,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x4E,0x81,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};

Byte CONST TABLE5 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

Byte CONST TABLE6 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x21,0x17,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1C,0x62,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};



Byte CONST TABLE7 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


Byte CONST TABLE8 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x21,0x17,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x98,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};



// Funcion Principal
void main(void)
{
int8 a;
int i;
  
   output_high(PIN_C0);
  
   lcd_init();             // Inicialización LCD
   nokia_clean_ddram();    // La limpiamos (por si acaso)

for(i=0;i<5;i++){ output_toggle(PIN_C0);
    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE3[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE4[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE5[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE6[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE7[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE8[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE5[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE6[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea
}


   nokia_clean_ddram();                   // Limpiamos pantalla
   nokia_gotoxy(0,0);                     // Nos ponemos en 0,01
   printf(nokia_printchar,"abcdefghijklmn");  // Escribimos
   //nokia_gotoxy(0,1); no hay que poner esto ya que se escribe la fila entera..
   printf(nokia_printchar,"ñopqrstuvwxyzA");
   //nokia_gotoxy(0,2); ...aunque si se pone tampoco está mal
   printf(nokia_printchar,"BCDEFGHIJKLMNÑ");
   //nokia_gotoxy(0,3); idem
   printf(nokia_printchar,"OPQRSTUVWXYZ12");
   //nokia_gotoxy(0,4); idem
   printf(nokia_printchar,"34567890*/-+$#");
   //nokia_gotoxy(0,5); y más idem
   printf(nokia_printchar,"Listo!!    ;-)");
   delay_ms(500);

   a = 0x0C;
   while (1) {
      switch (a) {
         case 0x0c:
            nokia_write_command(0x0D);   // Modo normal
            a=0x0D;
            delay_ms(1000);   output_toggle(PIN_C0);
            break;
         case 0x0D:
            nokia_write_command(0x0C);   // Modo inverso
            a=0x0C;
            delay_ms(1000);   output_toggle(PIN_C0);
            break;
      }
   }
}

Es el mismo de la pagina de cucaracha (http://webs.ono.com/cucaracha/lcdnokia.htm) con la unica modificacion del cambio de pic (del 18f252 al 18f2550) con el #include, dos fusibles mas: el MCLR para resetear todo con un boton y el NOPBADEN para poner al puerto B (Porque cucaracha lo usa en el puerto B la comunicacioncon el GLCD) como I/Os digitales cuando hay resets porque crei pertinente, y agrege "output_toggle(PIN_C0)" en algunas partes del codigo para saber que esta corriendo bien.

Y donde se ve esa configuracion de los pin para con el glcd es en la libreria de cucaracha, esta:
Código: [Seleccionar]
////////////////////////////////////////////////////////////////////////////////
// DESCRIPCIÓN DE LAS FUNCIONES
//
// void nokia_write_dorc(byte bytefornokia)              USO INTERNO
// void nokia_write_data(byte bytefornokia_data)         USO INTERNO
// void nokia_printchar(byte caracter)                   IMPRIME EL CARACTER
// void nokia_write_command(byte bytefornokia_command)   MANDA EL COMANDO
// void nokia_gotoxy(byte xnokia, byte ynokia)           SE POSICIONA EN X/Y
// void nokia_clean_ddram(void)                          LIMPIA LA PANTALLA
// void Lcd_init(void)                                   INICIALIZA LA LCD
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// CONFIGURACION DE LA CONEXION
//
// Conectamos la LCD al PORTB en los pines indicados
//
////////////////////////////////////////////////////////////////////////////////
#byte PORTB=6                 // Dirección del PortB
#byte TRISB=0x86              // Dirección Del TrisB
#bit nok_sclk  = PORTB.3      // RB3
#bit nok_sda   = PORTB.4      // RB4
#bit nok_dc    = PORTB.5      // RB5
#bit nok_cs    = PORTB.6      // RB6
#bit nok_res   = PORTB.7      // RB7
// FIN CONFIGURACION
////////////////////////////////////////////////////////////////////////////////

/*
Tabla de Instrucciones de la LCD. Siempre con D/C=0

0010 0xyz         // X=1 -> Driver en OFF
                     Y=1 -> Direccionamiento Vertical
                     Z=1 -> Comandos Extendidos

Modo de pantalla
0000 1001   0x09   // Entera Negra
0000 1000   0x08   // Entera Blanco
0000 1100   0x0c   // Modo Normal
0000 1101   0x0d   // Vídeo Inverso

Control de Temperatura
0100 0100   0x44  // Coeficiente de temperatura 0
0100 0101   0x45  // Coeficiente de temperatura 1
0100 0110   0x46  // Coeficiente de temperatura 2
0100 0111   0x47  // Coeficiente de temperatura 3

Bias (Contraste?)
0001 0xxx         // Establece el valor para Bias

Vop
1xxx xxxx         // Establece el valor para Vop
*/

////////////////////////////////////////////////////////////////////////////////
// Necesitamos dos tablas para la conversión de ASCII a pixels gráficos
// 5 Bytes por caracter.
// Usamos DOS tablas porque tenemos 96 columnas x 5 bytes = 480 bytes
// y solo podemos tener tablas de 255 bytes

// F1-ñ -> 0xFC,0x09,0x05,0x05,0xF8
// D1-Ñ ->
byte CONST ASCII_TABLE1 [240]={
                  0x00,0x00,0x00,0x00,0x00,   // 20 space
                  0x00,0x00,0x5f,0x00,0x00,   // 21 !
                  0x00,0x07,0x00,0x07,0x00,   // 22 "
                  0x14,0x7f,0x14,0x7f,0x14,   // 23 #
                  0x24,0x2a,0x7f,0x2a,0x12,   // 24 $
                  0x23,0x13,0x08,0x64,0x62,   // 25 %
                  0x36,0x49,0x55,0x22,0x50,   // 26 &
                  0x00,0x05,0x03,0x00,0x00,   // 27 '
                  0x00,0x1c,0x22,0x41,0x00,   // 28 (
                  0x00,0x41,0x22,0x1c,0x00,   // 29 )
                  0x14,0x08,0x3e,0x08,0x14,   // 2a *
                  0x08,0x08,0x3e,0x08,0x08,   // 2b +
                  0x00,0x50,0x30,0x00,0x00,   // 2c ,
                  0x08,0x08,0x08,0x08,0x08,   // 2d -
                  0x00,0x60,0x60,0x00,0x00,   // 2e .
                  0x20,0x10,0x08,0x04,0x02,   // 2f /
                  0x3e,0x51,0x49,0x45,0x3e,   // 30 0
                  0x00,0x42,0x7f,0x40,0x00,   // 31 1
                  0x42,0x61,0x51,0x49,0x46,   // 32 2
                  0x21,0x41,0x45,0x4b,0x31,   // 33 3
                  0x18,0x14,0x12,0x7f,0x10,   // 34 4
                  0x27,0x45,0x45,0x45,0x39,   // 35 5
                  0x3c,0x4a,0x49,0x49,0x30,   // 36 6
                  0x01,0x71,0x09,0x05,0x03,   // 37 7
                  0x36,0x49,0x49,0x49,0x36,   // 38 8
                  0x06,0x49,0x49,0x29,0x1e,   // 39 9
                  0x00,0x36,0x36,0x00,0x00,   // 3a :
                  0x00,0x56,0x36,0x00,0x00,   // 3b ;
                  0x08,0x14,0x22,0x41,0x00,   // 3c <
                  0x14,0x14,0x14,0x14,0x14,   // 3d =
                  0x00,0x41,0x22,0x14,0x08,   // 3e >
                  0x02,0x01,0x51,0x09,0x06,   // 3f ?
                  0x32,0x49,0x79,0x41,0x3e,   // 40 @
                  0x7e,0x11,0x11,0x11,0x7e,   // 41 A
                  0x7f,0x49,0x49,0x49,0x36,   // 42 B
                  0x3e,0x41,0x41,0x41,0x22,   // 43 C
                  0x7f,0x41,0x41,0x22,0x1c,   // 44 D
                  0x7f,0x49,0x49,0x49,0x41,   // 45 E
                  0x7f,0x09,0x09,0x09,0x01,   // 46 F
                  0x3e,0x41,0x49,0x49,0x7a,   // 47 G
                  0x7f,0x08,0x08,0x08,0x7f,   // 48 H
                  0x00,0x41,0x7f,0x41,0x00,   // 49 I
                  0x20,0x40,0x41,0x3f,0x01,   // 4a J
                  0x7f,0x08,0x14,0x22,0x41,   // 4b K
                  0x7f,0x40,0x40,0x40,0x40,   // 4c L
                  0x7f,0x02,0x0c,0x02,0x7f,   // 4d M
                  0x7f,0x04,0x08,0x10,0x7f,   // 4e N
                  0x3e,0x41,0x41,0x41,0x3e};   // 4f O


byte CONST ASCII_TABLE2 [250]={
                  0x7f,0x09,0x09,0x09,0x06,   // 50 P
                  0x3e,0x41,0x51,0x21,0x5e,   // 51 Q
                  0x7f,0x09,0x19,0x29,0x46,   // 52 R
                  0x46,0x49,0x49,0x49,0x31,   // 53 S
                  0x01,0x01,0x7f,0x01,0x01,   // 54 T
                  0x3f,0x40,0x40,0x40,0x3f,   // 55 U
                  0x1f,0x20,0x40,0x20,0x1f,   // 56 V
                  0x3f,0x40,0x38,0x40,0x3f,   // 57 W
                  0x63,0x14,0x08,0x14,0x63,   // 58 X
                  0x07,0x08,0x70,0x08,0x07,   // 59 Y
                  0x61,0x51,0x49,0x45,0x43,   // 5a Z
                  0x00,0x7f,0x41,0x41,0x00,   // 5b [
                  0x02,0x04,0x08,0x10,0x20,   // 5c
                  0x00,0x41,0x41,0x7f,0x00,   // 5d
                  0x04,0x02,0x01,0x02,0x04,   // 5e
                  0x40,0x40,0x40,0x40,0x40,   // 5f
                  0x00,0x01,0x02,0x04,0x00,   // 60
                  0x20,0x54,0x54,0x54,0x78,   // 61 a
                  0x7f,0x48,0x44,0x44,0x38,   // 62 b
                  0x38,0x44,0x44,0x44,0x20,   // 63 c
                  0x38,0x44,0x44,0x48,0x7f,   // 64 d
                  0x38,0x54,0x54,0x54,0x18,   // 65 e
                  0x08,0x7e,0x09,0x01,0x02,   // 66 f
                  0x0c,0x52,0x52,0x52,0x3e,   // 67 g
                  0x7f,0x08,0x04,0x04,0x78,   // 68 h
                  0x00,0x44,0x7d,0x40,0x00,   // 69 i
                  0x20,0x40,0x44,0x3d,0x00,   // 6a j
                  0x7f,0x10,0x28,0x44,0x00,   // 6b k
                  0x00,0x41,0x7f,0x40,0x00,   // 6c l
                  0x7c,0x04,0x18,0x04,0x78,   // 6d m
                  0x7c,0x08,0x04,0x04,0x78,   // 6e n
                  0x38,0x44,0x44,0x44,0x38,   // 6f o
                  0x7c,0x14,0x14,0x14,0x08,   // 70 p
                  0x08,0x14,0x14,0x18,0x7c,   // 71 q
                  0x7c,0x08,0x04,0x04,0x08,   // 72 r
                  0x48,0x54,0x54,0x54,0x20,   // 73 s
                  0x04,0x3f,0x44,0x40,0x20,   // 74 t
                  0x3c,0x40,0x40,0x20,0x7c,   // 75 u
                  0x1c,0x20,0x40,0x20,0x1c,   // 76 v
                  0x3c,0x40,0x30,0x40,0x3c,   // 77 w
                  0x44,0x28,0x10,0x28,0x44,   // 78 x
                  0x0c,0x50,0x50,0x50,0x3c,   // 79 y
                  0x44,0x64,0x54,0x4c,0x44,   // 7a z
                  0x00,0x08,0x36,0x41,0x00,   // 7b
                  0x00,0x00,0x7f,0x00,0x00,   // 7c
                  0x00,0x41,0x36,0x08,0x00,   // 7d
                  0x10,0x08,0x08,0x10,0x08,   // 7e
                  0x78,0x46,0x41,0x46,0x78,  // 7F
                  0x7C,0x09,0x05,0x05,0x78,  // 80 -> ñ
                  0x7E,0x05,0x09,0x11,0x7E   // 81 -> Ñ
                  };   // 7f



////////////////////////////////////////////////////////////////////////////////
// Envía en serie todos los bits del byte pasado
////////////////////////////////////////////////////////////////////////////////
void nokia_write_dorc(byte bytefornokia)
{
char caa;
   for (caa=8;caa>0;caa--) {
      nok_sclk=0;
      delay_us(2);
      if ((bytefornokia&0x80)==0) {
         nok_sda=0;
      }
      else {
         nok_sda=1;
      }
      nok_sclk=1;
      bytefornokia=bytefornokia<<1;
   }
}

////////////////////////////////////////////////////////////////////////////////
// Prepara a la LCD para que guarde el byte en la RAM (para que lo muestre
////////////////////////////////////////////////////////////////////////////////
void nokia_write_data(byte bytefornokia_data)
{
   nok_dc=1;
   nok_cs=0;   // chip enabled
   nokia_write_dorc(bytefornokia_data);   // Rutina que manda en serie los bits
   nok_cs=1;   // chip disabled
}


////////////////////////////////////////////////////////////////////////////////
// Escribe un comando en el nokia. Para los comandos se activa D/C
////////////////////////////////////////////////////////////////////////////////
void nokia_write_command(byte bytefornokia_command)
{
   nok_dc=0;   // byte is a command it is read with the eight SCLK pulse
   nok_cs=0;   // chip enabled
   nokia_write_dorc(bytefornokia_command);
   nok_cs=1;   // chip disabled
}

////////////////////////////////////////////////////////////////////////////////
// Escribe en la LCD el caracter pasado
////////////////////////////////////////////////////////////////////////////////
void nokia_printchar(byte caracter)
{
byte char_row,charpos,chardata;

   if(caracter==0xF1) caracter=0x80;
   else if(caracter==0xD1) caracter=0x81;
   else if (caracter<0x20) return;
   else if (caracter>0x7f) return;

for (char_row=0;char_row<5;char_row++) {           // Son 5 Bytes por caracter
                                                   // Por eso este bucle
   if (caracter<0x50) {
      charpos=(((caracter&0xff)-0x20)*5)+char_row;
      chardata=ASCII_TABLE1[charpos];
      }

   else if (caracter>0x4f) {
      charpos=(((caracter&0xff)-0x50)*5)+char_row;
      chardata=ASCII_TABLE2[charpos];
      }
   nokia_write_data(chardata);                    // Manda el caracter
   }
nokia_write_data(0x00);                           // Mandamos 1 espacio Blanco
}


////////////////////////////////////////////////////////////////////////////////
// Posicionamiento en la pantalla
////////////////////////////////////////////////////////////////////////////////
void nokia_gotoxy(byte xnokia, byte ynokia)      // Nokia LCD 3310 Position cursor
{
      nokia_write_command(0x40|(ynokia&0x07));   // Y axe initialisation: 0100 0yyy
      nokia_write_command(0x80|(xnokia&0x7f));   // X axe initialisation: 1xxx xxxx
}


////////////////////////////////////////////////////////////////////////////////
// Limpiamos la RAM (la pantalla)
////////////////////////////////////////////////////////////////////////////////
void nokia_clean_ddram(void)
{
int16 ddram;  //cambiar por la del rtc del tio eso

   nokia_gotoxy(0,0);                  // Vamos al principio
   for (ddram=504;ddram>0;ddram--) {   // bucle estableciendo cada byte a 0x00
      nokia_write_data(0x00);
   }
}


////////////////////////////////////////////////////////////////////////////////
// Inicialización de la pantalla
////////////////////////////////////////////////////////////////////////////////
void Lcd_init(void) {
   TRISB = 0;
   delay_us(200);       // Pequeño delay de seguridad
   nok_dc=1;            // Destino de Bytes -> RAM
   nok_cs=1;            // Desactivamos el Driver para que se inicialice
   delay_ms(10);
   nok_res=0;            // Y damos un pulso de reset según indica el datasheet
   delay_ms(250);         // durante 1us.
   nok_res=1;
   nokia_write_command(0x21);   // Activamos los comandos extendidos
   nokia_write_command(0x90);   // Definimos el Vop. Establecerá la tensión interna del cristal (su contraste)
   nokia_write_command(0x13);   // bias 13. Min 10 Max 17
   nokia_write_command(0x20);   // Modo horizontal, de izq. a dcha. Se incrementa la posición automáticamente
   nokia_write_command(0x09);   // all on
   delay_ms(50);
   nokia_clean_ddram();        // Limpiamos la RAM para que no haya basura en la LCD
   delay_ms(10);
   nokia_write_command(0x0c);   // mod control normal change
}

Esta si no la he modificado en lo absoluto, nada.

Lo he probado en el proteus 7.4 SP3 y funciona tb alli.

Dejo todo el proyecto, hex, c, lib nokia, sim en proteus para que sea mas factible todo y puedan ayudarme porfavor con alguna prueba en fisica con todo esto.

Por otro lado, decir que mi hardware no es nada, es sencillisimo tal y como debe de ser. Pero si a quien pueda probar el hex que dejo adjunado y le funciona sin problemas pues... me tendre que preocupar por el hardware.

Espero alguien pueda ayudarme con esto que no encuentro solucion.


Gracias, salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 13 de Agosto de 2009, 04:19:11
Yo lo siento mucho, pero no puedo. Ni siquiera sé dónde tengo el display...

Una duda, porque ya ni me acuerdo de cómo era: ¿el condensador se pone con el negativo a masa o con el positivo a masa para que genere tensión negativa en el LCD.
Otros GLCD que conozco llevan tensión negativa en la alimentación.

Si no te atreves a darle la vuelta y probar, puedes ponerlo en el móvil donde te funciona correctamente y medir la tensión en el pin.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 13 de Agosto de 2009, 06:10:41
El condensador va en el pin VOut del GLCD a tierra.

Aqui algunos links de info:
http://www.radiolocman.com/shem/schematics.html?di=44132 (http://www.radiolocman.com/shem/schematics.html?di=44132)
http://elettronic.altervista.org/elettronica_000002.htm (http://elettronic.altervista.org/elettronica_000002.htm)
http://www.x-robotics.com/ (http://www.x-robotics.com/)

Tu mismo lo usaste con un condensador de 10uF a tierra, como pasa el tiempo eh! xD


Gracias por la preocupacion de todas maneras.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 13 de Agosto de 2009, 10:51:05
Paisa, la semana pasada vi mi GLCD en el cajon de los pendientes (olvidos)

http://www.todopic.com.ar/foros/index.php?topic=13812.msg86182#msg86182

Creo que el esquema es el mismo de X-robotics, en la noche me doy un tiempo para probarlo.

Saludos
Hugo

5 am y aun respondiendo????  :shock:
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 13 de Agosto de 2009, 14:42:21
Gracias broer, me ayudas mucho.

Esque aprovecho lal maximo os pocos dias que me quedan de vacaciones  :mrgreen:


Sau2
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 14 de Agosto de 2009, 05:09:49
Jeremy

Lo acabo de probar y no pasa nada con el GLCD ningun pixel se enciende ni tampoco el led.

Si gustas pasame otro programa de prueba para este mismo PIC.

Saludos
Hugo
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 14 de Agosto de 2009, 05:26:45
Recien veo que en la configuracion pusiste XT pero en la simulacion no veo el critasl!!!!!!!!!!!

Sera que se te paso.  :D :D
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 14 de Agosto de 2009, 08:06:56
habría que verificar que las direcciones de memoria de los puertos y los tris que para el pic 18f2550, que se asignan en el programa sean las correctas. creo que el B está bien pero el A y el C me parece que no, verifíquenlo porque puede ser que esté mal. saludos
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 14 de Agosto de 2009, 18:20:28
Veguepic, pongo XT porque uso un cristal de 4mhz. En la simulacion no pongo el cristal porque no es necesario, yaq funciona. Pero en fisico si lo hago y nada.

La configuracion de puertos que uso cucaracha para el 18f252 en el programa es la misma para el 18f2550. Por otro lado, los puertos A y C no se usan.


Porque tampoco te funcionaria a ti veguepic? Es, como digo, el mismo codigo de cucaracha compatibilizado para el 18f2550 con las modificacion que menciono anteriormente. Que pasa? =S


Gracias por el apoyo a todos!
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 14 de Agosto de 2009, 23:01:24
Acabo de poner el cristal de 4 MHz y solo parpadea el led, el GLCD nada de nada hombre.

Yo me inclino a pensar que es tu programa pues este GLCD si me funciona.

Te ayudaria si pudiera pero yo de "C" no se.

Saludos
Hugo
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 15 de Agosto de 2009, 02:28:13
Vaya, enserio ?? 

Que condensador por al vout estas usando ?

Alguien podria darle una chequeada al .c que adjunte porfavor? Es que no encuentro ningun error, puesto que es lo que cucaracha dejo en su pagina. A menos que no funcione su programa, pero en la simulacion si que lo hace! No entiendoooo!


Muchas gracias por las pruebas que estas haciendo veguepic.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 17 de Agosto de 2009, 04:07:03
Lo acabo de probar tb con un 18F452, que tiene el mismo datasheet (http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf) del 18F252 (el que uso cucaracha en su web (http://webs.ono.com/cucaracha/lcdnokia.htm)) y... NADA!

Y lo mas raro es que a veguepic tampoco le funciona, mientras que a pablomanieri si le funciono probando con el .hex de la compativilizacion de la libreria de nocturno en C30 a CCS que hice posts atras  :?

Ya no me da para pensar que puede estar mal, en la simulacion funciona perfecto. Sera necesario comprar un 18f252??  oO!


Gracias a todos, salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 17 de Agosto de 2009, 09:46:55
Yo lo probé utilizando un cristal de 20 Mhz y además adapté el código para usar el puerto A porque en la placa que tengo es el puerto que tenía libre. Los alimenté con 5v y anduvo.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 17 de Agosto de 2009, 10:01:30
Prueba cambiando las dos líneas que siguen en el nokia-lcd.h:

Código: C
  1. ////////////////////////////////////////////////////////////////////////////////
  2. #byte PORTB=6                 // Dirección del PortB
  3. #byte TRISB=0x86              // Dirección Del TrisB

por
Código: C
  1. #byte PORTB=0xf81                 // Dirección del PortB
  2. #byte TRISB=0xf93              // Dirección Del TrisB

no se si influye, pero estas redefiniendo las direcciones del puerto b en la librería nokia-lcd (esas no son las direcciones correctas de los dos registros)y en el programa principal. Puede ser que ahí este el problema.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 19 de Agosto de 2009, 16:00:34
Pablomanieri, has probado lo ultimo que adjunte y te funciono? Me refiero a ESTO (http://www.todopic.com.ar/foros/index.php?topic=27100.msg223304#msg223304)

Caso contrario, puedes hacerlo porfavor? Porque creo que tu solo probaste la compatibilizacion de C30 a CCS. Quisiera saber si a ti te funciona ya que a Veguepic tampoco le funciona.


Gracias por la ayuda.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: pablomanieri en 19 de Agosto de 2009, 16:43:14
No eso no lo probé. Cunado me haga un poco de tiempo lo pruebo. voy a tener que ir a comprar un cristal de 4 Mhz. Saludos.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 20 de Agosto de 2009, 00:26:53
Gracias, pero si es necesario puedes compatibilizarlo tb a 20 mhz ya que a veguepic no le funciono y pues no tengo ni idea ya de que pueda estar mal.

Gracias por la ayuda eh.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 20 de Agosto de 2009, 01:04:30
Jeremy, el condensador es de 1 uf entre pin 7 y masa.

Saludos
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 23 de Agosto de 2009, 17:17:55
Con ese mismo lo he probado, tambien con uno de 10uf como Nocturno, pero aun asi, nada =S

GRacias veguepic.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 29 de Agosto de 2009, 18:53:12
pablomanieri qfue? lo pudist probar? Yo sigo sin poderlo hacrerlo andar, maldicion!

Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: AKENAFAB en 22 de Noviembre de 2009, 19:45:49
Uff que chulada JEremylF  :-/ :-/ :-/

Saludos!
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 17 de Diciembre de 2009, 06:41:22
Y yo sigo con esto... Ahora e hasta echo conexion con los pines de un celular nokia hacia el PIC para hacerme un tipo de capturador de lo que bota el celular. Por lo que veo hay algunas cosas que no van con el datasheet, sinembargo el lcd funciona bien ahi, pues es el celular vamos! Me da miedo pensar que estos lcd's son diferentes aunq sean de un nokia 3310... podria pasar eso ??? Ojala no.

Mañana tengo otraves, ojala, otro lcd 3310 probare directamtn con el pic 18f452 a 4mhz y 3.3V haber que pasa, pues aora me e echo con una conexion de calbe del tipo que se usa en las computadoras para conectar la caja de cd's o de la disketera, ya mostrare unas fotos. Ojala funcione sino tendre q seguir con lo del capturador y pues crearme una libreria que haga eso pero eso seria espantoso.

Bueno, solo informarles la catastrofe que me a traido el poder utilizar este lcd, ya llevo mas de 6 meses intntadolo, bueno dejandolo por un bueno tiempo por cuestiones deestudio y eso pero igual, no crei que fuera tan dificil lograr acerlo fuciuonar, mas aun si en el $·"$%" proteus funciona de maravilla!

Estoy algo alterado, compresion porfavor xD!
Gracias a todos por la ayuda que me dieron y la que me peudan dar, nserio mcuhas gracias. Seguire digiriendo informacion de toda la que salga en el buscador y en el bendito google porque a eso es lo q me estado dedicando ultimant, es mas, hasta imprimi el pdf del controlador y todo, bueno sin aburrirlos mas, espero esto no le pase a mas personas, es muy frustrante  :D Aunq peor fue cuando lei que a aitopes le paso que un integrado (ram creo) no tenia chip en su interior, eso si fue horrible xD!

Bueno, a seguir qmando pics.
Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 18 de Diciembre de 2009, 03:55:26
Que tal! Esto ya me preocupa, hoy me hice otravez con este lcd... no funciona, vaya noticia. Lo que sucede es que ahora si no entiendo que puede estar mal. Veran e echo una seria de pruebas para descartar otros factores.. paso a contarles. Primero probe con su respectivo celular y funciono todo ok. Luego le solde un calbe IDE a este, ya soldado lo volvi a poner en el celular haciendo presion y funciono todo ok. Medi continuidad y todo y todo ok. Lo puse en el pic (pic18f452) con el programa de cucaracha y.. nada ni un pixel. Medi continuidad otravez desde el pic hasta el lcd y todo ok. Pense que seria por la distancia aunq he visto otros proyectos en que lo hacen hasta mas largo pero bueno, con mi calbe IDE, el mismo que va al pic, lo saque y lo solde al celular y... seguir funcionando el lcd. Vuelvo a ponerlo en el PIC revisando por millonesima vez continuidad y todo y... nada. Ya no entiendo que puede estar pasando, al principio pense que seria al hardware pero ahora es imposible, almenos la conexion pues hay continuidad y todo. De verdad que esto me esta causando dolores decabeza y ya no se que hacer. Ojala puedan ayudarme:

Programa:
Código: [Seleccionar]
#include <18F452.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,nolvp

//#FUSES MCLR, NOPBADEN

#use delay(clock=4000000)

//#byte PORTB=0xf81                 // Dirección del PortB
//#byte TRISB=0xf93              // Dirección Del TrisB
//definiciones
//#byte PORTA=5
//#byte PORTB=6
//#byte PORTC=7
//#byte TRISA=0x85
//#byte TRISB=0x86
//#byte TRISC=0x87
//

//

Byte CONST TABLE3 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

Byte CONST TABLE4 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x67,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x4E,0x81,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};

Byte CONST TABLE5 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

Byte CONST TABLE6 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x21,0x17,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1C,0x62,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};



Byte CONST TABLE7 [249]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x78,0x04,0x02,0x01,0x00,0x00,0xC0,0xE0,0x30,0x10,0x18,
0x08,0x04,0x86,0xE1,0xF0,0x10,0x10,0x30,0x20,0x20,0x60,0x60,0x40,0x40,0x40,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x18,0x20,0xE0,0xF0,0xD8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0x7F,0x7F,0x7F,0xFE,0xFE,0xFE,0xFC,0xF8,0xF8,0xF0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


Byte CONST TABLE8 [255]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x21,0x17,0x17,0x0E,0x0F,0x0F,0xFF,0x3F,0x1F,0x1F,
0x1F,0x1F,0x3F,0xFF,0xFF,0x3F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x7E,
0x7F,0x7F,0x7F,0x3F,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x98,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x11,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x09,0x93,
0xE7,0x86,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x12,0x12,0x1E,0x00,0x02,0x6C,0x18,0x06,0x00,0x00,0x00,
0x00,0x0C,0x13,0x11,0x10,0x09,0x1E,0x10,0x10,0x1E,0x0C,0x12,0x12,0x12,0x0C,0x16,
0x12,0x1E,0x1E,0x06,0x02,0x06,0x0C,0x16,0x12,0x1E,0x00,0x0C,0x12,0x12,0x12,0x18,
0x1F,0x02,0x1E,0x0C,0x16,0x12,0x1E,0x00
};

#Include <nokia_lcd.c>

// Funcion Principal
void main(void)
{
int8 a;
int i;
   
   output_high(PIN_C0);
   
   lcd_init();             // Inicialización LCD
   nokia_clean_ddram();    // La limpiamos (por si acaso)

for(i=0;i<5;i++){ output_toggle(PIN_C0);
    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE3[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE4[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE5[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE6[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE7[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE8[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea

    nokia_gotoxy(0,0);      // Nos ponemos en 0,0
   for (a=0;a<=248;a++){nokia_write_data(TABLE5[a]);} // Imprimimos el gráfico
   for (a=0;a<=254;a++){nokia_write_data(TABLE6[a]);}
   delay_ms(300);                                    // Espeamos, pa que se vea
}


   nokia_clean_ddram();                   // Limpiamos pantalla
   nokia_gotoxy(0,0);                     // Nos ponemos en 0,01
   printf(nokia_printchar,"abcdefghijklmn");  // Escribimos
   //nokia_gotoxy(0,1); no hay que poner esto ya que se escribe la fila entera..
   printf(nokia_printchar,"ñopqrstuvwxyzA");
   //nokia_gotoxy(0,2); ...aunque si se pone tampoco está mal
   printf(nokia_printchar,"BCDEFGHIJKLMNÑ");
   //nokia_gotoxy(0,3); idem
   printf(nokia_printchar,"OPQRSTUVWXYZ12");
   //nokia_gotoxy(0,4); idem
   printf(nokia_printchar,"34567890*-/+$#");
   //nokia_gotoxy(0,5); y más idem
   printf(nokia_printchar,"Listo!!    ;-)");
   delay_ms(500);

   a = 0x0C;
   while (1) {
      switch (a) {
         case 0x0c:
            nokia_write_command(0x0D);   // Modo normal
            a=0x0D;
            delay_ms(1000);   output_toggle(PIN_C0);
            break;
         case 0x0D:
            nokia_write_command(0x0C);   // Modo inverso
            a=0x0C;
            delay_ms(1000);   output_toggle(PIN_C0);
            break;
      }
   }
}

libreria nokia_lcd.c:
Código: [Seleccionar]
////////////////////////////////////////////////////////////////////////////////
// DESCRIPCIÓN DE LAS FUNCIONES
//
// void nokia_write_dorc(byte bytefornokia)              USO INTERNO
// void nokia_write_data(byte bytefornokia_data)         USO INTERNO
// void nokia_printchar(byte caracter)                   IMPRIME EL CARACTER
// void nokia_write_command(byte bytefornokia_command)   MANDA EL COMANDO
// void nokia_gotoxy(byte xnokia, byte ynokia)           SE POSICIONA EN X/Y
// void nokia_clean_ddram(void)                          LIMPIA LA PANTALLA
// void Lcd_init(void)                                   INICIALIZA LA LCD
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// CONFIGURACION DE LA CONEXION
//
// Conectamos la LCD al PORTB en los pines indicados
//
////////////////////////////////////////////////////////////////////////////////
//#byte PORTB=6                 // Dirección del PortB
//#byte TRISB=0x86              // Dirección Del TrisB
#BYTE PORTB=0xF81
#BYTE TRISB=0xF93
#bit nok_sclk  = PORTB.3      // RB3
#bit nok_sda   = PORTB.4      // RB4
#bit nok_dc    = PORTB.5      // RB5
#bit nok_cs    = PORTB.6      // RB6
#bit nok_res   = PORTB.7      // RB7
// FIN CONFIGURACION
////////////////////////////////////////////////////////////////////////////////

/*
Tabla de Instrucciones de la LCD. Siempre con D/C=0

0010 0xyz         // X=1 -> Driver en OFF
                     Y=1 -> Direccionamiento Vertical
                     Z=1 -> Comandos Extendidos

Modo de pantalla
0000 1001   0x09   // Entera Negra
0000 1000   0x08   // Entera Blanco
0000 1100   0x0c   // Modo Normal
0000 1101   0x0d   // Vídeo Inverso

Control de Temperatura
0100 0100   0x44  // Coeficiente de temperatura 0
0100 0101   0x45  // Coeficiente de temperatura 1
0100 0110   0x46  // Coeficiente de temperatura 2
0100 0111   0x47  // Coeficiente de temperatura 3

Bias (Contraste?)
0001 0xxx         // Establece el valor para Bias

Vop
1xxx xxxx         // Establece el valor para Vop
*/

////////////////////////////////////////////////////////////////////////////////
// Necesitamos dos tablas para la conversión de ASCII a pixels gráficos
// 5 Bytes por caracter.
// Usamos DOS tablas porque tenemos 96 columnas x 5 bytes = 480 bytes
// y solo podemos tener tablas de 255 bytes

// F1-ñ -> 0xFC,0x09,0x05,0x05,0xF8
// D1-Ñ ->
byte CONST ASCII_TABLE1 [240]={
                  0x00,0x00,0x00,0x00,0x00,   // 20 space
                  0x00,0x00,0x5f,0x00,0x00,   // 21 !
                  0x00,0x07,0x00,0x07,0x00,   // 22 "
                  0x14,0x7f,0x14,0x7f,0x14,   // 23 #
                  0x24,0x2a,0x7f,0x2a,0x12,   // 24 $
                  0x23,0x13,0x08,0x64,0x62,   // 25 %
                  0x36,0x49,0x55,0x22,0x50,   // 26 &
                  0x00,0x05,0x03,0x00,0x00,   // 27 '
                  0x00,0x1c,0x22,0x41,0x00,   // 28 (
                  0x00,0x41,0x22,0x1c,0x00,   // 29 )
                  0x14,0x08,0x3e,0x08,0x14,   // 2a *
                  0x08,0x08,0x3e,0x08,0x08,   // 2b +
                  0x00,0x50,0x30,0x00,0x00,   // 2c ,
                  0x08,0x08,0x08,0x08,0x08,   // 2d -
                  0x00,0x60,0x60,0x00,0x00,   // 2e .
                  0x20,0x10,0x08,0x04,0x02,   // 2f /
                  0x3e,0x51,0x49,0x45,0x3e,   // 30 0
                  0x00,0x42,0x7f,0x40,0x00,   // 31 1
                  0x42,0x61,0x51,0x49,0x46,   // 32 2
                  0x21,0x41,0x45,0x4b,0x31,   // 33 3
                  0x18,0x14,0x12,0x7f,0x10,   // 34 4
                  0x27,0x45,0x45,0x45,0x39,   // 35 5
                  0x3c,0x4a,0x49,0x49,0x30,   // 36 6
                  0x01,0x71,0x09,0x05,0x03,   // 37 7
                  0x36,0x49,0x49,0x49,0x36,   // 38 8
                  0x06,0x49,0x49,0x29,0x1e,   // 39 9
                  0x00,0x36,0x36,0x00,0x00,   // 3a :
                  0x00,0x56,0x36,0x00,0x00,   // 3b ;
                  0x08,0x14,0x22,0x41,0x00,   // 3c <
                  0x14,0x14,0x14,0x14,0x14,   // 3d =
                  0x00,0x41,0x22,0x14,0x08,   // 3e >
                  0x02,0x01,0x51,0x09,0x06,   // 3f ?
                  0x32,0x49,0x79,0x41,0x3e,   // 40 @
                  0x7e,0x11,0x11,0x11,0x7e,   // 41 A
                  0x7f,0x49,0x49,0x49,0x36,   // 42 B
                  0x3e,0x41,0x41,0x41,0x22,   // 43 C
                  0x7f,0x41,0x41,0x22,0x1c,   // 44 D
                  0x7f,0x49,0x49,0x49,0x41,   // 45 E
                  0x7f,0x09,0x09,0x09,0x01,   // 46 F
                  0x3e,0x41,0x49,0x49,0x7a,   // 47 G
                  0x7f,0x08,0x08,0x08,0x7f,   // 48 H
                  0x00,0x41,0x7f,0x41,0x00,   // 49 I
                  0x20,0x40,0x41,0x3f,0x01,   // 4a J
                  0x7f,0x08,0x14,0x22,0x41,   // 4b K
                  0x7f,0x40,0x40,0x40,0x40,   // 4c L
                  0x7f,0x02,0x0c,0x02,0x7f,   // 4d M
                  0x7f,0x04,0x08,0x10,0x7f,   // 4e N
                  0x3e,0x41,0x41,0x41,0x3e};   // 4f O


byte CONST ASCII_TABLE2 [250]={
                  0x7f,0x09,0x09,0x09,0x06,   // 50 P
                  0x3e,0x41,0x51,0x21,0x5e,   // 51 Q
                  0x7f,0x09,0x19,0x29,0x46,   // 52 R
                  0x46,0x49,0x49,0x49,0x31,   // 53 S
                  0x01,0x01,0x7f,0x01,0x01,   // 54 T
                  0x3f,0x40,0x40,0x40,0x3f,   // 55 U
                  0x1f,0x20,0x40,0x20,0x1f,   // 56 V
                  0x3f,0x40,0x38,0x40,0x3f,   // 57 W
                  0x63,0x14,0x08,0x14,0x63,   // 58 X
                  0x07,0x08,0x70,0x08,0x07,   // 59 Y
                  0x61,0x51,0x49,0x45,0x43,   // 5a Z
                  0x00,0x7f,0x41,0x41,0x00,   // 5b [
                  0x02,0x04,0x08,0x10,0x20,   // 5c
                  0x00,0x41,0x41,0x7f,0x00,   // 5d
                  0x04,0x02,0x01,0x02,0x04,   // 5e
                  0x40,0x40,0x40,0x40,0x40,   // 5f
                  0x00,0x01,0x02,0x04,0x00,   // 60
                  0x20,0x54,0x54,0x54,0x78,   // 61 a
                  0x7f,0x48,0x44,0x44,0x38,   // 62 b
                  0x38,0x44,0x44,0x44,0x20,   // 63 c
                  0x38,0x44,0x44,0x48,0x7f,   // 64 d
                  0x38,0x54,0x54,0x54,0x18,   // 65 e
                  0x08,0x7e,0x09,0x01,0x02,   // 66 f
                  0x0c,0x52,0x52,0x52,0x3e,   // 67 g
                  0x7f,0x08,0x04,0x04,0x78,   // 68 h
                  0x00,0x44,0x7d,0x40,0x00,   // 69 i
                  0x20,0x40,0x44,0x3d,0x00,   // 6a j
                  0x7f,0x10,0x28,0x44,0x00,   // 6b k
                  0x00,0x41,0x7f,0x40,0x00,   // 6c l
                  0x7c,0x04,0x18,0x04,0x78,   // 6d m
                  0x7c,0x08,0x04,0x04,0x78,   // 6e n
                  0x38,0x44,0x44,0x44,0x38,   // 6f o
                  0x7c,0x14,0x14,0x14,0x08,   // 70 p
                  0x08,0x14,0x14,0x18,0x7c,   // 71 q
                  0x7c,0x08,0x04,0x04,0x08,   // 72 r
                  0x48,0x54,0x54,0x54,0x20,   // 73 s
                  0x04,0x3f,0x44,0x40,0x20,   // 74 t
                  0x3c,0x40,0x40,0x20,0x7c,   // 75 u
                  0x1c,0x20,0x40,0x20,0x1c,   // 76 v
                  0x3c,0x40,0x30,0x40,0x3c,   // 77 w
                  0x44,0x28,0x10,0x28,0x44,   // 78 x
                  0x0c,0x50,0x50,0x50,0x3c,   // 79 y
                  0x44,0x64,0x54,0x4c,0x44,   // 7a z
                  0x00,0x08,0x36,0x41,0x00,   // 7b
                  0x00,0x00,0x7f,0x00,0x00,   // 7c
                  0x00,0x41,0x36,0x08,0x00,   // 7d
                  0x10,0x08,0x08,0x10,0x08,   // 7e
                  0x78,0x46,0x41,0x46,0x78,  // 7F
                  0x7C,0x09,0x05,0x05,0x78,  // 80 -> ñ
                  0x7E,0x05,0x09,0x11,0x7E   // 81 -> Ñ
                  };   // 7f



////////////////////////////////////////////////////////////////////////////////
// Envía en serie todos los bits del byte pasado
////////////////////////////////////////////////////////////////////////////////
void nokia_write_dorc(byte bytefornokia)
{
char caa;
   for (caa=8;caa>0;caa--) {
      nok_sclk=0;
      delay_us(2);
      if ((bytefornokia&0x80)==0) {
         nok_sda=0;
      }
      else {
         nok_sda=1;
      }
      nok_sclk=1;
      bytefornokia=bytefornokia<<1;
   }
}

////////////////////////////////////////////////////////////////////////////////
// Prepara a la LCD para que guarde el byte en la RAM (para que lo muestre
////////////////////////////////////////////////////////////////////////////////
void nokia_write_data(byte bytefornokia_data)
{
   nok_dc=1;
   nok_cs=0;   // chip enabled
   nokia_write_dorc(bytefornokia_data);   // Rutina que manda en serie los bits
   nok_cs=1;   // chip disabled
}


////////////////////////////////////////////////////////////////////////////////
// Escribe un comando en el nokia. Para los comandos se activa D/C
////////////////////////////////////////////////////////////////////////////////
void nokia_write_command(byte bytefornokia_command)
{
   nok_dc=0;   // byte is a command it is read with the eight SCLK pulse
   nok_cs=0;   // chip enabled
   nokia_write_dorc(bytefornokia_command);
   nok_cs=1;   // chip disabled
}

////////////////////////////////////////////////////////////////////////////////
// Escribe en la LCD el caracter pasado
////////////////////////////////////////////////////////////////////////////////
void nokia_printchar(byte caracter)
{
byte char_row,charpos,chardata;

   if(caracter==0xF1) caracter=0x80;
   else if(caracter==0xD1) caracter=0x81;
   else if (caracter<0x20) return;
   else if (caracter>0x7f) return;

for (char_row=0;char_row<5;char_row++) {           // Son 5 Bytes por caracter
                                                   // Por eso este bucle
   if (caracter<0x50) {
      charpos=(((caracter&0xff)-0x20)*5)+char_row;
      chardata=ASCII_TABLE1[charpos];
      }

   else if (caracter>0x4f) {
      charpos=(((caracter&0xff)-0x50)*5)+char_row;
      chardata=ASCII_TABLE2[charpos];
      }
   nokia_write_data(chardata);                    // Manda el caracter
   }
nokia_write_data(0x00);                           // Mandamos 1 espacio Blanco
}


////////////////////////////////////////////////////////////////////////////////
// Posicionamiento en la pantalla
////////////////////////////////////////////////////////////////////////////////
void nokia_gotoxy(byte xnokia, byte ynokia)      // Nokia LCD 3310 Position cursor
{
      nokia_write_command(0x40|(ynokia&0x07));   // Y axe initialisation: 0100 0yyy
      nokia_write_command(0x80|(xnokia&0x7f));   // X axe initialisation: 1xxx xxxx
}


////////////////////////////////////////////////////////////////////////////////
// Limpiamos la RAM (la pantalla)
////////////////////////////////////////////////////////////////////////////////
void nokia_clean_ddram(void)
{
int16 ddram;  //cambiar por la del rtc del tio eso

   nokia_gotoxy(0,0);                  // Vamos al principio
   for (ddram=504;ddram>0;ddram--) {   // bucle estableciendo cada byte a 0x00
      nokia_write_data(0x00);
   }
}


////////////////////////////////////////////////////////////////////////////////
// Inicialización de la pantalla
////////////////////////////////////////////////////////////////////////////////
void Lcd_init(void) {
   TRISB = 0;
   delay_us(200);       // Pequeño delay de seguridad
   nok_dc=1;            // Destino de Bytes -> RAM
   nok_cs=1;            // Desactivamos el Driver para que se inicialice
   delay_ms(10);
   nok_res=0;            // Y damos un pulso de reset según indica el datasheet
   delay_ms(250);         // durante 1us.
   nok_res=1;
   nokia_write_command(0x21);   // Activamos los comandos extendidos
   nokia_write_command(0x90);   // Definimos el Vop. Establecerá la tensión interna del cristal (su contraste)
   nokia_write_command(0x13);   // bias 13. Min 10 Max 17
   nokia_write_command(0x20);   // Modo horizontal, de izq. a dcha. Se incrementa la posición automáticamente
   nokia_write_command(0x09);   // all on
   delay_ms(50);
   nokia_clean_ddram();        // Limpiamos la RAM para que no haya basura en la LCD
   delay_ms(10);
   nokia_write_command(0x0c);   // mod control normal change
}

Que mas? No croe que sea la versio del CCS, pero es la 4.023. Uso un PIC18F452, cristal de 4Mhz, un regulador LM1117 para obtener los 3.3V, tengo condensadores en los vss y vdd del pic de 104, para el lcd uso un condensador de 10uf en su pin Vout, en el pin del lcd vdd tambien he puesto un condensador 104... que mas? Es todo, y nada, nada de nada. Uso un led en C0 como test para saber que el programa esta corriendo bien.

En la simulacion con proteus 7.4 sp3 funciona bien. Dejo tambien la simulacion con el .hex.


Gracias.
Salu2
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 18 de Diciembre de 2009, 05:40:31
PORFIN!!!!!!!!!!!!!! Lo logre!!! funciono el bastardo!!!  :D
Recorde que Justo AQUI (http://www.todopic.com.ar/foros/index.php?topic=2247.msg20039#msg20039) Pocher mencionaba que no le funciono por un problema con el contraste, pues no pense que seria eso ya que a cucaracha y a todo el mundo le a funcionado sin tener que modificar esto. Bueno, pues aunq Pocher no dijo a que valor cambio esto o algo parecido pues, me decidi a probar... A pesar de que no me esta muy claro como funciona esto de las Bias, Vop y Temperatura pude modificar el valor que tenia en el programa de cucaracha que era 16 a 80, y pues ya se ve algo, seguire probando para que se mantenga bien visto.

Decir que esto de los voltajes viene de la formula del datasheet en la pagina 16: VLCD = a + (Vop6 to Vop0) x b¨. Donde en el PCD8544 a = 3.06 y b = 0.06. Y hay q tener cuidado con cambiar esto pues este valor aumento cuando la temperatura del ambiente disminye... Casi no hago ningun cambio por esta advertencia pero me llego y mande todo al krajo y me arriesge y talan!! esta parpadeando, se ve hermoso! haha porfin!!!! PORFINN!!!!!!

Gracias a todos! Seguire comentando algunos avances, pondre fotos, videos lo que sea y, mas q nada, probare los codigos anteriores que hice sobre la compatibilizacion del C30 de nocturno a CCS.


Salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: AKENAFAB en 18 de Diciembre de 2009, 05:56:56
 :-/ :-/ :-/ :-/

Excelentes noticias!

Vaya que traigo ganas a esa libreria xD

Que bueno lo solucionaste , he andado por aqui de contrabando xD .

Saludos!
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 18 de Diciembre de 2009, 10:08:59
Asi es, y aki ya tngo un video =D

[/youtube]


Salu2, ahora por la de nocturno.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 18 de Diciembre de 2009, 10:51:52
Ya esta:

[/youtube]

Lose, la calidad es mala pero bueno.


Salu2!
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: MLO__ en 18 de Diciembre de 2009, 14:51:16
 :-/ :-/ :-/

Muy bien jeremylf, felicitaciones.

Saludos
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Nocturno en 18 de Diciembre de 2009, 14:57:53
Hey, esas imágenes me suenan :)

Felicidades Jeremy
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: Veguepic en 18 de Diciembre de 2009, 17:31:17
Como gozas!!!

Felicidades y aplauzos por la perseverancia, yo ya lo hubiera avandonado hace mucho.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 19 de Diciembre de 2009, 01:26:16
Gracias por las felicitaciones  :-/

La verdad que me ha gustado eso, la perserverancia, porq alfinal pude ganarle  :mrgreen:


Gracias otra vez, salu2.
Título: Re: GLCD Nokia 3310 en Proteus
Publicado por: jeremylf en 19 de Diciembre de 2009, 01:33:25
Porcierto, he visto que mucha gente tiene dudas sobre si el lcd trabaja a 5v tanto en su pin de vdd como en sus pines de datos... pues si, si que puede. En la pagina 17 del datasheet sale, en la nota 3, que si usamos el generador de voltaje internno para el lcd el vdd maximo puede ser hasta 5V. Mientras que si usamos uno externo peude llegar hasta 7V. Pero trabajr a 5V tiene una desventaja, pues en la pagina 20 claramente sale que para trabajar el bus de datos a la maxima frecuencia (4MHZ) es necesario de un vdd de 3V +-10%. Nose hasta cuanto se podra trabajar con 5V pero yo lo estoi corriendo a casi 1MHZ y he probado tanto con 3.3V y 5V y no hay problemas.


Salu2.
Título: GLCD Nokia 3310 librerias convertidas c30 a ccs
Publicado por: ejrua en 08 de Octubre de 2010, 02:13:52
en ejemplo siempre son variables de cadenas constante, pero para el caso de una variable dinamica
Cuando necesito imprimir variables dinamicas como le hago?
ejemplo si son de tipo flotante 29.5