TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: MGLSOFT en 28 de Febrero de 2004, 08:27:00

Título: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 28 de Febrero de 2004, 08:27:00
Necesito saber la forma de reformar la libreria de CCS para poder conectar mi LCD al portC del 16F876.

La configuracion es la siguiente:

RC4 -------> Enable -------> pin 6 del LCd
RC5 -------> RS ------------> pin 4 del LCd
RC0 -------> DB4 ----------> pin 11 del LCd
RC1 -------> DB5 ----------> pin 12 del LCd
RC2 -------> DB6 ----------> pin 13 del LCd
RC3 -------> DB7 ----------> pin 14 del LCd

Como veran la interfase es a 4 bits.

Alguien puede ayudarme ??
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 28 de Febrero de 2004, 09:22:00
Cuando tenga un rato te lo miro más detenidamente.
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 28 de Febrero de 2004, 13:45:00
Lo prometido es deuda. Aquí la tienes: http://miarroba.com/foros/ver.php?foroid=85505&temaid=1599315

He cambiado la asignación de pines al PORTC, por comparación con la original de CCS.

Un saludo
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 01 de Marzo de 2004, 06:02:00
Gracias Pocher !!

Voy a probarlo..

Una duda.

de donde saco los valores hexa de los puertos ?, no lo encontre en la documentacion que tengo..
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 01 de Marzo de 2004, 06:26:00
No te entendí, podrías ser más explícito?
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 01 de Marzo de 2004, 06:54:00
Me referia a lo siguiente:


struct lcd_pin_map { // This structure is overlayed
boolean rs; //enable en CCS // on to an I/O port to gain
boolean rw; //rs en CCS // access to the LCD pins.
boolean enable; //rw en CCS // The bits are allocated from
boolean unused; // low order up. ENABLE will
int data : 4; // be pin B0.
} lcd;


#ifdef(__PCH__)
#ifdef use_portc_lcd
#byte lcd = 0xF82  <---
#else
#byte lcd = 0xF83 <--- // This puts the entire structure
#endif
#else
#ifdef use_portc_lcd
#byte lcd = 7
#else
#byte lcd = 8 // on to port D (at address 8)
#endif
#endif



De donde saco esos valores para todos los puertos??
Ademas:


struct lcd_pin_map {
int data : 4;
boolean enable;
boolean rs;
boolean rw;//no lo uso en realidad
boolean unused;  
} lcd;



Si lo escribo asi, estara bien para mis propositos??
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 01 de Marzo de 2004, 07:07:00
Las direcciones 0xF84 (PORTE), 0xF83 (PORTD), 0xF82 (PORTC), 0xF81 (PORTB) y 0xF80 (PORTA) son las direcciones de los registros pero solo si vas a usar un PIC de la serie 18, no es tu caso.

Respecto al cambio de orden en la estructura déjame que lo piense ahora me llaman a comer.

Un saludo
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 01 de Marzo de 2004, 07:11:00
Buen provecho !!
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 01 de Marzo de 2004, 11:46:00
Con solo ese cambio no te funcionarIa.

Hace falta también cambiar:

STRUCT lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in

por:

STRUCT lcd_pin_map const LCD_READ = {15,0,0,0,0}; // For read mode data pins are in

Obligatorio tener el pin RW conectado, si no, no va. Para eliminarlo habría que pensar un poco más ...

Un saludo
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 01 de Marzo de 2004, 12:16:00
Lo hice asi y anduvo bien en el PortD y el PortB, pero no podia hacerlo funcionar en el PortC (simulado en Proteus, se entiende).

Para que funcionara tuve que deshabilitar los modulos PSP y CCP1 y CCP2.

Recien alli anduvo!!

Ahora bien, estuve leyendo mas acerca del uso de la estructura del LCD y creo que si dejo de lado la funcion de leer del LCD puedo prescindir del uso del pin RW, dejandolo siempre a VDD, como siempre lo hago.

