did that, still no symbol on screen...
can anyone confirm that my lcd init is correct?
can anyone confirm that my lcd init is correct?
Code:
#include <xc.h>
#define LCD_RS LATBbits.LATB0
#define LCD_EN LATBbits.LATB2
#define LCD_D4 LATBbits.LATB3
#define LCD_D5 LATBbits.LATB5
#define LCD_D6 LATBbits.LATB6
#define LCD_D7 LATBbits.LATB7
#define LCD_RS_DIR TRISBbits.TRISB0
#define LCD_EN_DIR TRISBbits.TRISB2
#define LCD_D4_DIR TRISBbits.TRISB3
#define LCD_D5_DIR TRISBbits.TRISB5
#define LCD_D6_DIR TRISBbits.TRISB6
#define LCD_D7_DIR TRISBbits.TRISB7
void LCD_Strobe(void);
void main(void) {
__delay_ms(200);
TRISA = 0x00;
LATAbits.LATA5 = 0; // led off
LCD_RS_DIR = 0;
LCD_EN_DIR = 0;
LCD_D4_DIR = 0;
LCD_D5_DIR = 0;
LCD_D6_DIR = 0;
LCD_D7_DIR = 0;
LCD_RS = 0;
LCD_EN = 0;
LCD_D4 = 0;
LCD_D5 = 0;
LCD_D6 = 0;
LCD_D7 = 0;
__delay_ms(30);
// Wake up call 1
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe();
// Wake up call 2
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe();
// Wake up call 3
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe();
// Function set 4 bit
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 1; LCD_D7 = 0; LCD_Strobe();
// Function set 4 bit / 2 line - 5x10 font
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 1; LCD_D7 = 0; LCD_Strobe();
LCD_D4 = 1; LCD_D5 = 1; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
// Display on curson on blink on
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
LCD_D4 = 1; LCD_D5 = 1; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe();
// Clear Display
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 1; LCD_Strobe();
// Entry mode set
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
LCD_D4 = 0; LCD_D5 = 1; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe(); // last 2 ?
// goto line 2
LCD_D4 = 1; LCD_D5 = 1; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
LCD_D4 = 0; LCD_D5 = 0; LCD_D6 = 0; LCD_D7 = 0; LCD_Strobe();
// write "W character"
LCD_RS = 1;
LCD_D4 = 0; LCD_D5 = 1; LCD_D6 = 0; LCD_D7 = 1; LCD_Strobe();
LCD_D4 = 0; LCD_D5 = 1; LCD_D6 = 1; LCD_D7 = 1; LCD_Strobe();
LCD_RS = 0;
// end of lcd test
LATAbits.LATA5 = 1; // led on
while (1) { // loop
}
}
void LCD_Strobe(void) {
LCD_EN = 1;
__delay_ms(100); // __delay_us(120);
LCD_EN = 0;
}