Autor Tema: ayuda con LCD  (Leído 3289 veces)

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

Desconectado Edwin_pe

  • PIC12
  • **
  • Mensajes: 82
ayuda con LCD
« en: 02 de Febrero de 2010, 00:33:15 »
Amigos necesito su ayuda parece sencillo pero no doy con el problema, estoy haciendo este programita uso la libreria "flex_lcd.c" y la version 4.057 del ccs este programita es para algo mayor pero debo solucionarlo primero soy nuevo en CCS ahi lo dejo:

=============================================

#include <16f876.h>
#fuses   HS,NOWDT,NOPUT
#use     delay(clock=20000000) //defino el crystal a utilizar
#use     fast_io(A)           //optimizo el uso del puerto
#use     fast_io(B)           //optimizo el uso del puerto

#define  LCD_RS    PIN_B1
#define  LCD_RW    PIN_B2
#define  LCD_E     PIN_B3
#define  LCD_DB4   PIN_B4
#define  LCD_DB5   PIN_B5
#define  LCD_DB6   PIN_B6
#define  LCD_DB7   PIN_B7
#include "flex_lcd.c"

 void main()
 {
   set_tris_a(0);
   output_a(0);

   lcd_init();                        /* inicializa el LCD */
   lcd_gotoxy(1,1);                   /* inicia en la primera linea del LCD */
   printf(lcd_putc,"Hola Peru");         

   while(1){
      output_high(pin_a2);    // RB0=1
      delay_ms(50);
      output_low(pin_a2);     // RB0=0
      delay_ms(50);
   }
 }

=============================================

Eso es todo amigos ya deberia mostrar algo en el LCD pero en la simulacion no hay nada , lo quiero aplicar a mi entrenador de pic que me hice , pero recien estoy montando los componentes, gracias y saludos.

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: ayuda con LCD
« Respuesta #1 en: 02 de Febrero de 2010, 00:38:44 »
En esta libreria#include "flex_lcd.c"  tambien se defines los pines de transmision y control . corrobora si coinciden. empecemos por ahí.
 
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Edwin_pe

  • PIC12
  • **
  • Mensajes: 82
Re: ayuda con LCD
« Respuesta #2 en: 02 de Febrero de 2010, 00:58:44 »
Hola amigo Kidpic,

Gracia spor tu respuesta si k fue rapido, hice este pequeño cambio recien he configurado el portb como salida y ya me esta mostrando algo en el lcd todo esta igual excepto esta instruccion que dejo ahi, pero hay un problemita te adjunto el diagrama mira como me sale en el lcd.

Otor detalle que acaso con la instruccion #use     fast_io(B) no  optimizaba el uso del puerto pense que me genaraba codigo para ya no estar configurando las entradas y salidas a cada rato , derrepente estoy equivocado, garcias .

