Autor Tema: Libreria LCD 3310 nokia en c18 No existe?  (Leído 4952 veces)

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

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Libreria LCD 3310 nokia en c18 No existe?
« en: 26 de Octubre de 2010, 00:39:25 »
Hola a todos, Gracias de Antemano, por leer mi inquietud!

Tengo 3 dias en Internet bajando cuanto codigo ejemplo para que trabaje mi LCD Nokia 3310 en C18
De hecho la primera vez lo hice trabajar con las libreria de NOCTURNO, Gracias a las libreria de este señor me trabajo en CCS.
Como deseo trabajar con USB y los PIC18f4550 y/o  18f2550 por la herramienta del USB, en los foros  encuentro que es mucho mejor trabajar con el compilador c18.
En fin hay muchas razones tecnica y personales que llevas a estar con este compilador, pero no encuentro libreria que me funcione con dicho LCD NOKIA 3310

Este el codigo lo eh modificado muy poco para  ponder a trabar el LCD Nokia 3310.
SI alguien tiene el codigo o puede hacer funcionar el que anexo, excelente!!
Le agradecería a que me ayude
Si tiene la libreria en C18 para el nokia 3310 lo agregue y asi resolver el problema a mucho que investigan este caso.

/*****************************************************

    Plug n Play Library for Nokia 3310 LCD

    Author:  Ajay Bhargav
    Edited by Ronald Arthur to run on pic
    microcontrollers and within the
    mikroC environment
                Email :  contact@rickeyworld.info
                WWW   :  www.8051projects.net

                File  :  LCD.C
                Info  :  easy to use library function

*****************************************************/
#include"p18f4550.h"
#include"confbits.h"
#include"delays.h"




void spisend(unsigned char);
void wrdata(unsigned char);
void wrcmd(unsigned char);
void pixelxy(unsigned char, unsigned char);
void cursorxy(unsigned char, unsigned char);
void clearram(void);
void initlcd(void);
void putchar(unsigned char);
void putstr (unsigned char*);

/* Modify it to fit your schematic */
#define SCK PORTBbits.RB7
#define DAT PORTBbits.RB6
#define DC PORTBbits.RB5
#define CE PORTBbits.RB4
#define RES PORTBbits.RB3

/*
#define nok_sclk  PIN_B7
#define nok_sda   PIN_B6
#define nok_dc    PIN_B5
#define nok_cs    PIN_B4
#define nok_res   PIN_B3
*/

/* Lookup Table for Nokia LCD */
//unsigned char const FontLookup [][5] =
unsigned char const FontLookup [20] =
{
     0x3E, 0x51, 0x49, 0x45, 0x3E ,   // 0
     0x00, 0x42, 0x7F, 0x40, 0x00 ,   // 1
     0x42, 0x61, 0x51, 0x49, 0x46 ,   // 2
     0x21, 0x41, 0x45, 0x4B, 0x31 ,   // 3
};

/* Send single byte on SPI Bus (software) */
/* Input Arguments: x -> Byte to send     */

void spisend(unsigned char x)
{
        unsigned char i;
        for(i=8;i>0;i--){
                SCK = 0;
                if((x&0x80)){
                        DAT = 1;
                } else {
                        DAT = 0;
                }
                SCK = 1;
//                x <<= 1;
             x=x<<1;
        }
}

/* Write Data Byte to Nokia LCD              */
/* Input Arguments: x-> Data Byte to be sent */

void wrdata(unsigned char x)
{
        DC = 1;
        CE = 0;
        spisend(x);
        CE = 1;
}

/* Write Command Byte to Nokia LCD               */
/* Input Arguments: x -> Command Byte to be sent */
void wrcmd(unsigned char x)
{
        DC = 0;
        CE = 0;
        spisend(x);
        CE = 1;
}

/* Brings ram pointer to X,Y pixel position            */
/* Input Arguments: x-> X cordinate range from 0 to 83 */
/* Input Arguments: y-> Y cordinate range from 0 to 5  */
void pixelxy(unsigned char x, unsigned char y)
{
        wrcmd(0x40|(y&0x07));   // Y axis
        wrcmd(0x80|(x&0x7f));   // X axis
}

/* Clears the screen */
void clearram(void)
{
        int ddram;
        pixelxy(0,0);                                                                           // Cursor Home.
        for (ddram=504;ddram>0;ddram--) {wrdata(0x00);}         // 6*84 = 504 DDRAM addresses.
}

