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
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.
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.
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.
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?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.