Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

14/10/2015 #141


Hola juanma2468 si probé con lcd.c pero no me funciono tampoco.
Gracias
24/02/2017 #142


Hola, llevo semanas intentando mostrar mensajes en una lcd de 16x02.
Me he leido un monton de temas en este foro y otros foros en varios idiomas.
He probado un monton de codigos, algunas librerias.
He revisado el circuito que tengo montado en la protoboard varias veces, tambien he probado con otros microcontroladores.
No consigo hacer que la lcd muestre mensajes en CCS.
He probado en MikroC hoy mismo y me ha funcionado a la primera.
Pero mi intención es usar CCS de Pic C Compiler.
He probado muchos fuses, tantos que me parece que muchos no son necesarios para lo que tengo que hacer.
Mi codigo es lo mas basico que pueda haber, no se en que estoy fallando.
Código:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,NOPUT,NOCPD,NODEBUG 
#use delay(crystal = 20Mhz)


#include <flex_lcd.c>
#use fast_io(D)
#use fast_io(c)
#use fast_io(b)

void main(){
 set_tris_c(0b00000000);
  set_tris_b(0b00000000);
  lcd_init();                                 // Inicializa el lcd
  
  
  lcd_putc('\f');                            // Borra el lcd
   
  while(TRUE){
  
delay_ms(100);
   
   
        lcd_gotoxy(6, 1);                     // Va a la columna 5, fila 1
        
   printf(lcd_putc,"Hola");
     
  }
  }
En MikroC a la primera funcionando, en CCs no encuentro manera y llevo semanas haciendo pruebas.
El pic, cristal, condensadores estan bien, lo se porque funciona haciendo parpadear leds y funciona el programa en Mikroc.
24/02/2017 #143

Avatar de juanma2468

Podrías subir el esquema de conexiones que estas usando? Por otro lado, que puerto de salida de datos estas usando?

Enviado desde mi SM-J710MN mediante Tapatalk
24/02/2017 #144


No probaste usar la librería de CCS en vez de esa que dice flex_lcd? La de CCS programas los pines de Datos, RW, RS y E y funciona yo los hice funcionar.

Enviado desde mi XT1650 mediante Tapatalk
24/02/2017 #145
Moderador

Avatar de D@rkbytes

electrofoton dijo: Ver Mensaje
En MikroC a la primera funcionando, en CCs no encuentro manera y llevo semanas haciendo pruebas.
Actualiza el compilador de CCS.
Algunas versiones 4.XX tienen ese problema que se corrigió con las posteriores versiones.
Actualmente salió la versión 5.070 para usuarios registrados.
25/02/2017 #146

Avatar de TRILO-BYTE

aver intenta asi:

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,NOPUT, NOCPD,NODEBUG
#use delay(crystal = 20Mhz)
#include <flex_lcd.c>

void main(){
lcd_init(); // Inicializa el lcd


lcd_putc('\f'); // Borra el lcd


lcd_gotoxy(1, 1);
printf(lcd_putc,"Hola");

while(TRUE){





}
}
25/02/2017 #147


Las conexiones se ven en el siguiente esquema. Lo he configurado en el archivo flex_lcd.c
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
//
#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E PIN_B3

He probado la libreria lcd.c, flex_lcd y otras que he encontrado.
Uso la version 5.015


TRILO-BYTE dijo: Ver Mensaje
aver intenta asi:

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,NOPUT, NOCPD,NODEBUG
#use delay(crystal = 20Mhz)
#include <flex_lcd.c>

void main(){
lcd_init(); // Inicializa el lcd


lcd_putc('\f'); // Borra el lcd


lcd_gotoxy(1, 1);
printf(lcd_putc,"Hola");

while(TRUE){





}
}
Lo que me sale en el código de arriba es lo que se ve en la foto de abajo.
Uso una lcd keypad shield Df Robot.
No se si habra que modificar algo más en la libreria flex_lcd para que funcione esta lcd.
Con el codigo de arriba tambien he probado a ponerle una pausa, pero el resultado en igualmente no positivo.
Seré uno de los pocos que no son capaces de hacer funcionar una simple lcd!!!
He puesto una foto del circuito.
Imágenes Adjuntas
Tipo de Archivo: jpg esquema lcd 16f877a.jpg (115,0 KB (Kilobytes), 16 visitas)
Tipo de Archivo: png P_20170225_061551.png (113,6 KB (Kilobytes), 12 visitas)
Tipo de Archivo: jpg lcd2.jpg (92,9 KB (Kilobytes), 14 visitas)
25/02/2017 #148
Moderador

Avatar de D@rkbytes

A mi no me gusta usar la librería flex_lcd, siempre he usado las que vienen con el compilador y si requiero una función especial, edito la librería.

Pero usando la librería por defecto, (lcd.c) sale andando a la primera, mira:


