Libreria LCD 4Bit , para Pic16f

Ver el tema anterior Ver el tema siguiente Ir abajo

Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Miér 6 Oct 2010 - 21:08

Hola a todos..

He Realizado una librería para manejar lcd compatibles con Hitachi 44780, esta libreria esta basada en la original de arcachofo,publicada en este foro. a la cual he rescrito.

En General la he probado con algunos pic como 16F84 y16F876, usando lcd 16x2, 20x2. La idea es que la podamos ir complementado con mas funciones y mejorando posibles bugs.


Bueno Sin mas, aquí esta la librería la probé con 16F84A con sdcc y funciona bien..

Código:

/*****************************************************************************
******************************************************************************
****                          COMPILADOR SDCC                          ****
****                Libreria Lcd 4Bit para LDC 44780                    ****
****                                                                    ****
/ This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//------------------------------------------------------------------------
*************Historial de Cambios.********************************************
1- Reescrito y Modifcador por RiSanti ,foro Piclinux
2- Version Original por arcachofo  ,foro Piclinux
******************************************************************************
************************Ejemplo de Uso****************************************

#define RS RC1         //PIN PARA RS.
#define RW RC2         //PIN PARA RW.
#define EN RC3         //PIN PARA ENABLE.
#define lcdPortC           // Para usar Portc, para datos e 4Bit (ultimos 4bits)
#define FREQ 4000      // 4000 KHz = 4 Mhz, LA FRECUENCIA EN KHz.

********************************************************************************
****************************Definiciones por defecto****************************/
#ifndef __LCD_H__
#define __LCD_H__

  //Frecuencia de Operacion de 4MHZ
#ifndef FREQ
#define  FREQ  4000
#endif

#ifdef  lcdPortB
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
#ifdef  lcdPortC
#define  lcdPort  TRISC
#define  lcdDato  PORTC
#endif
#ifdef  lcdPortD
#define  lcdPort  TRISD
#define  lcdDato  PORTD
#endif
  //Por defecto definicion del Puerto B
#ifndef  lcdPort
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
  //Definicion de Pines de Control RS,RW,EN
#ifndef  RS
#define  RS  RB0
#endif
#ifndef  RW
#define  RW  RB1
#endif
#ifndef  EN
#define  EN  RB2
#endif
  //Defincion de Registro de GRam del Lcd
#define LCDLinea2 0x40
#define LCDLinea3 0x10
#define LCDLinea4 0x50
//>>>>>>>>>>>>>>Señales de Control>>>>>>>>>>>>>>//
#define EN1    EN=1; _asm nop  _endasm
#define EN0    EN=0; _asm nop  _endasm
#define RW1    RW=1; _asm nop  _endasm
#define RW0    RW=0; _asm nop  _endasm

//------------------ COMANDOS LCD -------------------------------
//---------------------------------------------------------------
#define clear              0x01 // Clear Display
#define home            0x02 // Cursor a Home
#define normal          0x06 // Normal
#define rev         0x04 // Normal-reverse
#define scroll          0x07 // con scroll
#define scroll_rev      0x05 // Reverse
#define d8_bit         0x38 // 8 bit 2 lineas ( 5x7 font )
#define d4_bit         0x28 // 4 bit 2 lineas ( 5x7 font )
#define reset         0x30 // Reset
#define dis_on              0x0C // Display on modo 2 lineas
#define dis_off            0x08 // Display off
#define linea1            0x80 // Linea 1 posicion 1
#define linea2            0xC0 // Line 2 posicion 1
#define cursor_on           0x0E // Cursor on
#define cursor_off           0x0C // Cursor off
#define blink_on        0x0F // Cursor blink
#define cursor_der      0x14 // Mover cursor derecha
#define cursor_izq       0x10 // Mover cursor izquierda
#define display__der      0x1C // Scroll display derecha
#define display__izq      0x18 // Scroll display izquierda
#define cg_addr         0x40 //
//----------------------------- Funciones Disponibles --------------------------------
//------------------------------------------------------------------------
void espera(char _ms)
{
  while (--_ms)
  {
  _asm
   nop
_endasm;
      }
}
void espera_ms(unsigned int ms)
{
     ms = ms * (FREQ / 4000); 
    while (ms > 0 )
    {
        espera(108);
        ms--;
    }
}

unsigned char lcd_leer()
{
unsigned _data=0;
lcdPort |= 0xf0;            //Los ultimos 4bit son Entradas
RW1;              //Modo Lectura
EN1;            //  Flaco de Subida Para pin EN
_data=lcdDato & 0xf0;        //Lectura de Nibble alto
EN0;            //  Flaco de Bajada Para pin EN
EN1;            //  Flaco de Bajada Para pin EN
_data|=((lcdDato &0x0f) >>4);       //Lectura de Nibble Bajo
EN0;            //  Flaco de Bajada Para pin EN
RW0;
return (_data);
}

void lcd_escribir(unsigned char c)
{
lcdPort &= 0x0f;       //Los ultimos 4bit son salidas
lcdDato=(lcdDato & 0x0f)|(c<<4);
EN1;
EN0;
}

void lcd_enviardato(unsigned char _ValorDato,unsigned char _TipoDato )
{
RS=0;
while ((lcd_leer())&0x80);      //leer Bit busy, espera a que lcd este libre.
if(_TipoDato>0)
      {
      RS=1;
        }
lcd_escribir((_ValorDato&0xf0)>>4);   //Enviar los El nibble mas significativo del Byte C
lcd_escribir((_ValorDato&0x0f)) ;   //Enviar los El nibble menos Singificativo del Byte C
}

void lcd_comando(unsigned char comando )
{
   lcd_enviardato(comando,0);
}

