LCD Ansteuerung

OP #1503387
Lesenswert?

Hallo,

jetzt bin ich endlich soweit das ich mich an die Ansteuerung eines LCD 
Displays heran traue.
Ich arbeite mit einem STK 600 und einem ATMEGA 2560.

Zum erlernen habe ich mir als Hilfe das Tutorial/LCD Ansteuerung zur 
Hilfe genommen.

LCD besorgt,angeschlossen, Bsp. Code geladen. Alles läuft, alles Prima, 
Text wird auf dem Display ausgegeben.

Nun wollte ich hergehen und mir den Code mal etwas genauer ansehen, um 
die ansteuerung besser zu verstehen.

Da bin ich gleich bei der initialisierung über etwas gestolpert und ich 
hoffe Ihr könnt mir dazu ein paar Tips geben.

Der Code (Auszug):

void lcd_init(void)
{
   LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf 
Ausgang schalten

   // muss 3mal hintereinander gesendet werden zur Initialisierung

   _delay_ms(15);
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x03;
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();

Frage,
LCD_PORT &= 0xF0; sollen hier alle Ports von Port D auf 0 gesetzt 
werden?
LCD_PORT &= ~(0xF09); wäre es so dann nicht sicherer alle Ports 0?

Gruß,
Andreas
#1503393
Lesenswert?

Andreas V. schrieb:

> Frage,
> LCD_PORT &= 0xF0; sollen hier alle Ports von Port D auf 0 gesetzt
> werden?

Nein.
Nicht alle.

Nur die 4 niederwertigsten Bit an denen die 4 Datenleitungen des LCD 
hängen.
Die restlichen 4 lässt der Code in Ruhe, da er ja nicht wissen kann, ob 
und wenn ja was, dort angeschlossen ist.
#1503405
Lesenswert?

Andreas V. schrieb:
> OK, seh ich ein.
> Aber wenn ich das im AVR Studio im Debbug Modus laufen lasse, werden die
> 4 höherwertigen Bits nicht gesetzt!

:-)

Mit
LCD_PORT &= 0xF0
setzt man auch keine Bits, sondern man löscht sie.
0xF0  =  0b11110000
               +  +
               ----

die 4 0-Bits sind dafür zuständig, dass am LCD_PORT die 
korrespondierenden Bits auf jeden Fall 0 werden. Bei den Stellen an 
denen binär eine 1 steht, ändert sich nichts. Wenn vorher dort am 
LCD_PORT eine 1 war, dann ist sie das auch nachher. War vorher dort eine 
0, dann ist nach der Operation dort eine 0.
OP #1503410
Lesenswert?

vielen Dank für schnelle sehr verständliche und freundliche Antwort.

Eine Frage aber noch zum Abschluß:

also muß ich oder brauche ich in diesem Fall das ~(Einerkompliment) zum 
löschen nicht einsetzen?
Weil ja in diesem Status noch nichts gesetzt war? Kann ich dies so 
verstehen?
#1503418
Lesenswert?

Andreas V. schrieb:
> vielen Dank für schnelle sehr verständliche und freundliche Antwort.
>
> Eine Frage aber noch zum Abschluß:
>
> also muß ich oder brauche ich in diesem Fall das ~(Einerkompliment) zum
> löschen nicht einsetzen?

Das Einerkomplement ist schon mit drinn

In Einerkomplemetschreibweise wäre das

   LCD_PORT &= ~(0x0F);

> Weil ja in diesem Status noch nichts gesetzt war? Kann ich dies so
> verstehen?

Du kannst es so verstehen, dass der Programmierer dem Compiler Arbeit 
abgenommen hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren