TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: raquena en 01 de Septiembre de 2013, 11:52:54
-
Hola a todos!
He creado un post nuevo porque no sé muy bien donde meter esto, así que si este no es el sitio que le corresponde hacedmelo saber.
Hace algún tiempo me dejé escrita una librería para poder operar el típico lcd 2x16 (en realidad cualquiera que venga controlado con un HD44780) a través del bus I2C, utilizando los módulos de ampliación de puertos mediante I2C que puedes comprar de ebay, de tal forma que cualquiera que necesite manejar un LCD por I2C, sólo tenga que comprar el módulo(que además es el más barato que hay en ebay) y a funcionar!
Aquí os dejo el link de mi aporte:
LIBRERÍA I2C XLCD (http://www.raquena.com/files/I2CXLCD.rar)
Por cierto, tengo alguna otra librería más de periféricos I2C, las iré colgando conforme las deje un poco más arregladas, que funcionan, pero están a medias.
Además querría decir que busco colaboradores para acabar las librerías que tengo a medias, cualquera que quera ayudar que lo comente !
-
Cuenta conmigo,dime que librerias te falta terminar y si es posible pasamelo a mi correo:
keydarkman@hotmail.com.
-
Cuenta conmigo,dime que librerias te falta terminar y si es posible pasamelo a mi correo:
keydarkman@hotmail.com.
Si puedes échale un vistazo dentro de la librería I2CXLCD al archivo delayI2CXLCD, que no está tan bien como podría.
Mientras prepararé el resto de las librerías que tengo para que sean un poco más manejables ok?
-
Cuenta conmigo,dime que librerias te falta terminar y si es posible pasamelo a mi correo:
keydarkman@hotmail.com.
Si puedes échale un vistazo dentro de la librería I2CXLCD al archivo delayI2CXLCD, que no está tan bien como podría.
Mientras prepararé el resto de las librerías que tengo para que sean un poco más manejables ok?
No hay dentro de la CARPETA I2CXLCD ningun ARCHIVO llamado delayI2CXLCD verifica tu libreria.
Si tienes alguna simulacion en proteus de como funciona el PC8574, pasamelo para hacer un debugger de todos los archivos .c, saludos.
-
Hola!
Respecto al PCF8574, al menos en la versión de PROTEUS que tengo yo está el modelo completo funcionando perfectamente.
Y sobre el archivo que no está bien del todo me confundí, no lo tenía delante y me equivoqué de nombre, me refería a BusyI2cXLCD.c
-
Hola!
Respecto al PCF8574, al menos en la versión de PROTEUS que tengo yo está el modelo completo funcionando perfectamente.
Y sobre el archivo que no está bien del todo me confundí, no lo tenía delante y me equivoqué de nombre, me refería a BusyI2cXLCD.c
Por lo que he visto si flag es 1 o 0 siempre va hacer lo mismo entonces mejor seria ponerlo dentro de una funcion, y al retornar que retorne el mismo flag, haber que te parece esta modificacion:
// Written by Raúl Quesada Navarro on 13/07/2013
// Visit: www.Raquena.com
# include<p18cxxx.h>
# include<i2c.h>
# include<delays.h>
# include"I2CXLCD.h"
// La función BusyI2cXLCD se encarga de averiguar si el LCD se encuentra
// ocupado realizando operaciones internas, para evitar interrumpirlo.
void Proceso(void);//Prototipo.
unsigned char BusyI2cXLCD()
{
char flag = 0;
char i2cData = 0;
// Creamos una variable donde irá el flag de ocupado del XLCD
i2cData = i2cData | 0b00100000; // activamos el pin R/W
i2cData = i2cData & 0b10111111; // desactivamos el bit de RS
WritePCF8574(i2cData);
DelayFor18TCY();
i2cData = i2cData | 0b00010000; // activamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY();
flag = ReadPCF8574();
flag = flag & 0x08; // Nos quedamos sólo con el valor del busy flag.
// ESTO SE PUEDE ARREGLAR !!!
// PARA QUE OCUPE MENOS !!!
// LA ÚNICA PARTE DIFERENTE ES EL RETURN, SE DEBERÍA UNIFICAR.
Proceso();
Delay100TCYx(2);
return flag;
}
void Proceso(void)
{
i2cData = i2cData & 0b11101111; // Desactivamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY(); // Esperamos
i2cData = i2cData | 0b00010000; // Activamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY(); // Esperamos
i2cData = i2cData & 0b11101111; // Desactivamos el pin E
WritePCF8574(i2cData);
i2cData = i2cData & 0b11011111; // Desactivamos el pin R/W
WritePCF8574(i2cData);
}
-
Hola!
Respecto al PCF8574, al menos en la versión de PROTEUS que tengo yo está el modelo completo funcionando perfectamente.
Y sobre el archivo que no está bien del todo me confundí, no lo tenía delante y me equivoqué de nombre, me refería a BusyI2cXLCD.c
Por lo que he visto si flag es 1 o 0 siempre va hacer lo mismo entonces mejor seria ponerlo dentro de una funcion, y al retornar que retorne el mismo flag, haber que te parece esta modificacion:
// Written by Raúl Quesada Navarro on 13/07/2013
// Visit: www.Raquena.com
# include<p18cxxx.h>
# include<i2c.h>
# include<delays.h>
# include"I2CXLCD.h"
// La función BusyI2cXLCD se encarga de averiguar si el LCD se encuentra
// ocupado realizando operaciones internas, para evitar interrumpirlo.
void Proceso(void);//Prototipo.
unsigned char BusyI2cXLCD()
{
char flag = 0;
char i2cData = 0;
// Creamos una variable donde irá el flag de ocupado del XLCD
i2cData = i2cData | 0b00100000; // activamos el pin R/W
i2cData = i2cData & 0b10111111; // desactivamos el bit de RS
WritePCF8574(i2cData);
DelayFor18TCY();
i2cData = i2cData | 0b00010000; // activamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY();
flag = ReadPCF8574();
flag = flag & 0x08; // Nos quedamos sólo con el valor del busy flag.
// ESTO SE PUEDE ARREGLAR !!!
// PARA QUE OCUPE MENOS !!!
// LA ÚNICA PARTE DIFERENTE ES EL RETURN, SE DEBERÍA UNIFICAR.
Proceso();
Delay100TCYx(2);
return flag;
}
void Proceso(void)
{
i2cData = i2cData & 0b11101111; // Desactivamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY(); // Esperamos
i2cData = i2cData | 0b00010000; // Activamos el pin E
WritePCF8574(i2cData);
DelayFor18TCY(); // Esperamos
i2cData = i2cData & 0b11101111; // Desactivamos el pin E
WritePCF8574(i2cData);
i2cData = i2cData & 0b11011111; // Desactivamos el pin R/W
WritePCF8574(i2cData);
}
Cierto! De hecho ya ni me acordaba, pero el comentario que hay escrito en mayúsculas es justo eso lo que significa.
Pero el problema en este caso no es de optimización, la cosa está en que no funciona correctamente, y por eso lo comenté todo y lo sustituí por un Delay.
P.D. Habría que buscar un nombre un poco menos genérico que proceso()...