void lcd_borrar()
{
   lcd_comando( clear );
   lcd_comando( home );
}

void lcd_imprimir( unsigned char *car )
{
   char n = 0;
   while( car[n])
   {
      lcd_enviardato( car[n] ,1);
      n++;
   }
}


void lcd_posicion(unsigned char x ,unsigned char y)
{
switch(y)
  {
    case 1:
         y=0;
            break;
    case 2:
      y=LCDLinea2;
       break;
  case 3:
      y=LCDLinea3;
       break;
  case 4:
      y=LCDLinea4;
       break;
    default:
           y=0;
            break;
      }
lcd_comando( (0X80|(x+y-1)) );
}

void lcd_iniciar()
{
RS=0;
EN=0;
RW=0;
espera_ms(50);          // Esperar 50ms retardo durante el encendido.
//Enviar 3 veces 0x03 //
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
//Enviar 1 vez 0x02 //
lcd_escribir(2);
//Iniciacion 4bit 2 lineas //
lcd_comando( d4_bit );      //0x28 modo 4 bits 2 lineas
lcd_comando( dis_on );      //0x0c display on
lcd_comando( normal );      //0x06 entrada normal hacia adelante
lcd_comando( linea1 );      //0x80 linea 1 posicion 1
}

#endif



Como se usa..

Código:

/* ----------------------------------------------------------------------- */
/* Ejemplo LCD 4Bit Con Pic16f84a,  RiSanti*/
#include <pic16f84a.h>
#define FREQ 4000
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB
#include <lcd4.h>
//**************************************

typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF;


void main() {
TRISB=0;
TRISA=0;
PORTB=0;
lcd_iniciar();
lcd_comando(linea1);
lcd_imprimir("Test");
lcd_posicion(1,2);        //Posicion (x,Y)
lcd_imprimir("RiSanti");
while (1)
{
}
}

cheers cheers cheers Resumiendo. cheers cheers cheers


Se debe definir los parametros necesario para la operacion del lcd, como frecuencia del PIC,asignacion de Pines de control(ya sea EN,RS,RW) y Datos (últimos 4 bit de puestos B,C,D)

Código:

#define FREQ 4000  //se debe declarar la frecuencia a trabajar, mismo define que delay.h
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB           
#include <lcd4.h>
//**************************************
Para iniciar el Lcd se debe ejecutar primero esta funcion, para que el lcd trabaje a 4bit
Código:

lcd_iniciar();

La funcion lcd_comando , permite ejecutar comandos hacia el lcd, en la libreria estan la declarciones para algunos comando ej.
Código:

lcd_comando(linea1);

Si desea borrar el lcd y luego volver a la linea 1. se puede ejectuar
Código:

lcd_borrar();

Para cambiar de linea o avanzar de posicion, en el lcd se puede usar esta funcion.

Código:

lcd_posicion(1,2);        //Posicion (x,Y)



Bueno para imprimir alguna cadena de texto , se realiza mendiante :
Código:

lcd_imprimir("RiSanti");

Si se quiere por ejemplo imprimir un caracter a partir del un ASCII se puede usar.(imprimir el ASCII 65 )

Código:

 lcd_enviardato( 65 ,1);  //el Lcd imprimirá "A"

Ademas, trate de mejorar el problema de trabajar con un PIC Frecuencias de 4Mhz, ademas existe una pequeñas diferecias con la que publique hace en otro tema, ya que cambie el nombre de las funciones para no usar mayusculas para evitar errores al momento de programar.

Espero que la puedan probar y me den sus comentarios..



Para descargar visitar nuestro Box.
lcd4.h



Saludos
RiSanti Twisted Evil Twisted Evil


Última edición por Risanti el Lun 18 Abr 2011 - 12:27, editado 1 vez
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por marvicdigital1 el Lun 18 Oct 2010 - 13:51

Hola.
Gracias por tu librería. Apenas comienzo con el SDCC y PIKLAB, gracias al recien Ubuntú 10.10 y a que, el Windows me jodió el disco duro con su inseguridad Crying or Very sad ...
Bueno, estoy tratando de probar un LCD 4x20,que ya había hecho funcionar con el CCS y una de sus librerias; pues resulta que no he podido hacerlo funcionar con tu librería; ni siquiera muestra algo; también la probé con un LCD 2x16 y nada...el PIC que uso es el 16F628A con oscilador interno..mejor dicho te dejo el código para saber que es lo que estoy haciendo mal...como nota adicional, probé le PIKlab y el SDCC haciendo cosas básicas como led parpadeante entre otros, funcionando bien.


Código:
#include <pic16f628a.h>

/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */

typedef unsigned int word;
word at 0x2007 CONFIG = _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _MCLRE_OFF & _BODEN_ON & _LVP_OFF & _DATA_CP_OFF & _CP_OFF;

#define RS RA0
#define RW RA1
#define EN RA2
#define lcdPortB
#define FREQ 4000

#include "lcd4.h"


void isr() interrupt 0 {                                                                                                  /* rutina de servicio de interrupciones */
    /* << agregue el código de interrupción >> */
}

void main() {
    /* << agregue el código >> */
CMCON=0X07;
TRISA=0x00;
TRISB=0x02;
PORTA=0X00;
PORTB=0X00;

espera_ms(200);

lcd_iniciar();
lcd_borrar();
lcd_comando(linea1);
lcd_posicion(1,1);
lcd_imprimir("hola mundo");
lcd_posicion(1,2);
lcd_imprimir("Prueba de LCD");
lcd_posicion(1,3);
lcd_imprimir("con PIKLAB");
lcd_posicion(1,4);
lcd_imprimir("en Ubuntu 10.10");
while(1){

}


}

