Autor Tema: PROBLEMAS PARA INICIALIZAR LCD CON CCS  (Leído 6246 veces)

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

Desconectado BEXTIXTOX

  • PIC16
  • ***
  • Mensajes: 108
PROBLEMAS PARA INICIALIZAR LCD CON CCS
« en: 08 de Junio de 2010, 23:51:44 »
HOLA tengo un problema con ccs

el problemas es que ago un programa muy simple como mandar "HOLA MUNDO" a una lcd de 40x2
con un PIC 16f877
si lo ago con CCS en proteus me funciona bien pero en la targeta REAL no mi problema es JUSTO cuando doy la palabra
 " LCD_INIT() " pues e puesto a destellar unos led en el puerto B antes de inbocar LCD_INIT() y destellan bien.
 y despues de la instruccion LCD_INIT()  ya no destellan.

Ahora ago el programa equivalente pero en MIKROC y funciona correctamente en los dos PROTEUS y tarjeta REAL.

NOTA:
los led los puse para saber que esta vivo el pic en la tarjeta real y
de pendiendo la forma de destellar se en que punto se queda.

otra las librerias que uso una es la que trae CCS por DEFAULT y la otra ya la modifoque de acuerdo a articulos que
encontre por la red


la verdad me comentan que me olvide de CCS y siga con MIKROC pero NOOOOO!!!!!!!
el ARTE de esto es saber por que me esta dando problemas y por que



aqui pongo el codigo en CCS 
   #include <16f877.h>                      //pic a utilizar 
   #fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
   #use delay (clock=4000000)               //Fosc=4Mhz
   #define use_portD_lcd TRUE               //definir portd lcd
   #include <lcd.c>                         //libreria manejo lcd
   #use standard_io(c)                      //
   #use standard_io(d)                      //
   #use standard_io(b)
   
 
void main(void)
{

   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0x0f);            //         00001111
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0xf0);            //         11110000
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0x0f);            //         00001111
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0xf0);            //         11110000
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
     
   
    lcd_init();                        // JUSTO AQUI SE DETIENE

   
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0xaa);            //         10101010
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0x55);            //         01010101
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0xaa);            //         10101010
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   output_b(0x55);            //         01010101
   DELAY_MS(500);                     // UN RETARO DE MEDIO SEGUNO
   
     
   printf(lcd_putc, " HOLA MUNDO ");      //MENSAJE DE BIEN BENIDA
   
  }


alguien me puede ayudar veo ilogico mi problema pero es REAL tengo ese problema...


saludos...


Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: PROBLEMAS PARA INICIALIZAR LCD CON CCS
« Respuesta #1 en: 09 de Junio de 2010, 00:07:08 »
Podras explicar como conectas el display al PIC.??
Que pines utilizas y a donde los conectas??

CCS utiliza el pin de RW para leer o escribir en display, cosa que no muchos utilizan.
Si no lo conectas la libreria se queda buscando la lectura del bit de instruccion cumplida y no manda mas el proximo comando.
Por eso es tan importante... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado BEXTIXTOX

  • PIC16
  • ***
  • Mensajes: 108
Re: PROBLEMAS PARA INICIALIZAR LCD CON CCS
« Respuesta #2 en: 09 de Junio de 2010, 00:23:22 »
estoy trabajando en modo 4 bit
en el puerto d

  D2 ------ RS
  D3 ------ ENABLE
  D4 ------ DATO 4
  D5 ------ DATO 5
  D6 ------ DATO 6
  D7 ------ DATO 7

  RW lo tengo a tierra


 subo el proyecto completo diagrama y programa

Ahora quisiera QUE ustedes corrienran el programa para confirmar mi problema
 

Desconectado BEXTIXTOX

  • PIC16
  • ***
  • Mensajes: 108
Re: PROBLEMAS PARA INICIALIZAR LCD CON CCS
« Respuesta #3 en: 09 de Junio de 2010, 00:42:31 »
AQUI VAN LAS DOS LIBRERIAS PARA LA LCD

UNA ES LA "LCD_MODIFICADA"  ES LA QUE ALTERE UN POCO

Y LA OTRA PUES ES LA ORIGINAL "LCD"

A TAMBIEN INTENTE PONIENDO A GIE (INTCON) EN CERO
Y LOS CONVERTIDORES COMO DIGITALES

Desconectado BEXTIXTOX

  • PIC16
  • ***
  • Mensajes: 108
Re: PROBLEMAS PARA INICIALIZAR LCD CON CCS
« Respuesta #4 en: 09 de Junio de 2010, 02:12:55 »
LISTO!!!!    ME RESPONDI YO SOLO

ACEPTO QUE ME PASO UN ERROR DE PRIMERO JEJEJEJE...
YA PUDE VISUALIZAR EN LA LCD
DE CUALQUIER FORMA AGRADESCO LA ATENCION PRESTADA A MGLSOFT QUE ME ATENDIO

MI PROBLEMA
QUE ME UBIERA FUNCIONADO CON CUALQUIERA DE MIS LIBRERIAS SI SOLO UBIERA CONECTADO RW AL PIC Y NO MANDANDOLA A TIERRA COMO LA TENIA

MI CONCLUCION
ES QUE ESTO ES VALIDO PARA MIKROC, MICROBASIC Y MPLAB QUE SON LOS QUE HE COMPROBADO ASTA EL MOMENTO

NO DUDO QUE CON CCS SE PUEDA TAMBIEN PERO MI SALIDA RAPIDA FUE CONECTAR "RW" AL PIC
EN RESUMEN CONECTE

  D1 ------ RW       
  D2 ------ RS
  D3 ------ ENABLE
  D4 ------ DATO 4
  D5 ------ DATO 5
  D6 ------ DATO 6
  D7 ------ DATO 7

 USANDO LA LIBRERIA QUE SUBI ANTERIORMENTE LA "LCD_MODIFICADA"

Y

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: PROBLEMAS PARA INICIALIZAR LCD CON CCS
« Respuesta #5 en: 09 de Junio de 2010, 08:46:21 »
Casi todos los compiladores tiene librerias para usar el LCD sin hacer uso de la linea RW.
Usarla es una complicacion adicional, pero es lo indicado para hacer una aplicacion comercial que siempre funcione, sin importar la marca y modelo del display LCD que utilizes y la temperatur del ambiente donde lo hagas.

Esa linea lo que hace es cambiar el modo de uso entre lectura o escritura del LCD.

Aqui hay una explicacion acerca de la importancia de utilizar esa linea:

Citar
Sin embargo, los fabricantes de displays LCD  aconsejan la utilización de la línea R/W conectada al controlador, cada vez que se escribe sobre el display, antes de enviar un nuevo comando, se pasan las líneas de datos a entradas y se lee el estado del BIT 7 del byte entregado por el display, de este modo sabremos cuando el display esta listo para recibir un nuevo comando. Si bien parece una tontería, en aplicaciones complejas, donde los tiempos valen oro, es muy importante no desperdiciarlo, por lo tanto utilizando la línea R/W se puede optimizar mucho el aprovechamiento de los mismos.

Imaginen además la ventaja de adaptarse sin problemas a distintas marcas y modelos de displays, funcionando a distintas condiciones de temperaturas y humedades, sin cambiar una sola línea de código.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything