PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD-Display: Cursor springt an falsche Stelle



BurningWave
14.08.2008, 16:42
Hallo,

ich habe ein Problem:
Ich hatte bisher nie Schwierichkeiten beim ansteuern eines normalen LCD-Display im 4-Bit Modus. Jetzt funktioniert aber das Versetzen des Cursors nicht mehr richtig. Wenn ich ihn (mit der Funktion "lcd_goto()") an eine Stelle in der ersten Zeile des Displays setzen will, klappt das auch, aber wenn ich ihn an eine Stelle in der zweiten Zeile setze erscheint er immer an der ersten Position der zweiten Zeile.
Hier ist mal mein Code:


void lcd_send(char data)
{
char rs = LCD_PORT;
rs &= 4;
char tmp = data;
tmp &= 0xf0;
tmp |= rs;
LCD_PORT = tmp;
sbi(LCD_PORT, 3);
cbi(LCD_PORT, 3);
tmp = data;
tmp &= 0x0f;
tmp *= 16;
tmp |= rs;
LCD_PORT = tmp;
sbi(LCD_PORT, 3);
cbi(LCD_PORT, 3);
_delay_ms(5);
}

void lcd_cmd(char cmd)
{
cbi(LCD_PORT, 2);
lcd_send(cmd);
}

void lcd_goto(int row, int col)
{
row--;
row &= 0x01;
row *= 40;
col--;
col &= 0x0f;
char tmp = row | col;
tmp |= 0x80;
lcd_cmd(tmp);
}


Dieser Code hat eigentlich immer funktioniert. Ich habe nichts daran geändert, aber jetzt funktioniert er nicht mehr (an dem LCD-Display und der Hardware kann es nicht liegen, da ich ihn mit zwei verschiedenen Displays mit zwei verschiedenen Schaltungen getestet habe). ](*,)

Hat jemand vielleicht eine Idee, woran es liegen könnte?

Wäre für schnelle Hilfe sehr dankbar,
mfg
_R2D2

BurningWave
14.08.2008, 19:36
Der Fehler muss in der Funktion lcd_goto() sein, da es zb. mit lcd_cmd(43) um zu dem 4. Zeichen in der 2. Zeile zu gelangen funktioniert.