También quiero comentar, que el LCD si se inicia, o eso creo, ya que se ve como "blanquea" o limpia la pantalla.
Otra pregunta pero fuera de este tema; cuando se genera el .hex, veo que hay demasiados datos hexadecimales para algo tan simple como lo de el led parpadeante, no me queda claro que es lo que muestra realmente el piklab..si me dan una aclarada les agradezco mucho.

Saludos

Edit1: jaja..miercoles..!! me acordé que tengo que configurar el puerto A como salidas/entradas digitales ..ya les cuento como me fue.. Razz

Edit2: Listo, me faltaba ese detalle tongue ..tambien aclaro que mi LCD al ser de 4x20 había que cambiarle la dirección para las lineas 3 y 4 quedando en la librería:

Código:
 //Defincion de Registro de GRam del Lcd
#define LCDLinea2 0x40
#define LCDLinea3 0x14
#define LCDLinea4 0x54

Saludos y espero que este post también sirva de apoyo para los que cometan el mismo olvido bom

marvicdigital1
Nuevo Usuario
Nuevo Usuario

Mensajes : 2
Fecha de inscripción : 12/10/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Lun 18 Oct 2010 - 22:31

Hola..

Me alegra que te haya servido la libreria, el tema de definir los puertos es un error comun, a todos nos ha pasado alguna vez, oye que lcd 20x4 estas usando ya que yo no tengo de ese para probar tienes el datasheet para ver el tema de las direccion gram.

Por lo Que entendi al final con esas 2 correcciones (Definicion del Puerto y Direeciones para lcd 20x4) ¿¿¿¿¿ funciona correctamente el LCD????...


P.D.. yo la probe con un lcd 16x2 y pic16f628a (Con osc Interno) y funciona bien...
Saludos
RiSanti


avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por marvicdigital1 el Lun 18 Oct 2010 - 22:49

Hola Risanti, aprecio mucho tus aportes, he visto varios videos tuyos, te felicito.
Sobre el Datasheet, encontré uno genérico que funciona muy bien con el que tengo, que es un QY2004, vamos chino genérico Very Happy
El Datasheet..y si; funciona muy bien con el LCD 4x20..igual o hasta mejor que con la librería del CCS ya que lo veo más liviano....
De verdad muchas gracias de nuevo..

Saludos

marvicdigital1
Nuevo Usuario
Nuevo Usuario

Mensajes : 2
Fecha de inscripción : 12/10/2010

Volver arriba Ir abajo

error de compilación

Mensaje por tony8a87 el Dom 17 Abr 2011 - 19:25

Risanti escribió:Hola a todos..

He Realizado una librería para manejar lcd compatibles con Hitachi 44780, esta libreria esta basada en la original de arcachofo,publicada en este foro. a la cual he rescrito.

En General la he probado con algunos pic como 16F84 y16F876, usando lcd 16x2, 20x2. La idea es que la podamos ir complementado con mas funciones y mejorando posibles bugs.


Bueno Sin mas, aquí esta la librería la probé con 16F84A con sdcc y funciona bien..

Código:

/*****************************************************************************
******************************************************************************
****                          COMPILADOR SDCC                          ****
****                Libreria Lcd 4Bit para LDC 44780                    ****
****                                                                    ****
/ This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//------------------------------------------------------------------------
*************Historial de Cambios.********************************************
1- Reescrito y Modifcador por RiSanti ,foro Piclinux
2- Version Original por arcachofo  ,foro Piclinux
******************************************************************************
************************Ejemplo de Uso****************************************

#define RS RC1         //PIN PARA RS.
#define RW RC2         //PIN PARA RW.
#define EN RC3         //PIN PARA ENABLE.
#define lcdPortC           // Para usar Portc, para datos e 4Bit (ultimos 4bits)
#define FREQ 4000      // 4000 KHz = 4 Mhz, LA FRECUENCIA EN KHz.

********************************************************************************
****************************Definiciones por defecto****************************/
#ifndef __LCD_H__
#define __LCD_H__

  //Frecuencia de Operacion de 4MHZ
#ifndef FREQ
#define  FREQ  4000
#endif

#ifdef  lcdPortB
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
#ifdef  lcdPortC
#define  lcdPort  TRISC
#define  lcdDato  PORTC
#endif
#ifdef  lcdPortD
#define  lcdPort  TRISD
#define  lcdDato  PORTD
#endif
  //Por defecto definicion del Puerto B
#ifndef  lcdPort
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
  //Definicion de Pines de Control RS,RW,EN
#ifndef  RS
#define  RS  RB0
#endif
#ifndef  RW
#define  RW  RB1
#endif
#ifndef  EN
#define  EN  RB2
#endif
  //Defincion de Registro de GRam del Lcd
#define LCDLinea2 0x40
#define LCDLinea3 0x10
#define LCDLinea4 0x50
//>>>>>>>>>>>>>>Señales de Control>>>>>>>>>>>>>>//
#define EN1    EN=1; _asm nop  _endasm
#define EN0    EN=0; _asm nop  _endasm
#define RW1    RW=1; _asm nop  _endasm
#define RW0    RW=0; _asm nop  _endasm

