LCD in Betriebnehmen.

Hi zusammen,
da ich nun viel Zeit habe zum basteln habe ich mir folgendes LCD bestellt.

LCD:
http://www.pur-led.de/product_info.php?info=p155_1x-LCD-Displaymodul-4x20-Anzeige-blau-weiss-ohne-Zubehoer.html

Dieses versuch ich über den I2c Controller:
http://www.coptonix.com/files/I2C_LCD_Adapter_V10_Rev5.PDF

anzusteuern.

Als Arduino Plattform nutz ich das "Mega" Board.

Nun habe ich den I2C Controller mit dem Display Verbunden.
Habe dann den Controller über I2C mit dem Board verbunden.

Das Megaboard Nutzt wenn möglich pin 20/21 für SDA / SCL.
Bei der Wire Libaray sind aber Pin 4 und 5 vorgesehen. Muss ich diese ändern ? Geht das überhaupt ?

Die Spannung von 0 / 5 V kommen am Display an, diese zeigt aber keine Reaktion. Die Standart Addresse vom I2C controller ist 0xFE.
Laut anleitung diese habe ich in der Libary angepasst.

Ich habs auch schon mit dieser Libary versucht:
http://www.wentztech.com/radio/arduino/files/LCDI2C.html

Noch komm ich da nicht weiter.
Gibts irgendwo eine Richtig gute Anleitung die man auch als Newbie versteht ? :slight_smile:

mit freundlichen Grüßen
Jomelo

Ich bin mitlerweile weitergekommen und schreibe mir eine Klasse damit alles gut läuft. Mehr dazu wenn ich soweit bin.

analog in 4 und 5 sind die hardware i2c pins vom Arduino. Beim Mega klappt das wohl auch mit den pins 20 und 21... siehe hier:

Vergiß nicht die externen pull-up Widerstände. Ich nehme da meist 10kOhm, aber alles zwischen 1kOhm und 50kOhm scheint zu klappen...

Bei mir scheitert es im Moment daran, das der Pin 6 im Parallelport ( Enable Signal) nicht freigegeben wird und ich somit keine Daten übertragen kann.

Alle anderen Spannungen liegen jetzt an. Mein Testprogramm sieht wie folgt aus:

#include <Wire.h>

int pin13 = 13;

void setup() { 
    pinMode(pin13, OUTPUT);    
   
    //Display setzen   
    Wire.beginTransmission(0xFE);   
    Wire.send(0x77); // Display Type  
    Wire.send(0x01); // 4x20   
    Wire.endTransmission();
    delay(50);  
    
    // Display Einschalten   
    Wire.beginTransmission(0xFE);     
    Wire.send(0x6C);  
    Wire.send(0x0F); // Display on / Cursor on / Blink on   
    Wire.endTransmission();
    delay(50); 
}


void loop()
{
   Wire.beginTransmission(0xFE);     
   Wire.send(0x64); // Ein Zeichen senden
   Wire.send('A');  // Zeichen
   Wire.endTransmission();
   
   // Controll Diode
   delay(50);
   digitalWrite(pin13, HIGH);
   delay(100);
   digitalWrite(pin13, LOW);
}

Danke für den Tip mit den Widerständen, ich habe 1k8 Ohm genommen. Nun bleibt das Programm nicht mehr hängen.

Mal weiter Probieren.

Hi,
wie sind eure Initialisierungschritte beim LCD hat da jemand beispiel Code ?

Ich häng da im Moment fest.

[edit]
Bin wieder weitergekommen, das Display war dunkel da der Contrast auf 0% stand :wink: :-[

Das Problem mit dem Initialisieren besteht aber noch weiterhin, ich kann keine Zeichen senden.
Kann das sein das Die initialisierung vom I2C Adapter übernommen wird ? Da direkt der Cursor auf dem ersten Feld blinkt ?[/edit]

Hi zusammen,
ich komm immer noch nicht weiter.
Habe jetzt nochmal hin und her probiert und auch das Kabel zwischen Master und Slave von 100cm auf 30cm reduziert.

Mein Test Code sieht wie folgt aus:

#include <Wire.h>
int pin13 = 13;

int lcd_backlight = 8;
int lcd_contrast  = 7;

void setup() { 
  pinMode(pin13, OUTPUT);  
  Serial.begin(9600);
}

void loop()
{   
  analogWrite(lcd_backlight, 255);  // 0=> min, 255 => max
  analogWrite(lcd_contrast, 80);    // 0=> max, 255 => min
 
  Serial.println('test ausgabe 1');
  
  //Übertragung
  Wire.beginTransmission(0xFE);  
  Wire.send(0x76); // String Senden
  Wire.send(0x41); // A 
  Wire.endTransmission(); 
  
  Serial.println('test ausgabe 2');   
  
  digitalWrite(pin13, HIGH);
  delay(50);
  digitalWrite(pin13, LOW);
  delay(50);
}

Was mir bekannt ist:
Das Display wird vom I2C Controller automatisch initialisiert. Daher blinkt der Cursor auf der ersten Position.
Die Initialisierung muss nicht mehr im Programm durchgeführt werden. Laut Auskunft vom I2C Adapter Hersteller kann man direkt mit dem Senden von Daten beginnen.

Der Aufbau sollte so auch stimmen. Ich habe mal 3 Bilder gemacht damit ihr mal draufschauen könnt.

Display von hinten:

Display von vorne:

Arduino mit Verkablung:

Die Beiden Pullup Widerstände haben 1k8 Ohm, ich habe auch schon 10k Ohm getestet, das Resultat ist das gleiche.

Aktuelles Problem:

Sobald der unten stehende Befehlt ausgeführt wird, bleibt der Controller an der Stelle stehen. In diesem Moment werden auch beide Pins des I2C Busses auf NULL gezogen. Vorher kann ich knapp 5 Volt messen.

Wire.endTransmission();

Mir kommt es so vor als würde dieser Befehl auf ein Endsignal warten, das nie kommt.

Habt ihr noch Ideen ?

Ich bin über jede Antwort dankbar und mit meinem Wissen am Ende.

Gruß

Jomelo

So, da das ganze nicht geklappt hat, hab ich es nun doch über die 4 bit Variante mit LiquidCrystal gelöst, damit läufts ein display halbwegs.
Zu verwendung von mehreren Displays erstel ich nun ein neues Thema.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1247851153/0#0