Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PIC 16F887 > LCD 2 x 16 > 4 datas bits > Can not print on LCD a char or a string

Status
Not open for further replies.

kawauso

New Member
Bonsoir,

Here in the attached file my code. I do not understand why Lcd_Out routine of Mikroe runs only. When I tried to run my own routines (2 versions), lines 161 to 166 ... here after, I can't display the string "Bonjour !". In the code I insert "//" in front of these 6 routines, in order to test each, one after one.

LCD_Write_String("Bonjour !");
LCD_Write_String_v2("Bonjour !");
LCD_String_Position(1, 1, "Bonjour !");
LCD_String_Position_v2(1, 1, "Bonjour !");
LCD_String_Position(1, 1, *pointeur_de_char);
LCD_String_Position_v2(1, 1, *pointeur_de_char);

Do anyone have an idea why they do not run ?

Merci beaucoup !
 

Attachments

  • PIC 16F887 - LCD - MikroC - My own outines failed.txt
    6.7 KB · Views: 291
You're writing to the whole of port B and therefore changing RS whenever you write.

Look at your write data routine,
Code:
void LCD_Write_Data(char mot)                                 // OK.
{
LCD_RS = 1;                                                  // Select Data Register.
Delay_us(5);
PORTB = mot >> 4;                                            // Send upper nibble.
LCD_E_Pulse();
PORTB = mot & 0x0F;                                          // Send lower nibble.
LCD_E_Pulse();
}
You set RS high then clear it when you write the upper nibble.

Mike.
Edit, it would be better to have a write nibble routine which AND/ORs the data bits in.
Edit2, combined with the pulse enable,
Code:
void writeNibble(unsigned char dat){
   PORTB=PORTB&0xf0|(dat&0x0f);
   LCD_EN = 1;
   Delay_us(1);
   LCD_EN = 0;
   Delay_us(1);
}
 
Last edited:
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top