Ett bra tips är att jämföra koderna.
Har själv haft en hel del liknande problem så jag vet hur det kan vara..

edit: Var det hela koden du visade i första inlägget?
Kod: Markera allt
#include <avr/io.h>
EDIT: Hade vänt som här fel!
// Pinnarna är kopplade så här:
//
// P0 -> D4
// P1 -> D5
// P2 -> D6
// P3 -> D7
// P4 -> E
// P5 -> RS
//
//
#define LCD_DDRX DDRB
#define LCD PORTB // Port som LCDn sitter på
// Sätter igång timer2 i asynkront läge
void init_clock(void) {
ASSR|=0x08; //async mode
TCCR2|=0x01; //clear timer no prescaler
TIFR=0x40; //start timer
}
void delay(unsigned long int del) {
unsigned long int i=0;
unsigned char wait=0;
for(i=0;i<del;i++) {
wait=TCNT2+31;
while(wait!=TCNT2) {} //Vänta på klockan
}
}
//Skriver ut en byte till LCDn
void write_char(unsigned char byte) {
write_lcd(byte>>4); // Lägg ut översta 4 bitarna
delay(1);
write_lcd(byte); // Lägg ut nedersta 4 bitarna
}
//Skriver ut en halv byte till LCDn
void write_lcd(unsigned char byte) {
LCD&=0xF0; // Nollställ D7-D4
LCD|=byte&0x0F; // Lägg ut nedersta 4 bitarna
toggle_enable();
}
void toggle_enable(void) {
delay(1); // Fördröj x tusendelar
LCD|=0x10; // Sätt E till 1
delay(1); // Fördröj x tusendelar
LCD&=~0x10; // Sätt E till 0
delay(1); // Fördröj x tusendelar
}
void init_lcd(void) {
LCD_DDRX=0xFF; // LCD-porten som utgång
LCD=0x00; //Allt till 0
delay(100); // Vänta lite med initieringen
// initiera skiten
write_lcd(0x03);
delay(6);
write_lcd(0x03);
delay(2);
write_lcd(0x03);
delay(1);
write_lcd(0x02);
delay(1);
write_lcd(0x02);
delay(1);
write_lcd(0x08);
delay(1);
write_lcd(0x00);
delay(1);
write_lcd(0x08);
delay(1);
write_lcd(0x00);
delay(1);
write_lcd(0x01);
delay(1);
write_lcd(0x00);
delay(1);
write_lcd(0x06);
delay(1);
}
int main(void) // main program starts
{
init_clock();
init_lcd();
LCD|=0x20; // RS =1;
write_char(0x03); // Skriv en nolla
while(1) {}
}
Kod: Markera allt
// initiera skiten
write_lcd(0x03); // 8-bit...
delay(6);
write_lcd(0x03); // 8-bit...
delay(2);
write_lcd(0x03); // 8-bit...
delay(1);
write_lcd(0x02); // 4-bit !
delay(1);
write_lcd(0x02); // 2-line...
delay(1);
write_lcd(0x08);
delay(1);
write_lcd(0x00); // All off...
delay(1);
write_lcd(0x08);
delay(1);
write_lcd(0x00); // Clear display...
delay(1);
write_lcd(0x01);
delay(1);
write_lcd(0x00); // Display on, curs underline...
delay(1);
write_lcd(0x06);
delay(1);