A éstas horas del cumpleaños ya no hace falta preguntar de qué sabor es el pastel.
Imágenes Adjuntas
Tipo de Archivo: jpg Dsc01983.jpg (92,2 KB (Kilobytes), 44 visitas)
25/02/2017 #149

Avatar de TRILO-BYTE

ami no me gusta la libreria de CCS hise la mia :p


bueno veo que usas un crsital por que no intentas usar el oscilador interno y quitas el master reset y vez que pasa intentalo asi:

#include <16F877A.h>

#fuses INTRC_IO,NOWDT,NOMCLR
#Use delay (clock=8M)

#include <flex_lcd.c>

void main(){
lcd_init(); // Inicializa el lcd


lcd_putc('\f'); // Borra el lcd


lcd_gotoxy(1, 1);
printf(lcd_putc,"Hola");

while(TRUE)
{
}

}
ahora omite el boton reset y omite el cristal en la simulacion configuralo a 8Mhz aver que sucede
25/02/2017 #150


TRILO-BYTE dijo: Ver Mensaje
ami no me gusta la libreria de CCS hise la mia :p


bueno veo que usas un crsital por que no intentas usar el oscilador interno y quitas el master reset y vez que pasa intentalo asi:



ahora omite el boton reset y omite el cristal en la simulacion configuralo a 8Mhz aver que sucede
Me parece que el 16f877a no tiene oscilador interno.
Me da error el Pic C Compiler si le pongo el fuse NOMCLR.
D@rkbytes, que microcontrolador usas en la imagen, veo que no usas condensadores, los lleva internos el cristal?
Puedes poner el código que has usado?
25/02/2017 #151
Moderador

Avatar de D@rkbytes

electrofoton dijo: Ver Mensaje
Me parece que el 16f877a no tiene oscilador interno.
Así es, el PIC16F877A no tiene oscilador interno.
electrofoton dijo: Ver Mensaje
Me da error el Pic C Compiler si le pongo el fuse NOMCLR.
Eso es normal, porque en el PIC16F877A el pin de reset no puede ser usado como entrada.
Es únicamente reset.
Y tampoco es necesario configurar todos los fuses.
Al usar: #use delay (crystal = x frecuencia) automáticamente se establecen los fuses requeridos, que en los casos básicos son los adecuados.
Y ésto también lo hace el compilador con varios registros para garantizar una inicialización estándar.
electrofoton dijo: Ver Mensaje
D@rkbytes, ¿Qué microcontrolador usas en la imagen?
Es un PIC16F877A
Y aunque en la imagen no se alcanzó a ver la resistencia del pin 1, MCLR, hacia VCC, si la tiene. (4.7 KΩ)
electrofoton dijo: Ver Mensaje
Veo que no usas condensadores. ¿Los lleva internos el cristal?
Posiblemente, pero no lo creo. La capacitancia parásita del protoboard, los hace innecesarios.
Es raro que los ponga en el protoboard, a menos que requiera ajustar la frecuencia a un valor exacto.
electrofoton dijo: Ver Mensaje
¿Puedes poner el código que has usado?
Claro. Adjunto programa y esquema.
Aunque casi estoy seguro que ya lo he publicado, posiblemente dentro de éste mismo tema, o en algún otro similar.
También se incluye la simulación en proteus 7.10 y 8.5 SP1 (No necesarias)

Notas importantes:
No compilar, usar el archivo hex incluido.
Conectar como se muestra en el esquema y probar. (Debe funcionar correctamente)
Después compilar, volver a grabar el PIC y probar, para determinar problemas del compilador.
Archivos Adjuntos
Tipo de Archivo: rar 16F877A LCD 16x2.rar (142,6 KB (Kilobytes), 6 visitas)
25/02/2017 #152



No me funciona.
No muestra nada la pantalla.
Voy a probar en MikroC, a configurar la lcd para funcionar en el puerto D, para comprobar si funciona.
25/02/2017 #153
Moderador

Avatar de D@rkbytes

electrofoton dijo: Ver Mensaje

No me funciona.
No muestra nada la pantalla.
Voy a probar en MikroC, a configurar la lcd para funcionar en el puerto D, para comprobar si funciona.
Revisa bien tus conexiones. Algunos protoboard muchas veces suelen tener falsos contactos.
Como la configuración de pines es diferente debido a cada librería, prueba usando la misma disposición de pines en tus pruebas.
Ya que puede ser que algunas líneas del protoboard estén dañadas.
Verifica la continuidad de las líneas, cambia todo de lugar y prueba nuevamente, o usa otro protoboard.
25/02/2017 #154


Ya he comprobado la continuidad, acaba ahora mismo de probar en MikroC un programa usando los mismos pines del puerto D y si que funciona en MikroC.

En el programa en MikroC, no se declara el pin RW, sin embargo funciona.

Código:
sbit LCD_RS at RD1_bit;
sbit LCD_EN at RD0_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD1_bit;
sbit LCD_EN_Direction at TRISD0_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// Fin de declaración de variables de conexión.

