Autor Tema: como se crea y utilizan las tablas en PBP  (Leído 2366 veces)

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

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
como se crea y utilizan las tablas en PBP
« en: 22 de Agosto de 2006, 19:01:29 »
Compañeros sucede lo siguiente:

programe las rutinas para utilizar la ldc de nokia 3310 y ya me funcionan solo que para escribir cada caracter tengo que enviar los uno por uno yo se que eso se hace mejor con tablas el amigo cucaracha y el amigo nocturno han tarbajado con esas tablas pero en C y tambien las he visto en ensamblador pero yo quiero trabajar en PBP que es lo mejorcito que manejo.

lo que necesito es:
                          - como creo la tabla
                          - la parte en qeu se encribe el mensaje y se va a la tabla buscar los 5 bytes para cada caracter
gracias

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: como se crea y utilizan las tablas en PBP
« Respuesta #1 en: 23 de Agosto de 2006, 21:37:37 »
me explico mejor
bueno si alguien que sepa C y PBP se conmueve y me ayuda a pasar este codigo a Basic

ya he leido no crean que es flojera y he traducido la mayor parte del codigo solo me faltan la parte de las tablas

este es el codigo en C la creacion de la tabla :     ( el principio ya que lo demas se repite para crear los caracteres)
llamemoslo a esta seccion para que se entienda mejor parte A del Programa

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 '
                 

y despues de tener las tablas le viene el codigo que llama a la tabla y escribe el caracter:
parte B del programa


////////////////////////////////////////////////////////////////////////////////
// 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
}
////////////////////////////////////////////////////////////////////////////////


esta otra seccion escribe una frace
parte C del progrma

////////////////////////////////////////////////////////////////////////////////
// Escribe gráficamente texto en la LCD
////////////////////////////////////////////////////////////////////////////////

void nokia_texto(char x, char y, char fuente, char *caracter)
{
   int ind_bitmap,ind_memoria,xx,yy,max,desplazamiento;
   char 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;
      }
}
////////////////////////////////////////////////////////////////////////////////
se que es mucho pero al fin se tiene una rutina donde se puede escribir en la pantalla solo con una
 rutina y se hace mas facil como por ejemplo esta seccion:


