Modificar libreria de lcd para trabajar en dos puertos del PIC ?

Tengo un Hardware con un lcd 16x2 en el cual:
RW--RD7 del PIC 16F917
RS-- RB5
E -- RB4
D4-- RB0
D5-- RB1
D6-- RB2
D7-- RB3
la comunicacion es a 4bits
he visto como se configuran los puerto pin por pin para conectar el lcd de diferente manera,
pero hay otras instrucciones de la libreria que toman a todo el puerto y es por eso que me atore
Alguien me podria ayudar por favor??? ...
 
Última edición:
que compilador es?

la LCD trabaja de 2 modos
a 8 bits mas sus pines de control
y a 4bits mas sus pines de control

la libreria cualquiera que sea en realidad no es magica
la LCD trabaja a una secuencia de comandos que la LCD requiere para funcionar

la libreria marca hay 2 modos enmascarando 1 puerto sea B o D y con un selector sea a trabajar con 4 bits o 8 bits.

lo demas son comandos

¿que podemos hacer?
pues yo escribiria mi propia libreria es larga algo compleja cuando se trabaja a 4 bits pero es facil de entender cuando ya escribiste el primer comando

que se hace

se inicializa , se dan los comandos para trabajar a 8 o 4 bits se hace un retardo y se escriben los comandos para empezar a inicializar el cursor y despues de este ritual se puede escirbir

podemos hacer esto para 2 displays simultaneos es decir inicamos 1 display y seguimos con el otro

claro que cuando escribamos un caracter debemos llamarlo diferente como ejemplo:

put_lcd1('A');
put_lcd2('G');

asi cuando mandemos a llamar la funcion llamara a la del display correspondiente

basicamente es el mismo prosedimiento pero reflejando el puerto a otro lado

hay maneras de no usar un puerto se puede usar un registro de corrimiento como un 74HC595

este prosedimiento es mandar un comando al registro de corrimiento y no al puerto
esto simplifica la conexion y podemos conectar los displays que querramos

pero OJO no no es modificar una libreria ya hecha o la que incluye el compilador

el problema radica en que tenemos muchas directivas del preprocesador y si quitamos o añadimos algo puede que la libreria no funcione y lleva horas depurar y entender el codigo

que no es imposible
 
Eh! Vos no decis con que programas, no somos adivinos. Te aviso que en ccs pic hay una libreria llamada flex_lcd.c te deja configurar los pines del lcd por diversos puertos y pines del pic.

Segun vi fue incorporada en las ultimas versiones....
 
yo hasta donde se el autor es SUKY de todopic.ar

y la verdad es muy simple hacer una libreria para una LCD 16x2 pues solo es inicializar y enviar comandos como bytes si es a 8 bits
y si es a 4 bits enviar nibles usando mas ciclos

el autor dice claramente como remapear los pines en realidad usa mascaras XOR para sacar los pines que desea uno
 
Eh! Vos no decis con que programas, no somos adivinos. Te aviso que en ccs pic hay una libreria llamada flex_lcd.c te deja configurar los pines del lcd por diversos puertos y pines del pic.

Segun vi fue incorporada en las ultimas versiones....

Gracias AleSergi use el MPLAB IDE 8.92 con ccs c compiler, no tenia esa libreria pero ya la decargue lo voy a probar a ver que tal
 
No sé si será muy facil hacer una de esas librerías, pero cuando recién empecé con el CCS (y Yo sabía programar en C), viniendo del ASM, la quise retocar y no daba pie con bola, pero al menos pude hacer que no me afecte el CCP, que estaba en el RB3, porque caba vez que llamaba a imprimir en la LCD me disparaba el CCP y me jorobaba mis cuentas.

En esa última librería, también han incluido el asunto de poder cargar y manejar los caracteres de redefinibles por el usuario, con este asunto pude hacer mis propios números "grandes" que emplean varios caracteres del 16x2.

Eso sí, el empleo en el pobre pic16F819, apenas entra, porque después de compilar empleando la nueva librería ocupa mucho más memoria que la anterior.
 
cuando algo ocupa mas memoria sin razon puede que la libreria este usando bytes reservados
y cuando se inicializa la libreria esta memoria reservada se reserva
sino inicializamos la libreria el compilador no reserva memoria


ejemplo

mi libreria digamos que contiene algo asi

void reserva()
{
char memoria[512]; //reserve 512 bytes
char broche;
char contador;
char etc; //por cada char es 1 byte

int cuenta; //en ccs lo toma como 1 byte pero en otros compiladores como xc8 o c18 consume 4 bytes
}

puerto_init();
{
//hago cosas para iniciar

reserva(); //mando a llamar mis bytes reservados
}


aveces las librerias contienen cosas inutiles para un proyecto que consumen memoria
como es el caso de la libreria FAT16 para leer tarjetas SD
contiene muchas directivas de DEBUG que consumen memoria inutilmente cuando lo que vamos hacer es solo escribir un byte

hay que tener en cuenta esto

aveces las librerias producen bugs pues el CCS no es perfecto , CCS descubri que es suseptible a los bugs por usar muchos if y sin hacer enfasis del signed y el unsigned
al pasar varias lineas empiezan los problemas de desborde de memoria en mi caso un pic16f886

bueno eso es todo
 
Atrás
Arriba