www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Ansteuerung


Autor: Andreas V. (wicky)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas V. (wicky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, seh ich ein.
Aber wenn ich das im AVR Studio im Debbug Modus laufen lasse, werden die 
4 höherwertigen Bits nicht gesetzt!
Das hat mich halt iritiert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas V. (wicky)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas V. (wicky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super,vielen Dank nochmal.

Gruß,
Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.