//------------------ COMANDOS LCD -------------------------------
//---------------------------------------------------------------
#define clear              0x01 // Clear Display
#define home            0x02 // Cursor a Home
#define normal          0x06 // Normal
#define rev         0x04 // Normal-reverse
#define scroll          0x07 // con scroll
#define scroll_rev      0x05 // Reverse
#define d8_bit         0x38 // 8 bit 2 lineas ( 5x7 font )
#define d4_bit         0x28 // 4 bit 2 lineas ( 5x7 font )
#define reset         0x30 // Reset
#define dis_on              0x0C // Display on modo 2 lineas
#define dis_off            0x08 // Display off
#define linea1            0x80 // Linea 1 posicion 1
#define linea2            0xC0 // Line 2 posicion 1
#define cursor_on           0x0E // Cursor on
#define cursor_off           0x0C // Cursor off
#define blink_on        0x0F // Cursor blink
#define cursor_der      0x14 // Mover cursor derecha
#define cursor_izq       0x10 // Mover cursor izquierda
#define display__der      0x1C // Scroll display derecha
#define display__izq      0x18 // Scroll display izquierda
#define cg_addr         0x40 //
//----------------------------- Funciones Disponibles --------------------------------
//------------------------------------------------------------------------
void espera(char _ms)
{
  while (--_ms)
  {
  _asm
   nop
_endasm;
      }
}
void espera_ms(unsigned int ms)
{
     ms = ms * (FREQ / 4000); 
    while (ms > 0 )
    {
        espera(108);
        ms--;
    }
}

unsigned char lcd_leer()
{
unsigned _data=0;
lcdPort |= 0xf0;            //Los ultimos 4bit son Entradas
RW1;              //Modo Lectura
EN1;            //  Flaco de Subida Para pin EN
_data=lcdDato & 0xf0;        //Lectura de Nibble alto
EN0;            //  Flaco de Bajada Para pin EN
EN1;            //  Flaco de Bajada Para pin EN
_data|=((lcdDato &0x0f) >>4);       //Lectura de Nibble Bajo
EN0;            //  Flaco de Bajada Para pin EN
RW0;
return (_data);
}

void lcd_escribir(unsigned char c)
{
lcdPort &= 0x0f;       //Los ultimos 4bit son salidas
lcdDato=(lcdDato & 0x0f)|(c<<4);
EN1;
EN0;
}

void lcd_enviardato(unsigned char _ValorDato,unsigned char _TipoDato )
{
RS=0;
while ((lcd_leer())&0x80);      //leer Bit busy, espera a que lcd este libre.
if(_TipoDato>0)
      {
      RS=1;
        }
lcd_escribir((_ValorDato&0xf0)>>4);   //Enviar los El nibble mas significativo del Byte C
lcd_escribir((_ValorDato&0x0f)) ;   //Enviar los El nibble menos Singificativo del Byte C
}

void lcd_comando(unsigned char comando )
{
   lcd_enviardato(comando,0);
}

void lcd_borrar()
{
   lcd_comando( clear );
   lcd_comando( home );
}

void lcd_imprimir( unsigned char *car )
{
   char n = 0;
   while( car[n])
   {
      lcd_enviardato( car[n] ,1);
      n++;
   }
}


void lcd_posicion(unsigned char x ,unsigned char y)
{
switch(y)
  {
    case 1:
         y=0;
            break;
    case 2:
      y=LCDLinea2;
       break;
  case 3:
      y=LCDLinea3;
       break;
  case 4:
      y=LCDLinea4;
       break;
    default:
           y=0;
            break;
      }
lcd_comando( (0X80|(x+y-1)) );
}

void lcd_iniciar()
{
RS=0;
EN=0;
RW=0;
espera_ms(50);          // Esperar 50ms retardo durante el encendido.
//Enviar 3 veces 0x03 //
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
//Enviar 1 vez 0x02 //
lcd_escribir(2);
//Iniciacion 4bit 2 lineas //
lcd_comando( d4_bit );      //0x28 modo 4 bits 2 lineas
lcd_comando( dis_on );      //0x0c display on
lcd_comando( normal );      //0x06 entrada normal hacia adelante
lcd_comando( linea1 );      //0x80 linea 1 posicion 1
}




Como se usa..

Código:

/* ----------------------------------------------------------------------- */
/* Ejemplo LCD 4Bit Con Pic16f84a,  RiSanti*/
#include <pic16f84a.h>
#define FREQ 4000
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB
#include <lcd4.h>
//**************************************

typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF;


void main() {
TRISB=0;
TRISA=0;
PORTB=0;
lcd_iniciar();
lcd_comando(linea1);
lcd_imprimir("Test");
lcd_posicion(1,2);        //Posicion (x,Y)
lcd_imprimir("RiSanti");
while (1)
{
}
}

cheers cheers cheers Resumiendo. cheers cheers cheers


Se debe definir los parametros necesario para la operacion del lcd, como frecuencia del PIC,asignacion de Pines de control(ya sea EN,RS,RW) y Datos (últimos 4 bit de puestos B,C,D)

Código:

#define FREQ 4000  //se debe declarar la frecuencia a trabajar, mismo define que delay.h
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB           
#include <lcd4.h>
//**************************************
Para iniciar el Lcd se debe ejecutar primero esta funcion, para que el lcd trabaje a 4bit
Código:

lcd_iniciar();

La funcion lcd_comando , permite ejecutar comandos hacia el lcd, en la libreria estan la declarciones para algunos comando ej.
Código:

lcd_comando(linea1);

Si desea borrar el lcd y luego volver a la linea 1. se puede ejectuar
Código:

lcd_borrar();

Para cambiar de linea o avanzar de posicion, en el lcd se puede usar esta funcion.

Código:

lcd_posicion(1,2);        //Posicion (x,Y)



Bueno para imprimir alguna cadena de texto , se realiza mendiante :
Código:

lcd_imprimir("RiSanti");

Si se quiere por ejemplo imprimir un caracter a partir del un ASCII se puede usar.(imprimir el ASCII 65 )

