Hola ahora he olvidado la rutina anterior para hacer funcionar primero el direccionamiento por bytes en lugar de por bits para luego aplicarlo en la rutina que funciona "en paralelo" y no funciona, podeis ayudarme ? Grácias.
Es te es el Ini y intento imprimir solo un caracter con el LCDPrintChar y no va (una vez funcione seguiré por el otro lado) creo que puede estar en los tiempos de los pulsos del enable pero no se....
void LCDInit(void) {
// Configuramos los puertos.
TRIS_DATA_PIN_7 = 0; // Es D7
TRIS_DATA_PIN_6 = 0; // Es D6
TRIS_DATA_PIN_5 = 0; // Es D5
TRIS_DATA_PIN_4 = 0; // Es D4
TRIS_EN = 0; // Es Enable
TRIS_RS = 0; // Es RS
TRIS_RW = 0; // Es RW
// Doy alimentación desde la pata del micro al LCD.
TRIS_POWER_LCD = 0;
POWER_LCD = 0;
waitMilis(100);
POWER_LCD = 1;
// Activo el backligth. ( Esto es ahora luego solo lo activare yo cuando quiera)
TRIS_BACK_LCD = 0;
waitMilis(100); // Importante con 15 el pequeño funciona y el grande no//antes 40
LCDSendCommand(0b00000011); // Funcion set (Interface aun a 8 bits)
waitMilis(5); // Espero 4,1 ms
LCDSendCommand(0b00000011); // Funcion set (Interface aun a 8 bits)
wait5Micro(20); // Espero 100 micros
LCDSendCommand(0b00000011); // Funcion set (Interface aun a 8 bits)
LCDSendCommand(0b00000010);
LCDSendCommand(0b00101000); // Ya a 4 bits
LCDSendCommand(0b00001000);
LCDSendCommand(0b00000001);
LCDSendCommand(0b00000111);
}
void LCDPrintChar(char aChar) {
if ((aChar != 'Ñ') && (aChar != 'ñ')) {
LCDSendData(aChar); // Imprime cada caracter del string.
}
else {
LCDSendData(0b01010101); // Arregla el "problema" de la ñ
}
wait5Micro(20);
}
void LCDSendCommand(char cmd){
TRIS_DATA_LCD = TRIS_DATA_LCD & 0x80FF; // TRISES 8 A 14 = 0
LAT_DATA_LCD = (LAT_DATA_LCD & 0x9FFF) | ((cmd & 0xF0)<<4); // RS Y RW = 0, DATA = CMD
EN_LCD = 1;
wait5Micro(10);
EN_LCD = 0;
TRIS_DATA_LCD = TRIS_DATA_LCD & 0x80FF; // TRISES 8 A 14 = 0
LAT_DATA_LCD = (LAT_DATA_LCD & 0x9FFF) | ((cmd & 0x0F)<<

; // RS Y RW = 0, DATA = CMD
EN_LCD = 1;
wait5Micro(10);
EN_LCD = 0;
}
void LCDSendData(char cmd){
TRIS_DATA_LCD = TRIS_DATA_LCD & 0x80FF; // TRISES 8 A 14 = 0
LAT_DATA_LCD = (LAT_DATA_LCD & 0xBFFF) | ((cmd & 0xF0)<<4); // RS = 1 Y RW = 0, DATA = CMD
EN_LCD = 1;
wait5Micro(10);
EN_LCD = 0;
TRIS_DATA_LCD = TRIS_DATA_LCD & 0x80FF; // TRISES 8 A 14 = 0
LAT_DATA_LCD = (LAT_DATA_LCD & 0xBFFF) | ((cmd & 0x0F)<<

; // RS = 1 Y RW = 0, DATA = CMD
EN_LCD = 1;
wait5Micro(10);
EN_LCD = 0;
}