/* Nokia3310 LCD Initialization */
void initlcd(void)
{
        //DC = 1; //quitar
      RES = 1;        // Set _RES HIGH.
        CE = 1;         // Disable Chip.
        RES = 0;                // Reset the LCD.
      Delay1KTCYx(592);
        //delay_ms(240);  // Wait 100ms.
        RES = 1;                // Awake LCD from RESET state.

        wrcmd(0x21);            // Activate Chip and H=1.
        wrcmd(0xC2);            // Set LCD Voltage to about 7V.
        wrcmd(0x13);            // Adjust voltage bias.
        wrcmd(0x20);            // Horizontal addressing and H=0.
        wrcmd(0x09);            // Activate all segments.
        clearram();                     // Erase all pixel on the DDRAM.
        wrcmd(0x08);            // Blank the Display.
        wrcmd(0x0);            // Display Normal.
        pixelxy(0,0);           // Cursor Home.
}

/* Bring cursor to Line and character specified                     */
/* Input Arguments: row    -> Line number range from 1 to 6         */
/* Input Arguments: Column -> character position range from 1 to 14 */
/* You can have maximum of 6 lines of text on LCD and each line
   containing 14 characters. Address is auto increment              */

void cursorxy(unsigned char row, unsigned char col)
{
        if((row>6) || (row<1) || (col<1) || (col>14))
                return;
        pixelxy(((col-1)*6),(row-1));
}

/* Writes single character on LCD                   */
/* Input Arguments: ch -> Character to be displayed */
void putchar(unsigned char ch)
{
        unsigned char i, temp;
        if ( (ch < 0x20) || (ch > 0x7b) ){
                ch = 92;
        }
        for(i=0;i<5;i++){
                temp = FontLookup ;
         temp = 0x05; // quitar ernesto   
               wrdata(temp);
        }
        wrdata(0x00);
}

/* Writes character string on LCD                            */
/* Input Arguments: str -> Pointer to string to be displayed */
void putstr (unsigned char *str)
{
        while(*str)
                putchar(*str++);
}


/*
  Main code by Ronald Arthur
  Accra - Ghana
  (c) 2010
*/
void main()
{
//  cmcon = 0x07;  //convert all comparators to digital pins
  TRISA = 0xff;  //set porta as input
  TRISB = 0x00;  //set portb as output
        initlcd();
cursorxy(0,0);
  putstr("FUSE 1 IS OK");
  /*while(1)
  {
  while(porta.f0==1)
  {
  cursorxy(1,1);
  putstr("FUSE 1 IS OK");
  }
  clearram();
  while(porta.f0==0)
  {
  cursorxy(1,1);
  putstr("FUSE 1 ALERT");
  clearram();
  delay_ms(1000);
  cursorxy(1,1);
  putstr("FUSE 1 ALERT");
  delay_ms(1000);
  }
  clearram();
  }*/
while(1){

}

}

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #1 en: 26 de Octubre de 2010, 03:19:37 »
¿Y no te interesaría modificar la librería de CCS a C18?, quizás no tengas que cambiar muchas cosas.

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #2 en: 26 de Octubre de 2010, 17:15:52 »
Gracias, por tu pronta respuesta, con el poco conocimiento en C18 o casi nulo por eso busco librerías existente, para realizar el aprendizaje basico e ir construyendo mis proyectos.

De acuerdo a algunos temas anteriores
ZUCKY convirtió librerías en C30 tuyas NOCTURNO a CCS.

Nocturno no crees tu? que el código de C30 seria mas fácil convertirlo a C18?, la pregunta la hago porque apenas estoy conociendo este mundo de MIcrocontroladores.

Si es así : tu podrías facilitarlas? o con la guía tuya podría convertirlas

Gracias nuevamente a todos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #3 en: 26 de Octubre de 2010, 18:01:41 »
Pues no controlo casi nada el C18 pero creo que también es Ansi C, al igual que el C30, así que no debería costar mucho.
Claro que las llamadas a los puertos y toda la parte que tenga dependencia del hardware será diferente porque los micros son distintos.

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #4 en: 26 de Octubre de 2010, 18:08:43 »
Gracias Nocturno en donde puedo localizar dichas librerias?


Desconectado gary_servin

  • PIC12
  • **
  • Mensajes: 65
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #6 en: 26 de Octubre de 2010, 21:17:22 »
Hola ejrua, lo que yo hice fue modificar las librerías de la pagina de cucaracha y la pase a C18 (no tuve que cambiar muchas cosas), actualmente estoy usando el lcd con un 18F45K20.

Saludos!

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #7 en: 27 de Octubre de 2010, 11:08:18 »
Gracias por Tu Respuesta, Para todos mi Nombre es Ernesto, y tu podrías enviarme el codigo? de todos modos voy a intentarlo!, ahh creo que el de cucaracha no manejas diferente tamaña y formato de letra es que deseo hacerle un juego a mis hijas y necesito el que hizo Nocturno, mas sin embargo sirve!, claro que si!.

Estoy intentando migrar la de Nocturno y tengo problemas con el uso de la memoria, esta fraccion de codigo no la soporta C18
char MemoriaVideo[504];
 y el codigo maneja varias vectores superiores a 256 byte de tamaño y esto genera error de tamaño de memoria asi:
'.udata_main.o' can not fit the section.

y no me deja tener mas de dos arreglos asi que no tengo ni idea como manejar esta situacion

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #8 en: 27 de Octubre de 2010, 11:28:08 »
Gracias por Tu Respuesta, Para todos mi Nombre es Ernesto, y tu podrías enviarme el codigo? de todos modos voy a intentarlo!, ahh creo que el de cucaracha no manejas diferente tamaña y formato de letra es que deseo hacerle un juego a mis hijas y necesito el que hizo Nocturno, mas sin embargo sirve!, claro que si!.

Estoy intentando migrar la de Nocturno y tengo problemas con el uso de la memoria, esta fraccion de codigo no la soporta C18
char MemoriaVideo[504];
 y el codigo maneja varias vectores superiores a 256 byte de tamaño y esto genera error de tamaño de memoria asi:
'.udata_main.o' can not fit the section.

y no me deja tener mas de dos arreglos asi que no tengo ni idea como manejar esta situacion

Hay que modificar el lkr del microcontrolador usado para crear un banco de 512 bytes, por ejemplo.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #9 en: 27 de Octubre de 2010, 13:21:49 »
EL siguiente mensaje
« Última modificación: 27 de Octubre de 2010, 13:26:44 por ejrua »

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #10 en: 27 de Octubre de 2010, 13:24:07 »
Gracias Zuky, por tu respuesta, ya modifique la definición de los arreglos, con ayuda tambien de Gary Servin, defini los arreglos de esta manera "const rom unsigned char ASCII_TABLE1 [240]" y compila normal.
 Y la aplicacion corre de la siguiente manera:
void main (void)
   Lcd_init();
    nokia_clean_ddram();                  
   nokia_gotoxy(0,0);  
   printf(nokia_printchar,'123456');  // No hace nada
   Delay1KTCYx(2);
nokia_printchar('1'); // SI muestra el valor 1
  while(1){}
}

Con "printf" no muestra la cadena en el LCD
En cambio con "nokia_printchar" si muestra el caracter 1

gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #11 en: 27 de Octubre de 2010, 14:14:34 »
Acuérdate que no es CCS, así no funciona printf en C18. Buscar en el foro como se debe trabajar.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #12 en: 27 de Octubre de 2010, 17:17:57 »
Gracias Sucky

Consegui la ruta donde explicas como usar printf en c18, realize los cambios que mencionastes necsarios y me funciona las funciones:
lcd_putrs y lcd_puts, pero con printf basado en el ejemplo que enviaste no realiza nada:

este codigo es que realizo las pruebas:

   nokia_gotoxy(0,0);
   lcd_putrs("linea.1");
   nokia_gotoxy(10,10);
   stdout =_H_USER;
   printf("Var= %u",Variable); // No muestra nada
   nokia_gotoxy(10,20);
   lcd_puts(Buffer); // Muestra el valor del arreglo

gracias Sucky

Desconectado gary_servin

  • PIC12
  • **
  • Mensajes: 65
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #13 en: 27 de Octubre de 2010, 21:08:04 »
Incluiste el archivo stdio.h al proyecto?

Saludos!

Desconectado ejrua

  • PIC10
  • *
  • Mensajes: 10
Re: Libreria LCD 3310 nokia en c18 No existe?
« Respuesta #14 en: 29 de Octubre de 2010, 16:28:30 »
Si claro!, de hecho te paso el codigo para qu lo analices y Gary_servin me comentaste que podias enviarme la libreria para compararla, con la mia que funciona muy bien pero en el prinf, segui todo el procedimiento y no funciona! anexo los archivos