Código:

 lcd_enviardato( 65 ,1);  //el Lcd imprimirá "A"

Ademas, trate de mejorar el problema de trabajar con un PIC Frecuencias de 4Mhz, ademas existe una pequeñas diferecias con la que publique hace en otro tema, ya que cambie el nombre de las funciones para no usar mayusculas para evitar errores al momento de programar.

Espero que la puedan probar y me den sus comentarios..



Para descargar visitar nuestro Box.
lcd4.h



Saludos
RiSanti Twisted Evil Twisted Evil

Que tal risanti necesito de tu ayuda, estoy ocupando un PIC16F877A y quiero utilizar tu liberia del lcd, pero me marca un error de compilación entiendo que se se debe a las lineas
Código:
#ifndef __LCD_H__
#define __LCD_H__

Código:
sdcc -mpic14 -p16f877a -V --debug -I/home/antonio8a87/Programacion/Micropics/LDC_2x16/ -c LCD_2x16.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -I"/home/antonio8a87/Programacion/Micropics/LDC_2x16/" -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=290 -DSDCC_REVISION=5416 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f877a" -isystem "/usr/bin/../share/sdcc/include/pic14" -isystem "/usr/share/sdcc/include/pic14" -isystem "/usr/bin/../share/sdcc/include" -isystem "/usr/share/sdcc/include" -isystem "/usr/bin/../share/sdcc/include/pic" -isystem "/usr/share/sdcc/include/pic" "LCD_2x16.c" 
4:
lcd4.h:34: 1: error: unterminated #ifndef
 
 
*** Exited with status: 1 ***
hara falta modificar algo en lo particular?
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Lun 18 Abr 2011 - 12:30

Holaaa.
Hace tiempo que he estado fuera del foro, pero ahora estare un poco mas seguido.
Mira al parecer se trata por que en la libreria que publique falta un #endif ,Si copiaste directamente desde mi publicacion esta este error pero si bajaste el archivo esta bien.

Prueba Agredando este #endif y me comentas.

Saludos
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por tony8a87 el Mar 19 Abr 2011 - 2:09

Risanti escribió:Holaaa.
Hace tiempo que he estado fuera del foro, pero ahora estare un poco mas seguido.
Mira al parecer se trata por que en la libreria que publique falta un #endif ,Si copiaste directamente desde mi publicacion esta este error pero si bajaste el archivo esta bien.

Prueba Agredando este #endif y me comentas.

Saludos
RiSanti

hola le borre estas dos lineas de tu archi original que tienes subido.

Código:
#ifndef __LCD_H__

#define __LCD_H__
Y me fuciono a todo dar!!!!
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Mar 19 Abr 2011 - 14:01

Igual es solución, pero de la manera que esta el archivo debe funcionar yo probé compilando el ejemplo otra vez y funciona bien..

el tema de #ifndef __LCD_H__ se usa en las librerías para evitar problemas cuando se usan varias librerías a la vez.
Consultas que version de sdcc estas usando?? yo la probe con un version de marzo 2011 y funciona.


Saludos
Risanti




avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por tony8a87 el Mar 19 Abr 2011 - 14:31

Risanti escribió: Igual es solución, pero de la manera que esta el archivo debe funcionar yo probé compilando el ejemplo otra vez y funciona bien..

el tema de #ifndef __LCD_H__ se usa en las librerías para evitar problemas cuando se usan varias librerías a la vez.
Consultas que version de sdcc estas usando?? yo la probe con un version de marzo 2011 y funciona.


Saludos
Risanti

Tengo instalada esta 2.9.0-5 (sdcc) se que esta la 3.0 pero no la querido instalar aun, no se que cambios existan.
Saludos!
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Mar 19 Abr 2011 - 16:21

Me puedes mandar tus archivos, para ver cual es el problema que tienes??..


Saludos
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por tony8a87 el Mar 19 Abr 2011 - 16:40

Risanti escribió:Me puedes mandar tus archivos, para ver cual es el problema que tienes??..


Saludos
RiSanti
Lo envie a tu correo personal los archivos.
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por tony8a87 el Jue 21 Abr 2011 - 15:28

hola quiero compartir este codigo para el manejo de tu libreria de ldc y analogico digital utilizando variables.
Código:
/* ----------------------------------------------------------------------- */
/* Template source file generated by piklab */
#include <pic/pic16f877a.h>
#include <pic/adc.h>
#include <pic/delai.h>

#define FREQ 4000
//***************LCD Definiciones*****
#define RS RD0
#define RW RD1
#define EN RD2
#define lcdPortD
#include <pic/lcd4.h>

/* ----------------------------------------------------------------------- */
/* Configuration bits: adapt to your setup and needs */
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_ON & _PWRTE_OFF & _BODEN_OFF & _LVP_ON & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;

#define NUMBER_OF_DIGITS 16  /* space for NUMBER_OF_DIGITS + '\0' */

void uitoa(unsigned int value, char* string, int radix)
{
unsigned char index, i;

  index = NUMBER_OF_DIGITS;
  i = 0;

  do {
    string[--index] = '0' + (value % radix);
    if ( string[index] > '9') string[index] += 'A' - ':';  /* continue with A, B,.. */
    value /= radix;
  } while (value != 0);

  do {
    string[i++] = string[index++];
  } while ( index < NUMBER_OF_DIGITS );

  string[i] = 0; /* string terminator */
}

void itoa(int value, char* string, int radix)
{
  if (value < 0 && radix == 10) {
    *string++ = '-';
    uitoa(-value, string, radix);
  }
  else {
    uitoa(value, string, radix);
  }
}