Que opinas??
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 01 de Marzo de 2004, 12:51:00
He estado haciendo algunos cambios y no hay manera, si te sale avisa.
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 01 de Marzo de 2004, 14:01:00
OK, si consigo que ande te digo como, sino snif, snif
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 02 de Marzo de 2004, 05:27:00
Oye, instale el QuickBuilder DEMO en mi maquina, este me permite tomar todos los bits del port al LCD sueltos (fuera de una estructura).
Lo probare y si me anda OK pongo aqui el codigo de la libreria LCD y traducida.
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pikman en 06 de Marzo de 2004, 16:48:00
Hola MARCOS y Pocher, pues me di el gusto de no usar el RW, con los contratiempos que trae, para esto hay que agragar retardos en lugar del chequear el BUsy Flag que varian segun la pantalla LCD y ademas cuando cambia la temperatura de esta, por lo tanto siempre se hace mas lerda la aplicacion, esto lo hice con el fin de usar un registro  de despalzamiento para controlar el LCD y ahorrar mas pines aun, cansado de ver que a veces falle el inicio del LCD o se cuelgue, decidi usar directamente un 16C54, que actua como bakpak, con un pequeño programa en asm y listo, asi con 1 pin controlo el lcd, hace un tiempo me habia propuesto hacer un soft para que este micro sea esclavo I2C y en aplicaciones donde hay este bus ahorar 1 pin mas, pero no lo termine, bueno
voy a buscar la libreria y la cuelgo para que experimenten.

saludos

Ariel

 
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: adolfoadc en 06 de Marzo de 2004, 18:20:00
Tengo claro como definir el puerto que voy a utilizar mediante set_tris_lcd(x), pero no entiendo donde defino los pins a utilizar, a caso es en la struct lcd_pin_map, como se hace para decir cuales son los pines que eligo, no lo termino de entender. La unica variacion entonces siempre que se utilizen el mismo orden en el puerto c que en el d es la definicion de set_tris_lcd(x), pero si deseo cambiar el orden de los pines de control como lo haría, haciendome una libreria nueva o hay alguna modificacion posible en este codigo?
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 07 de Marzo de 2004, 04:32:00
Hola adolfoadc.

Con un ejemplo lo entenderás.

CCS define la estructura:

struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;

para el siguiente orden:

E=B0 (D0)
RS=B1 (D1)
RW=B2 (D2)

D0=B4 (D4)
D1=B5 (D5)
D2=B6 (D6)
D3=B7 (D7)

Si quieres este orden:

D0=B0 (D0)
D1=B1 (D1)
D2=B2 (D2)
D3=B3 (D3)

E=B4 (D4)
RS=B5 (D5)
RW=B6 (D6)

Tendrías que definir la estructura así:

struct lcd_pin_map {
int data : 4;
boolean enable;
boolean rs;
boolean rw;
} lcd;

Además lo que escribí unos mensajes más arriba:

Con solo ese cambio no te funcionarIa.

Hace falta también cambiar:

STRUCT lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in

por:

STRUCT lcd_pin_map const LCD_READ = {15,0,0,0,0}; // For read mode data pins are in

Obligatorio tener el pin RW conectado, si no, no va. Para eliminarlo habría que pensar un poco más ...


Lo pillas?
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: adolfoadc en 07 de Marzo de 2004, 05:06:00
Si esa parte la entiendo, ya que la asignacion de los pins se hace de forma secuencial 1º,2º,3º y 4º, pero en el caso de querer utilizar los pins por ejemplo rs RE0, enable RE2 y rw RA1, tendria que hacerme una libreria nueva para poder asignar esos pin al LCD, ya que no estan en orden como ocurre con el lcd.c y ademas en puertos distintos. Es esto asi?
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: pocher en 07 de Marzo de 2004, 13:10:00
joer, joer adolfo, que rebuscaillo.

Pués sí habría que hacerlo de otra manera.

Título: RE: Como conectar LCD a otro puerto ??
Publicado por: adolfoadc en 07 de Marzo de 2004, 13:47:00
Si que es rebuscaillo pero muchas veces por cuestiones de diseño no puedes hacer la distribucion de pines como esta en la libreria, por eso queria saber si se podia modificar o si era mejor crearte tu propia libreria.
Siempre que pueda utilizare la distribucion que viene en la libreria, pero..... nunca se sabe
Título: RE: Como conectar LCD a otro puerto ??
Publicado por: MGLSOFT en 08 de Marzo de 2004, 05:50:00
Les comento que intente con la libreria hecha por QuickBuilder (me quedan unos dias de la version de prueba ), pero este tambien chequea la linea de Busy Flag, por lo tanto tambien usa la opcion de leer el Display, asi que no me sirve.

Pikman:
Por favor pasame tu libreria donde no utilizas la linea de RW, please!!