==========================================
void main()
 {
   set_tris_a(0);
   set_tris_b(0);                // ---- solo le puse esto  -----
   output_a(0);

   lcd_init();                        /* inicinializo en LCD */
   lcd_gotoxy(1,1);                   /* inicia en la primera linea del LCD */
   printf(lcd_putc,"Hola Peru");      /* muestra en el LCD */   

Desconectado Edwin_pe

  • PIC12
  • **
  • Mensajes: 82
Re: ayuda con LCD
« Respuesta #3 en: 02 de Febrero de 2010, 01:50:32 »
Hola kidpic,

Puse como comentario a esta directivas #use     fast_io(A) y se me arreglo el problema ya puedo ver en el LCd el texto  completo la pregunta es porque, aun tengo esa duda.

#include <16f876.h>
#fuses   HS,NOWDT,NOPUT
#use     delay(clock=20000000) //defino el crystal a utilizar
//#use     fast_io(A)           //optimizo el uso del puerto
//#use     fast_io(B)           //optimizo el uso del puerto

#define  LCD_RS    PIN_B1
#define  LCD_RW    PIN_B2
#define  LCD_E     PIN_B3
#define  LCD_DB4   PIN_B4
#define  LCD_DB5   PIN_B5
#define  LCD_DB6   PIN_B6
#define  LCD_DB7   PIN_B7
#include "flex_lcd.c"

void main()
 {
    el programa es el mismo
 }

======================================
Le agrege esto al programa , una entrada analoga que leo la quiero enviar a la segunda linea del lcd y me esta votando un error:

  >>> Warning 203 "LCD_EDwin.c" Line 32(1,1): Condition always TRUE
*** Error 116 "LCD_EDwin.c" Line 36(33,38): Printf variable count (%) does not match actual count  ::
      1 Errors,  1 Warnings.


Existe alguna diferencia entre :
  printf(lcd_putc,"valor = ",valor); y esta otra forma de poner: lcd_putc("valor = ",valor);

Te dejo el codigo con entrada analoga aver si me echas una mano gracias y saludos.


#include <16f876.h>
#fuses   HS,NOWDT,NOPUT
#use     delay(clock=20000000) //defino el crystal a utiliza
#define  LCD_RS    PIN_B1
#define  LCD_RW    PIN_B2
#define  LCD_E     PIN_B3
#define  LCD_DB4   PIN_B4
#define  LCD_DB5   PIN_B5
#define  LCD_DB6   PIN_B6
#define  LCD_DB7   PIN_B7
#include "flex_lcd.c"

 unsigned long int valor;

 void main()
 {
   set_tris_a(0);
   set_tris_b(0);
   output_a(0);
   lcd_init();                        /* inicinializo en LCD */
   
   SETUP_ADC(ADC_CLOCK_INTERNAL);   // configuras para que el a/d funcione con reloj interno del uC
   SETUP_ADC_PORTS(AN0);            // RA0 será analógico
   SET_ADC_CHANNEL(0);                // vamos a usar el canal RA0

   lcd_gotoxy(1,1);                   /* inicia en la primera linea del LCD */
   printf(lcd_putc,"Lectura");      /* muestra en el LCD */
   
   while(1){
      valor=READ_ADC();
      delay_ms(10);
      lcd_gotoxy(1,2);     
      printf(lcd_putc,"valor = ",valor);
   }
 }

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayuda con LCD
« Respuesta #4 en: 02 de Febrero de 2010, 11:22:54 »
No configures el puerto B (El que utiliza el LCD) como fast, porque la librería no contempla el cambio de tris de los pines, sino está pensada para trabajar en el modo estándar.

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

Desconectado Edwin_pe

  • PIC12
  • **
  • Mensajes: 82
Re: ayuda con LCD
« Respuesta #5 en: 03 de Febrero de 2010, 01:36:27 »
Gracias por tu respuesta suky y tienes razon por eso retire esa instruccion.
El programita que dejo a continuacion no me esta mostrando nada en el portc que es donde envio los datos que recibo por la antrada analoga RA0, el lcd es solo de muestra y si esta trabajando.

Por ahi me dijeron que use esta instruccion pero tengo mis dudas nose para que sirve a ver si me ayudas gracias y saludos.

#byte port_a= 0x05
#byte port_c= 0x08

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

#include <16f876.h>
#fuses   HS,NOWDT,NOPUT
#use     delay(clock=20000000)  // defino el crystal a utilizar
#use     fast_io(C)
#define  LCD_RS    PIN_B1
#define  LCD_RW    PIN_B2
#define  LCD_E     PIN_B3
#define  LCD_DB4   PIN_B4
#define  LCD_DB5   PIN_B5
#define  LCD_DB6   PIN_B6
#define  LCD_DB7   PIN_B7
#include "flex_lcd.c"

#byte port_a= 0x05
#byte port_c= 0x08

 int  valor;

 void main(){

   set_tris_a(0x01);     /* el pin RA0 como entrada */
   set_tris_b(0);       /* el portb como salida */
   set_tris_c(0);       /* el portc como salida */

   lcd_init();                        /* inicializo en LCD */
   lcd_gotoxy(1,1);                   /* inicia en la primera linea del LCD */
   printf(lcd_putc,"Parametro");      /* muestra en el LCD */

   SETUP_ADC(ADC_CLOCK_INTERNAL);   // configuras para que el a/d funcione con reloj interno del uC
   SETUP_ADC_PORTS(AN0);            // RA0 será analógico
   SET_ADC_CHANNEL(0);              // vamos a usar el canal RA0
   delay_us(20);
   
   while(1){
      valor=read_adc();     //la lectura se guarda en valor
      port_c=valor;         //envio al portc
   }
}
     

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: ayuda con LCD
« Respuesta #6 en: 03 de Febrero de 2010, 05:41:47 »
Hola Edwin_pe veo que en los defines del lcd tienes puesto los pines del puerto b, cuando tu tienes el lcd en el puerto c y esto no es correcto deberia ser:

#define  LCD_RS    PIN_C1
#define  LCD_RW    PIN_C2
#define  LCD_E     PIN_C3
#define  LCD_DB4   PIN_C4
#define  LCD_DB5   PIN_C5
#define  LCD_DB6   PIN_C6
#define  LCD_DB7   PIN_C7

 Saludos de nuevo

 Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayuda con LCD
« Respuesta #7 en: 03 de Febrero de 2010, 09:09:54 »
El único problema que veo es que no te aseguras que se trabaje a 8 bits, para eso agrega la linea #adc=8.

En CCS para sacar un valor por el puerto tienes la instrucción output_x(...);



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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: ayuda con LCD
« Respuesta #8 en: 03 de Febrero de 2010, 17:36:47 »
Una pregunta para el maestro :mrgreen: Hola Suky con tu respuesta ¿estas diciendo que no influye para nada la configuracion de los defines de la libreria del lcd?
PD:No estoy llevandote la contraria, solo lo pregunto para aprender :oops:

Gracias
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayuda con LCD
« Respuesta #9 en: 03 de Febrero de 2010, 18:25:48 »
Una pregunta para el maestro :mrgreen: Hola Suky con tu respuesta ¿estas diciendo que no influye para nada la configuracion de los defines de la libreria del lcd?
PD:No estoy llevandote la contraria, solo lo pregunto para aprender :oops:

Cita de: Edwin_pe
El programita que dejo a continuacion no me esta mostrando nada en el portc que es donde envio los datos que recibo por la antrada analoga RA0, el lcd es solo de muestra y si esta trabajando.

El problema no es el LCD, que solo lo usa para mostrar, ahora el problema es que quiere ver los datos en el puerto C y no funciona correctamente (No quiere cambiar de puerto al LCD)  ;-)


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