void main() {
long int valor=0;
char valor1[10]="";
char voltaje1[10]="";
int voltaje=0;
   int i=0;
   TRISA=1;
   TRISD=0;
   PORTD=0;
   adc_init(FOSC_2, A1_R0, INT_OFF); //Uso de Rutina ADC de PIC, iniciacion
   lcd_iniciar();
   while(1){
      valor=adc_read(0);
      voltaje=valor*50/1023;
      itoa(valor,valor1,10);
      itoa(voltaje,voltaje1,10);
      lcd_comando(linea1);
      lcd_imprimir(valor1);
      lcd_posicion(1,2);
      lcd_imprimir(voltaje1);   
      delay_ms(30);
      lcd_borrar();
   }
}

Saludos cordiales!!!
avatar
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Lvcios el Miér 4 Mayo 2011 - 5:13

Hola que tal como están!?
Bueno pues nada más para reportar que probé la libreria y me dio resultados excelentes cheers
Gracias a Risanti y a Arcachofo Twisted Evil

Este es el código:
Código:

/*************************************************************************** */
/* plantilla.c                                                              */
/*---------------------------------------------------------------------------*/
/* Plantilla generica para escribir programas en C con el SDCC              */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                            */
/*****************************************************************************/

//-- Cabecera del PIC a emplear
#include <pic16f628a.h>
//#include <delay.h>
//#define CLOCK_SPEED 8000000
//#include <delay.h>
#define RS RA0
#define RW RA1
#define EN RA2
#define lcdPortB
#define FREQ 4000
#include <lcd4.h>
//#include <delay.c>

// Bits de configuracion (opcional)
typedef unsigned int word;
word at 0x2007 CONFIG = _WDT_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _DATA_CP_ON & _CP_OFF;


/*****************************************/
/* Rutina de atencion a la interrupcion  */
/* (opcional)                            */
/*****************************************/
void isr() interrupt 0 {
   
}

/*****************************/
/*  Funciones del programa  */
/*****************************/
//void retardo_ms(unsigned int ms);

/*****************************/
/* Programa principal        */
/*****************************/
void main() {
CMCON=0X07;
TRISA=0x00;
TRISB=0x02;
PORTA=0X00;
PORTB=0X00;
espera_ms(200);
lcd_iniciar();
lcd_comando(linea1);
//lcd_imprimir("Test");
while (1)
{

lcd_posicion(1,1);        //Posicion (x,Y)
lcd_borrar();
lcd_imprimir("UPIICSA LIBRE");espera_ms(1000);//retardo_ms(1000);
lcd_posicion(1,2);
lcd_imprimir("TEST LCD 16x2");espera_ms(1000);//retardo_ms(1000);
lcd_borrar();
lcd_posicion(1,1);
lcd_imprimir("HARDWARE LIBRE");espera_ms(1000);//retardo_ms(1000);
lcd_posicion(1,2);
lcd_imprimir("=O =P xD ;)");espera_ms(1000);//retardo_ms(1000);
}
}

Aquí la imagen de prueba


Por si no se ve, aquí el link : http://twitpic.com/4t3t63

Lvcios
Participante
Participante

Mensajes : 10
Fecha de inscripción : 22/04/2011

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Lvcios el Vie 13 Mayo 2011 - 6:26

Hola, ando yo de nuevo aquí, solo para preguntar como se imprimiria una cadena de caracteres pero que esten dentro de un array.
Simplemente se escribe lcd_imprimir(cad[8]); por ejemplo o hay que hacer más. Saludos!

Bueno, ya lo "solucione", solo era cuestion de leer bien la libreria, la función que hace eso es enviardato() =D

Lvcios
Participante
Participante

Mensajes : 10
Fecha de inscripción : 22/04/2011

Volver arriba Ir abajo

problema com pic16f84a

Mensaje por johnibat el Sáb 4 Ago 2012 - 2:57

hola, cómo conectar el prototipo, y que los pines deben estar conectados, usted tiene una foto, que como fue probado y no quieren trabajar. muchas gracias



Batista











tony8a87 escribió:
Risanti escribió:Hola a todos..

He Realizado una librería para manejar lcd compatibles con Hitachi 44780, esta libreria esta basada en la original de arcachofo,publicada en este foro. a la cual he rescrito.

En General la he probado con algunos pic como 16F84 y16F876, usando lcd 16x2, 20x2. La idea es que la podamos ir complementado con mas funciones y mejorando posibles bugs.


Bueno Sin mas, aquí esta la librería la probé con 16F84A con sdcc y funciona bien..

Código:

/*****************************************************************************
******************************************************************************
****                          COMPILADOR SDCC                          ****
****                Libreria Lcd 4Bit para LDC 44780                    ****
****                                                                    ****
/ This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//------------------------------------------------------------------------
*************Historial de Cambios.********************************************
1- Reescrito y Modifcador por RiSanti ,foro Piclinux
2- Version Original por arcachofo  ,foro Piclinux
******************************************************************************
************************Ejemplo de Uso****************************************

#define RS RC1         //PIN PARA RS.
#define RW RC2         //PIN PARA RW.
#define EN RC3         //PIN PARA ENABLE.
#define lcdPortC           // Para usar Portc, para datos e 4Bit (ultimos 4bits)
#define FREQ 4000      // 4000 KHz = 4 Mhz, LA FRECUENCIA EN KHz.

********************************************************************************
****************************Definiciones por defecto****************************/
#ifndef __LCD_H__
#define __LCD_H__

  //Frecuencia de Operacion de 4MHZ
#ifndef FREQ
#define  FREQ  4000
#endif

