Fichero LCD.C exacto del CCS C

hola, yo tenía ese problema al asignar pines con el lcd.c que viene con el ccs, y finalmente el único problema es que deben poner el #define port... antes del include<lcd.c> (tampoco es necesario modificar el lcd.c) error de principiante supongo. para conectar el lcd al puerto A en un 16f628a yo usé la siguiente asignación utilizando uno de los pines B, ya que ni el a4 y ni el a5 me funcionaron :S
ahora estoy buscando una forma de utilizar el lcd con 8 bits, he encontrado algunas librerías pero sólo tienen las funciones lcd_putc() y yo busco alguna que tenga la funcion printf(...) ¿alguna sugerencia?

#define LCD_ENABLE_PIN PIN_a2 ////
#define LCD_RS_PIN PIN_a0 ////
#define LCD_RW_PIN PIN_a1 ////
#define LCD_DATA4 PIN_a3 ////
#define LCD_DATA5 PIN_b0 ////
#define LCD_DATA6 PIN_a6 ////
#define LCD_DATA7 PIN_a7
#define LCD_EXTENDED_NEWLINE

#include<lcd.c>

Los pines 4 y 5 de PORTA estan configurados inicialmente como comparadores, para usuarlos como entradas y asi poder usarlos para el lcd debes desactivar los comparadores, te recomiendo que cheques en el datasheet del PIC16F628A, ahi viene como inicializar el porta, creo que es la página 33, analiza la inicialización e inserta ese pedazo de código ensamblador.
Saludos!

Edit: Perdón, pin A5 de PORTA es para resetear la pic, no funciona como salida sino como entrada, siempre como entrada.

Por cierto, MikroC trae una libreria para usar los lcd a 8 bits
 
Última edición:
Los pines 4 y 5 de PORTA estan configurados inicialmente como comparadores, para usuarlos como entradas y asi poder usarlos para el lcd debes desactivar los comparadores, te recomiendo que cheques en el datasheet del PIC16F628A, ahi viene como inicializar el porta, creo que es la página 33, analiza la inicialización e inserta ese pedazo de código ensamblador.

Además, el Pin A4 es de open drain, por lo que deberías ponerle una res. de pullup si deseás usarlo como salida...

Saludos,
Gonzalo
 
Hola, estoy intentando utilizar una lcd con la libreria del puerto C, y me estoy volviendo un poco loco.....
Utilizo un 18f2550, y el programa es el siguiente:
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,USBDIV,PLL2,CPUDIV1,VREGEN,PUT,MCLR
#use delay(clock=48000000)

#define ON output_high
#define OFF output_low
#include "lcd_portc.c" // METER AQUI LOS ARCHIVOS *.c !!, si va antes de los fuses
// Salen errores!!!!!!!!
// Connections in 18F2550
#define LedV PIN_B0
#define LedR PIN_B1
void main() {
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(False);

//-----Con 2 led veo en que estado estoy
on(ledr);
off(ledv);
delay_ms(500);
lcd_init(); // Inicializo el LCD.

// delay_ms(1000);
on(ledv);
off(ledr);

lcd_gotoxy(3,1); // Coloca el cursor en el espacio 3 de la fila 1
lcd_putc("Hola mundo"); // Envia el mensaje al LCD
delay_ms(500);
on(ledr); // Al encenderse el Led Rojo deberia salir el mensaje en el LCD ya
while(1);

}

Al conectarlo a la alimentacion, en el LCD aparece la linea de arriba con todo cuadrados.
Al inicializarlo (El led verde se enciende) desaparece esos cuadrados (asi que supongo que se inicializa bien el lcd)
Pero luego ya no aparece nada más, y el led rojo se ilumina, asi que no se que ocurre....

Cualquier ayuda aunque sea poca se agradece, muchas gracias de antemano.
Un saludo, David.
 
Hola amigos!.. e intentado varios codigos que e visto por varios libros y por varios foros, y siempre me sale el mismo error, el cual consiste en que al mostrar un texto en la lcd como tal en la simulacion me aparecen caracteres como #*/, ya llevo como una semanana con el mismo error..
muchas gracias!...
 
perdon que reavive el post pero la libreria que tengo en el CCS es LCD.C y la libreria del CCS posteada en el post N°1 es LCDD.C ! me he fijado que son diferentes, son para distintos LCD ?
o sirven para controlar distintos diplays ? por ejemplo con la LCD.C yo manejo los displays 16x2 y 8x2 no se si se podran manejar otros con esta libreria

y con la LCDD.C ?? que displays estan manejando ? saludos !
 