Desconectado Edwin_pe

  • PIC12
  • **
  • Mensajes: 82
Re: ayuda con LCD
« Respuesta #10 en: 04 de Febrero de 2010, 00:39:38 »
Gracias por sus respuestas a ambos.

El lcd esta bien por el puerto b solo lo uso para mostrar ese mensaje mas adelante lo quiero para otra aplicacion k mostrare, pero queria enviar los datos analogos leidos por el puerto c ya lo consegui la unica correccion era usar la instruccion: output_c(READ_ADC()) , gracias suky, ahi si me esta mostrando los datos.

Haber si me echan una mano con esto para que se usa, gracias y saludos.

#byte port_a= 0x05
#byte port_c= 0x08


Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: ayuda con LCD
« Respuesta #11 en: 04 de Febrero de 2010, 05:18:46 »
Perdona Suky, no habia entendido el problema crei que queria mostrar los datos a traves del lcd pero por el PORTC, todavia me queda mucho por aprender :shock:

Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: ayuda con LCD
« Respuesta #12 en: 04 de Febrero de 2010, 12:09:40 »
#byte port_a= 0x05
#byte port_c= 0x08

Edwin yo no es que sepa mucho de C, pero si miras la hoja de características del pic que estas utilizando verás que el registro PORTA y el registro PORTB  corresponden a los registros 05H i 08H respectivamente.




Para que aprendas un poquito más te digo que hagas lo siguiente: Fijate en el código que hay dentro del archivo <16f876.h> y verás que está lleno de defines y directivas como #byte que indican donde estan situados los registros.

Saludos.
Share the world !

Blog's

http://www.area0x33.com


 

anything