#ifdef  lcdPortB
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
#ifdef  lcdPortC
#define  lcdPort  TRISC
#define  lcdDato  PORTC
#endif
#ifdef  lcdPortD
#define  lcdPort  TRISD
#define  lcdDato  PORTD
#endif
  //Por defecto definicion del Puerto B
#ifndef  lcdPort
#define  lcdPort  TRISB
#define  lcdDato  PORTB
#endif
  //Definicion de Pines de Control RS,RW,EN
#ifndef  RS
#define  RS  RB0
#endif
#ifndef  RW
#define  RW  RB1
#endif
#ifndef  EN
#define  EN  RB2
#endif
  //Defincion de Registro de GRam del Lcd
#define LCDLinea2 0x40
#define LCDLinea3 0x10
#define LCDLinea4 0x50
//>>>>>>>>>>>>>>Señales de Control>>>>>>>>>>>>>>//
#define EN1    EN=1; _asm nop  _endasm
#define EN0    EN=0; _asm nop  _endasm
#define RW1    RW=1; _asm nop  _endasm
#define RW0    RW=0; _asm nop  _endasm

//------------------ COMANDOS LCD -------------------------------
//---------------------------------------------------------------
#define clear              0x01 // Clear Display
#define home            0x02 // Cursor a Home
#define normal          0x06 // Normal
#define rev         0x04 // Normal-reverse
#define scroll          0x07 // con scroll
#define scroll_rev      0x05 // Reverse
#define d8_bit         0x38 // 8 bit 2 lineas ( 5x7 font )
#define d4_bit         0x28 // 4 bit 2 lineas ( 5x7 font )
#define reset         0x30 // Reset
#define dis_on              0x0C // Display on modo 2 lineas
#define dis_off            0x08 // Display off
#define linea1            0x80 // Linea 1 posicion 1
#define linea2            0xC0 // Line 2 posicion 1
#define cursor_on           0x0E // Cursor on
#define cursor_off           0x0C // Cursor off
#define blink_on        0x0F // Cursor blink
#define cursor_der      0x14 // Mover cursor derecha
#define cursor_izq       0x10 // Mover cursor izquierda
#define display__der      0x1C // Scroll display derecha
#define display__izq      0x18 // Scroll display izquierda
#define cg_addr         0x40 //
//----------------------------- Funciones Disponibles --------------------------------
//------------------------------------------------------------------------
void espera(char _ms)
{
  while (--_ms)
  {
  _asm
   nop
_endasm;
      }
}
void espera_ms(unsigned int ms)
{
     ms = ms * (FREQ / 4000); 
    while (ms > 0 )
    {
        espera(108);
        ms--;
    }
}

unsigned char lcd_leer()
{
unsigned _data=0;
lcdPort |= 0xf0;            //Los ultimos 4bit son Entradas
RW1;              //Modo Lectura
EN1;            //  Flaco de Subida Para pin EN
_data=lcdDato & 0xf0;        //Lectura de Nibble alto
EN0;            //  Flaco de Bajada Para pin EN
EN1;            //  Flaco de Bajada Para pin EN
_data|=((lcdDato &0x0f) >>4);       //Lectura de Nibble Bajo
EN0;            //  Flaco de Bajada Para pin EN
RW0;
return (_data);
}

void lcd_escribir(unsigned char c)
{
lcdPort &= 0x0f;       //Los ultimos 4bit son salidas
lcdDato=(lcdDato & 0x0f)|(c<<4);
EN1;
EN0;
}

void lcd_enviardato(unsigned char _ValorDato,unsigned char _TipoDato )
{
RS=0;
while ((lcd_leer())&0x80);      //leer Bit busy, espera a que lcd este libre.
if(_TipoDato>0)
      {
      RS=1;
        }
lcd_escribir((_ValorDato&0xf0)>>4);   //Enviar los El nibble mas significativo del Byte C
lcd_escribir((_ValorDato&0x0f)) ;   //Enviar los El nibble menos Singificativo del Byte C
}

void lcd_comando(unsigned char comando )
{
   lcd_enviardato(comando,0);
}

void lcd_borrar()
{
   lcd_comando( clear );
   lcd_comando( home );
}

void lcd_imprimir( unsigned char *car )
{
   char n = 0;
   while( car[n])
   {
      lcd_enviardato( car[n] ,1);
      n++;
   }
}


void lcd_posicion(unsigned char x ,unsigned char y)
{
switch(y)
  {
    case 1:
         y=0;
            break;
    case 2:
      y=LCDLinea2;
       break;
  case 3:
      y=LCDLinea3;
       break;
  case 4:
      y=LCDLinea4;
       break;
    default:
           y=0;
            break;
      }
lcd_comando( (0X80|(x+y-1)) );
}

void lcd_iniciar()
{
RS=0;
EN=0;
RW=0;
espera_ms(50);          // Esperar 50ms retardo durante el encendido.
//Enviar 3 veces 0x03 //
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
lcd_escribir(3);
espera_ms(5);
//Enviar 1 vez 0x02 //
lcd_escribir(2);
//Iniciacion 4bit 2 lineas //
lcd_comando( d4_bit );      //0x28 modo 4 bits 2 lineas
lcd_comando( dis_on );      //0x0c display on
lcd_comando( normal );      //0x06 entrada normal hacia adelante
lcd_comando( linea1 );      //0x80 linea 1 posicion 1
}




Como se usa..

Código:

/* ----------------------------------------------------------------------- */
/* Ejemplo LCD 4Bit Con Pic16f84a,  RiSanti*/
#include
#define FREQ 4000
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB
#include
//**************************************

typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF;


void main() {
TRISB=0;
TRISA=0;
PORTB=0;
lcd_iniciar();
lcd_comando(linea1);
lcd_imprimir("Test");
lcd_posicion(1,2);        //Posicion (x,Y)
lcd_imprimir("RiSanti");
while (1)
{
}
}