char contador=0,estado=1,texto1[]="Hola", texto2[4];

void main(){



Lcd_Init();                //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);       //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);  //Apaga el cursor.
Lcd_Out(1,6,texto1);       //Escribe el texto1.

{
 if (Button(&PORTA,4,1,0)) estado=0;    //Si se pulsa.
 if (estado==0 && Button(&PORTA,4,1,1)) //Si se pulsa y se libera.
 {
  contador++;  //"contador" contiene el número de pulsaciones.
  if (contador>100) contador=0;
  estado=1;
 }
 ByteToStr(contador,texto2); //Convierte a texto el contenido de la variable contador
                             //y lo guarda en texto2.
 Lcd_Out(2,6,"MikroC");        //Muestra el texto2.
}
}
¿Hago lo mismo en CCs?
¿Dejo sin declarar RW?
¿Lo conecto a masa, como he visto que algunos hacen?

Edito:
He configurado el pin RW y también funciona.
Me esta seduciendo mucho la idea de pasarme a MikroC y enviar a la m.... CCS
25/02/2017 #155

Avatar de roberttorres

No se si viene al caso, pero alguna vez tuve un problema similar cuando utilizaba un crystal de 20 mhz(salia caracteres raros en el lcd), prueba con uno de 4 mhz.
PD: Nunca supe del porque funcionaba con el de 4mhz y no con el 20 mhz (solo soy un hobbista ).
25/02/2017 #156


roberttorres dijo: Ver Mensaje
No se si viene al caso, pero alguna vez tuve un problema similar cuando utilizaba un crystal de 20 mhz(salia caracteres raros en el lcd), prueba con uno de 4 mhz.
PD: Nunca supe del porque funcionaba con el de 4mhz y no con el 20 mhz (solo soy un hobbista ).
He probado con cristal de 4,8,12 y 20 Mhz. Las ultimas pruebas con cristal de 4 Mhz.
El ultimo codigo que he probado debería de funcionar, pero no me funciona. No se si hay que modificar algo en la libreria lcd.c para que funcione con mi lcd.

Código:
/*******************************************************************************
* Programa: LCD16x2 Test.c
* Versión: 1.0
* Autor: D@rkbytes
* Compañia: Digitek
* Notas: 
* Prueba simple de un LCD 16x2
*******************************************************************************/
#include <16F877A.H>
#use     delay(crystal = 4 MHz)

#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
//
#define LCD_RS PIN_D1
#define LCD_RW PIN_D2
#define LCD_E PIN_D0
 #define LCD_DATA_PORT getenv("SFR:PORTD")  
#include <lcd.c>

void main (void)
{
   lcd_init();                   // Inicializar la pantalla.
   lcd_putc("\fHola Mundo");     // Escribe en la primer línea.
   lcd_putc("\nHello World");    // Escribe en la segunda línea.
   
   while (true);
}
He revisado muchas veces la continuidad en el circuito. No se me ocurre que más puedo hacer, no quiero rendirme, no se que estoy haciendo mal y quiero descubrirlo.
Debe de haber más gente que haya tenido el mismo problema que yo y haya dado con la solución.
25/02/2017 #157


Pregunta básica son con el procesador ese Hitachi no el LCD no tiene otro no?

Enviado desde mi XT1650 mediante Tapatalk

Pregunta básica son con el procesador ese Hitachi no el LCD no tiene otro no? Osea el HD44780 digo! Porque hay otros



Enviado desde mi XT1650 mediante Tapatalk

Pregunta básica son con el procesador ese Hitachi no el LCD no tiene otro no? Osea el HD44780 digo! Porque hay otros.
25/02/2017 #158


dcsalg dijo: Ver Mensaje

Pregunta básica son con el procesador ese Hitachi no el LCD no tiene otro no? Osea el HD44780 digo! Porque hay otros
Enviado desde mi XT1650 mediante Tapatalk
He buscado informacion sobre mi pantalla y usa el HD44780.
Es una Lcd keypad shield Df Robot, la he conseguido hacer funcionar en arduino y MikroC.
Tanto en arduino como con MikroC, funcionando a la primera.
¿Hay "otras" librerias de confianza para probar con esta lcd?
He desinstalado el pic c compiler para reinstalar las librerias por si habia algo mal pero nada, sigue todo igual de mal.
25/02/2017 #159
Moderador

Avatar de D@rkbytes

Estoy seguro que debe haber alguna incompatibilidad por los componentes extra que tiene ese tipo de pantalla.
Si usaras una pantalla normal, no tendrías problemas.

Por aquí vi alguna información:
Warning to users of some vendors LCD keypad shields.
25/02/2017 #160


Es una lastima porque este lcd ya lleva el regulador para el contraste, luz de fondo y los botones.
Voy a buscar si tengo otro lcd de los mas sencillos y pruebo si funciona.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.