for (k=40;k>-64;k--)
      {
         nokia_texto(0,k,NORMAL,   "Esta  libreria");
         nokia_texto(0,k+8,NORMAL, "esta basada en");
         nokia_texto(0,k+16,NORMAL,"las  funciones");
         nokia_texto(0,k+24,NORMAL,"de  mi   amigo");
         nokia_texto(0,k+32,NEGRITA," CUCARACHA");
         nokia_texto(0,k+48,NORMAL,"Descargala  en");
         nokia_texto(0,k+56,NEGRITA,"EL");
         nokia_texto(20,k+56,NEGRITA,"REBUJITO");
         nokia_texto(0,k+64,COMPRIMIDA,"HTTP:/MANOLO.AUNA.COM");
         nokia_imprime_memoria();
         nokia_borra_memoria();
         DelayMs(150);

las turinas que yo ya hice :
                                     - como escribri un comando
                                     - como escribri un dato
                                     - escribir un caracter sin tablas

se ve poquito pero no me fue muy facil  ya qeu el contraste me jugo una mala pasada y no veia lo que  escribia
y tube que releer el manual del controlador de la pantalla hasta me hice una traduccion del dichoso  ya que esta  en ingles como todos los datasheet.
Despues de tan largo detalle lo que voy  realizar ya que solo es cuestion de insistir seria:

una sub rutina llamada "nokia_texto"         esta escribe una "frase" completa llamando a otra sutina llamada
                                   nokia_printchar     esta escribe una letra para hacerlo lo hace con la tabla ASCII_TABLE

Para la parte de la tabla creo que ya lo tengo mas o menos he visto los ejemplos de LordLafebre   para crearla y con lo de arriba estoy en rumbo de crear la sutina de leer la tabla y escribir el caracter. Pa mañana les aviso si funcionaron mis ideas si no voy a seguir molestando.

NOTA: no quiero toda la programacion solo una orientacion un rumbo  (me salio laro el post no!!)jeje

Malo no es que no sepa lo malo seria que me quedase asi

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: como se crea y utilizan las tablas en PBP
« Respuesta #2 en: 23 de Agosto de 2006, 22:53:11 »
Hola:

al juzgar por esto:

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 '

Eso se asemeja a un vertor, porque no usas uno?

ejemplo:

vec bar byte [XX]

es lo que puedo ver, y me parece que te serviria, ya que no conozco de funciones para tablas en PBP, pero Proton si las tiene, que son por ejemplo CDATA, no se si uses ese, pero en PBP no se de algo como eso.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: como se crea y utilizan las tablas en PBP
« Respuesta #3 en: 24 de Agosto de 2006, 18:30:25 »
Hola Lordlafebre!

Acabo de montar el LCD de un nokia 5120 en una placa de circuito impreso, y lo conecte al puerto de un 16F628.
Estoy buscando las tramas para inicalizarlo, etc. Algo vi en el "cucaweb" pero en C...del cual no entiendo ni jota.
No tendras por ahi alguna direccion de internet de donde comenzar a mirar, o un trozo de codigo como para arrancar?

Gracias!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: como se crea y utilizan las tablas en PBP
« Respuesta #4 en: 24 de Agosto de 2006, 21:24:40 »
la quieres en PBP? suponiendo que sea asi yo las tengo pero hoy estoy en mi laburo asi que pa mañana te las paso
y la info que tengo de estas LCD tambien

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: como se crea y utilizan las tablas en PBP
« Respuesta #5 en: 24 de Agosto de 2006, 21:32:08 »
 :-/Gracias! Me van a venir bien. :-/

Intento hacer una libreria de funciones para estos displays, ya que se consiguen facil y estan buenos para muchos proyectos pequeños.

Saludos. :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: como se crea y utilizan las tablas en PBP
« Respuesta #6 en: 25 de Agosto de 2006, 14:33:38 »
bueno em primer lugar les cuento amigos que ya pude crear una la tabla que origino este post (maldita tabla se me hizo la dificil)  y pa habisarles como les  cuento que se puede utilizar la instruccion lookup de PBP se los explico enseguida ....

aitopes te cuento que mi fin tambien es ese pero lo veo un poco dificil hacerlo en Basic es mas  facil en C pero me meti en eso y ya casi las acabo y funcionan te las paso lo unico que en este programa utilizo un pic 16f877A y me comunico con el LCD atraves de su puerto SPI mas abajo pongo lo mismo pero para el 16f84A utilizando el puerto B para comunicarse con el LCD este me funciona pero solo configura el LCD y deja la pantalla en negro y se qeda parpadeando un led.

si te funcionan me avisas y si no tambien pa que ver como lo arreglamos  ten en cuenta de variar el contraste que no es un solo valor y si las mejoras tambien me cuentas

me  olvidaba   la tabla te ayuda a escribir hasta la letra O para escribir mas hay que haecr otra tabla mas

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: como se crea y utilizan las tablas en PBP
« Respuesta #7 en: 25 de Agosto de 2006, 14:46:04 »
Muchas gracias!
A la noche las pruebo, y te cuento.
Si se puede en C, se puede en Basic....;)

Gracias de nuevo. :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: como se crea y utilizan las tablas en PBP
« Respuesta #8 en: 25 de Agosto de 2006, 17:11:21 »
Hola

je je je, que torpe, se me paso el LOOKUP, creo que era para tablas de 8 bits, no lo recuerdo, tambien hay el LOOKUP2, a ratos llego a mezclar PBP y proton y me confundo por su similitud  :?
« Última modificación: 25 de Agosto de 2006, 17:23:27 por LordLafebre »