Comunidad foros de electrónica me gustaría que me ayudaran con las librerías de la lcd 4x20 para que funcione
por 2 puertos diferentes estuve consultando sobre lcd_flex pero aun no e podido solucionar.
Me gustaría aprender a modificar las librería del lcd para poder cambiarle los pines de funcionamiento.
Conexión que necesito:

RA0 = E
RA1 = RS
RA2 = RW

RB4 = D4
RB5 = D5
RB6 = D6
RB7 = D7

Codigo en c

Código:
#include <16f628a.h>
#use     delay(crystal = 4MHz)

//#define use_portb_kbd TRUE
#include <kbd_lib.c>
#include <LCD420.c>


void main () 
{
CHAR k;

   lcd_init();
   kbd_init();
   port_b_pullups(TRUE);
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Bienvenidos (^^,)");
   
   while (true)
   {
      k = kbd_getc();
      
      if (k!=0)
      lcd_putc(k);
      
         }
   }

Les adjunto la simulación en proteus.
 

Adjuntos

  • isis.png
    isis.png
    22.9 KB · Visitas: 14
  • pic16f628a.rar
    48.2 KB · Visitas: 25
Última edición:
Es más fácil modificar la librería lcd.c que la librería lcd420.c
Sólo debes reemplazar la rutina lcd_gotoxy(x, y); de la librería lcd.c por la de la librería lcd420.c

Si tu versión de lcd.c tiene la definición LCD_EXTENDED_NEWLINE incluida en la rutina, la debes dejar para mantener la compatibilidad.

De esa forma puedes usar cualquier pin para el control y también para los datos, usando las definiciones de la librería.
Este pequeño cambio hará que la librería lcd.c también funcione para pantallas 20x4.

Las ventajas de usar la librería lcd.c modificada son mayores, porque esta librería tiene mas funciones.
 
Es más fácil modificar la librería lcd.c que la librería lcd420.c
Sólo debes reemplazar la rutina lcd_gotoxy(x, y); de la librería lcd.c por la de la librería lcd420.c

Si tu versión de lcd.c tiene la definición LCD_EXTENDED_NEWLINE incluida en la rutina, la debes dejar para mantener la compatibilidad.

De esa forma puedes usar cualquier pin para el control y también para los datos, usando las definiciones de la librería.
Este pequeño cambio hará que la librería lcd.c también funcione para pantallas 20x4.

Las ventajas de usar la librería lcd.c modificada son mayores, porque esta librería tiene mas funciones.

Gracias D@rkbytes por tus orientaciones le cuento, encontré una librería lcd.c con la definición LCD_EXTENDED_NEWLINE le hice los cambios por #define para los pines que nesecito y no dio errores pero en la simulación en proteus no mostró nada y los pines definidos E,RS,RW no alumbraban ni la lcd mostró nada.

Después encontré una librería flex_lcd decía que se podía modificar E,RS,RW pero la incluí en mi programa y dio muchos errores al compilarla.

Le adjunto las dos nuevas librerías y la simulación para que me aconsejes y ayudes para avanzar en mi proyecto de grado.
 

Adjuntos

  • pic16f628a.rar
    52.1 KB · Visitas: 19
Nop. No estás realizando bien las modificaciones ni usando las definiciones para los pines.

Mejor adjunto la librería modificada con un ejemplo de uso y simulación para Proteus 7.10 y 8.1

PD:
Cuando uses alguna librería que tenga el mismo nombre que alguna de las que se encuentran en la carpeta Drivers de PICC Compiler, debes incluirla con el nombre entre comillas ("") para que el compilador sepa que la librería que debe usar se encuentra en la carpeta del proyecto.
Si escribes el nombre entre los símbolos (<>) el compilador siempre usará la que encuentre por defecto en la carpeta Drivers.
 

Adjuntos

  • 16F628A LCD 4x20 AnyPin + Keyboard 3x4.rar
    43.4 KB · Visitas: 129
Nop. No estás realizando bien las modificaciones ni usando las definiciones para los pines.

Mejor adjunto la librería modificada con un ejemplo de uso y simulación para Proteus 7.10 y 8.1

PD:
Cuando uses alguna librería que tenga el mismo nombre que alguna de las que se encuentran en la carpeta Drivers de PICC Compiler, debes incluirla con el nombre entre comillas ("") para que el compilador sepa que la librería que debe usar se encuentra en la carpeta del proyecto.
Si escribes el nombre entre los símbolos (<>) el compilador siempre usará la que encuentre por defecto en la carpeta Drivers.

Gracias por la explicación y ayudarme me quedo bien entendido, esta semana estaré trabajando me ayudaste con un avance bien significativo mil gracias.
 
Atrás
Arriba