Go Down

Topic: LCD in Betriebnehmen. (Read 2411 times) previous topic - next topic

Jomelo

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 ?  :)

mit freundlichen Grüßen
Jomelo

while(!success){try++;}

Jomelo

Ich bin mitlerweile weitergekommen und schreibe mir eine Klasse damit alles gut läuft. Mehr dazu wenn ich soweit bin.
while(!success){try++;}

bohne

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:
http://www.arduino.cc/en/Reference/Wire

Vergiß nicht die externen pull-up Widerstände. Ich nehme da meist 10kOhm, aber alles zwischen 1kOhm und 50kOhm scheint zu klappen...
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Jomelo

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:
Code: [Select]

#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.
while(!success){try++;}

Jomelo

#4
Jul 09, 2009, 01:51 pm Last Edit: Jul 09, 2009, 02:27 pm by Jomelo Reason: 1
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 ;-) :-[

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]
while(!success){try++;}

Jomelo

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:
Code: [Select]

#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.
Code: [Select]

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
while(!success){try++;}

Jomelo

#6
Jul 17, 2009, 07:16 pm Last Edit: Jul 17, 2009, 07:19 pm by Jomelo Reason: 1
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
while(!success){try++;}

Go Up