cheers cheers cheers Resumiendo. cheers cheers cheers


Se debe definir los parametros necesario para la operacion del lcd, como frecuencia del PIC,asignacion de Pines de control(ya sea EN,RS,RW) y Datos (últimos 4 bit de puestos B,C,D)

Código:

#define FREQ 4000  //se debe declarar la frecuencia a trabajar, mismo define que delay.h
//***************LCD Definiciones*****
#define RS RB0
#define RW RB1
#define EN RB2
#define lcdPortB           
#include
//**************************************
Para iniciar el Lcd se debe ejecutar primero esta funcion, para que el lcd trabaje a 4bit
Código:

lcd_iniciar();

La funcion lcd_comando , permite ejecutar comandos hacia el lcd, en la libreria estan la declarciones para algunos comando ej.
Código:

lcd_comando(linea1);

Si desea borrar el lcd y luego volver a la linea 1. se puede ejectuar
Código:

lcd_borrar();

Para cambiar de linea o avanzar de posicion, en el lcd se puede usar esta funcion.

Código:

lcd_posicion(1,2);        //Posicion (x,Y)



Bueno para imprimir alguna cadena de texto , se realiza mendiante :
Código:

lcd_imprimir("RiSanti");

Si se quiere por ejemplo imprimir un caracter a partir del un ASCII se puede usar.(imprimir el ASCII 65 )

Código:

 lcd_enviardato( 65 ,1);  //el Lcd imprimirá "A"

Ademas, trate de mejorar el problema de trabajar con un PIC Frecuencias de 4Mhz, ademas existe una pequeñas diferecias con la que publique hace en otro tema, ya que cambie el nombre de las funciones para no usar mayusculas para evitar errores al momento de programar.

Espero que la puedan probar y me den sus comentarios..



Para descargar visitar nuestro Box.
lcd4.h



Saludos
RiSanti Twisted Evil Twisted Evil

Que tal risanti necesito de tu ayuda, estoy ocupando un PIC16F877A y quiero utilizar tu liberia del lcd, pero me marca un error de compilación entiendo que se se debe a las lineas
Código:
#ifndef __LCD_H__
#define __LCD_H__

Código:
sdcc -mpic14 -p16f877a -V --debug -I/home/antonio8a87/Programacion/Micropics/LDC_2x16/ -c LCD_2x16.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -I"/home/antonio8a87/Programacion/Micropics/LDC_2x16/" -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=290 -DSDCC_REVISION=5416 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f877a" -isystem "/usr/bin/../share/sdcc/include/pic14" -isystem "/usr/share/sdcc/include/pic14" -isystem "/usr/bin/../share/sdcc/include" -isystem "/usr/share/sdcc/include" -isystem "/usr/bin/../share/sdcc/include/pic" -isystem "/usr/share/sdcc/include/pic" "LCD_2x16.c" 
4:
lcd4.h:34: 1: error: unterminated #ifndef
 
 
*** Exited with status: 1 ***
hara falta modificar algo en lo particular?

johnibat
Nuevo Usuario
Nuevo Usuario

Mensajes : 1
Fecha de inscripción : 28/07/2012
Edad : 47
Localización : Goiania

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Sáb 4 Ago 2012 - 15:47

Hola.
Si adjuntas tu codigo q estas compilando seria mejor. y que version de sdcc tienes..

Saludos
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Pincho_86 el Dom 5 Ago 2012 - 7:58

Hola a todos estoy probando la libreria y anda muy bien solo que tengo el problema de que no puedo eviar datos tipo int, la aplicacion es para un voltimetro. e visto que algunos usan la funcion itoa con la cual entiendo que pasan de int a char. la cuestion e que esta funcion no me la reconoce el sdcc. si alguien podria darme una idea de mostrar un valor tipo int con esta libreria se lo agradeceria. desde ya muchas gracias. saludos

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Risanti el Dom 5 Ago 2012 - 12:33

hola mira este link. Felixls publico varias librerias utiles, ahi esta como hacer el Itoa.


void itoa(int value, char* string, int radix)
{
if (value < 0 && radix == 10) {
*string++ = '-';
uitoa(-value, string, radix);
}
else {
uitoa(value, string, radix);
}
}http://www.ucontrol.com.ar/forosmf/programacion-en-c/librerias-para-sdcc-para-copiar-y-usar/


atte.
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 32
Localización : La Serena Chile

http://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Pincho_86 el Lun 6 Ago 2012 - 23:02

Muchas gracias Risanti me funciono muy bien lo que me pasaste.

saludos

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Pincho_86 el Sáb 1 Sep 2012 - 20:21

Hola nuevamente!!! me surgio otro problema y lo comento para ver si alguien me puede ayudar. estoy usando la libreria lcd4.h la cual anda de maravilla per conjuntamente estoy usando la libreria adc.h sacada de este mismo foro y el problema es cuando la uso con 2 entradas analogicas. todo compila bien pero cuando lo simulo y/o pongo en marcha, la segunda entrada (AN1) no la muestra bien, y el el proteus me sale el siguiente mje: ADC conversion started before 'wait' time has expired following previous conversion or channel change. atribuyo a este error que la lectura de la variable sea erronea.

si alguien sabe como solucionarlo le estare agradecido muchas gracias
saludos

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Pincho_86 el Dom 2 Sep 2012 - 19:30

ya ta ya lo solucione simplemente habia que poner un retardo entre que asigna el canal e inicia la conversion (GO=1). muchas gracias igual

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: Libreria LCD 4Bit , para Pic16f

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.