Mega 2560 u. I2C-LCD von Sainsmart will nicht...
|
12.09.2013, 12:30
(Dieser Beitrag wurde zuletzt bearbeitet: 12.09.2013 12:35 von Hobel.)
Beitrag #9
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Hallo,
ich habe auf mikrocontroller.net die richtige Pinbelegung veröffentlicht. Die haben beim I2c die Reihenfolge geändert. Ich habe diese ausgemessen und die Lib anschliessend geändert. Bitte die Lib von diesem Frank nehmen! Die Pins können direkt in der Klasse verändert werden. Das Display funktioniert einwandfrei, das kann ich dir sagen. Meines blieb auch dunkel und zuckte nur, eben weil diese I2C Platine ein neues Layout hat. Heir ist mein Beitrag: http://www.mikrocontroller.net/topic/302553 [c] RS = Bit 0 RW = Bit 1 E = Bit 2 D4 = Bit 4 D5 = Bit 5 D6 = Bit 6 D7 = Bit 7 Backlight = Bit 3 (LED EIN = 0 = Pin auf Masse) Library: LiquidCrystal_V1.2.1 Konstruktor: LiquidCrystal_I2C lcd(0x3f, BACKLIGHT_PIN, POSITIVE); Init: lcd.begin(20,4); [/c] Du findest keine Doku zu einem 44780 Display? *hüstel* Sorry.... diesen Chip gibt es seit gut 20 Jahren ...... |
|||
12.09.2013, 22:37
Beitrag #10
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Hallo,
@Ricardo: dein Code klappt leider nicht @Hobel: deiner leider auch nicht. Zitat:Du findest keine Doku zu einem 44780 Display? *hüstel* Sorry.... diesen Chip gibt es seit gut 20 Jahren ......Den Satz versteh ich nun nicht, bitte erklären, danke. Ich hab mich soweit durch die Beiträge gelesen....und verstehe immer mehr Bahnhof. So, wie geht's bei mir weiter? Zunächst habe ich die Pins vom PCF8574 auf das Display (16 Pins) verfolgt. Der I2C-Scanner findet ja die Adresse vom Display, soweit ist das alles ok. Library selber schreiben? Natürlich wenn man das kann, ich kann es noch nicht. Ich denke, es liegt einfach an der Pinzuordnung vom PCF->Display. oder? So und wie bekomme ich nun die richtige Zusammenstellung hin? Wo muss ich was eintragen? Leider habe ich vom Display keine Pinbelegung, kann beim Hersteller nur auf ein Foto zurückgreifen. Hier sind die Pins angeschrieben, ob die korrekt sind, kann ich nicht sagen. Aber die Displays sind doch alles Massenware und dürften einer Standardbelegung gleichen. Wo kann ich noch eingreifen? Es kann doch nicht sein, dass ich hier der Einzigste sein, der ein Problem mit diesem Massenwarendisplay hat? Allerdings hab ich nochmal nachgemessen und ich bekomme keine Verbindung von Pin7/PCF8574(p3) auf Pin7/Display. Nachlöten brachte nichts. Ich forsche hier morgen nochmal nach. Momentan kann ich nicht lokalisieren, ob der Fehler in der Hard- oder Software liegt. Für Tipps bin ich trotzdem froh. Gruß Franz |
|||
12.09.2013, 22:42
(Dieser Beitrag wurde zuletzt bearbeitet: 12.09.2013 22:58 von Hobel.)
Beitrag #11
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Ok, von vorne:
Das Display selbst ist wohl ein I2C Sainsmart, gell? 4 Zeilen usw. Das Display hat einen Hitachi 44780 Controller mit Parallelschnittelle. Soweit Standard, kein Datenblatt nötig, die sind alle gleich. Es gibt auch andere Controller bei Displays. Auf dem Display wird nix rumgejumpert.... Finger weg! Eine Platine für diverse Bestückung, wie übliche. I2C Widerstände brauchst du nicht, wohl aber rate ich dir zu löten und nicht diese Arduino Stecktechnik zu verwenden (billige chin. Steckerleisten), einmal gehustet in die Kabel und du hast Müll auf dem Display. Habe den I2C Bus komplett "fest" angelötet und auch am Arduino, so dass alle I2C Chips sichere Verbindung haben. Dahinter ist die I2C Expander Platine.... und genau da liegt der Hase im Peffer, die haben die Reihenfolge Pins geändert, ohne was zu sagen. D.h. die Library steuert die falschen Pins an. Ergo musst du sie richtig stellen. Entweder in der Klasseninstanz als Parameter oder direkt in der Lib, ich habs direkt da drin gemacht. Ich habe die Pins durchgepiepst und dem Chip zugeordnet. Leider gibt es von diesen I2C Expandern einige, ich habe 3 verschiedene hier, alle unterschiedlich in der Reihenfolge wie die Pins des Chips an die des Displays geführt werden. Such in der LiquidCrystal_I2C.cpp folgende Zeilen und ersetze sie: // --------------------------------------------------------------------------- // Created by Francisco Malpartida on 20/08/11. // Default library configuration parameters used by class constructor with // only the I2C address field. // --------------------------------------------------------------------------- /*! @defined @abstract Enable bit of the LCD @discussion Defines the IO of the expander connected to the LCD Enable */ #define EN 2 // Enable bit /*! @defined @abstract Read/Write bit of the LCD @discussion Defines the IO of the expander connected to the LCD Rw pin */ #define RW 1 // Read/Write bit /*! @defined @abstract Register bit of the LCD @discussion Defines the IO of the expander connected to the LCD Register select pin */ #define RS 0 // Register select bit /*! @defined @abstract LCD dataline allocation this library only supports 4 bit LCD control mode. @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module */ #define D4 4 #define D5 5 #define D6 6 #define D7 7 |
|||
13.09.2013, 13:08
(Dieser Beitrag wurde zuletzt bearbeitet: 13.09.2013 17:46 von alpenpower.)
Beitrag #12
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Hallo,
so, wieder nichts. Ich hab nun versucht die Pins zuzuordnen. Display ---> PCF-Pins 1 VSS 2 VDD 3 4 RS ---> 4 5 RW ---> 5 6 E -----> 6 ----------------------------- 7 D0 8 D1 9 D2 10 D3 ------------------------------ 11 D4 ---> 9 12 D5 ---> 10 13 D6 ---> 11 14 D7 ---> 12 Code: #include <Wire.h> // Diese Lib fehlte und damit die I2C Ansteuerung Den Code finde ich übersichtlich u. ohne Schnickschnack, der sollte doch laufen, wenns nun nur an der verdrehten oder falschen Pinzuordnung liegt? Was sagt die Profigemeinde dazu? In einem Datenblatt des Herstellers sind die Pins am Display wie folgt: 4=RS, 5=RW, 6=E, 7-14=D0-D7 Ja nun, wer hat noch einen Tipp oder einen Fehler meinerseits gesehen? Gruß Franz |
|||
15.09.2013, 12:54
Beitrag #13
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Gib mir mal deine Mailadresse, dann sende ich dir meine LIB und einen Sketch zu für den Mega. Das muss 1:1 Funktionieren, sonst liegt es an deinem Aufbau oder der Hardware. Ich hatte noch einen Draht auf dem Expander gezogen, da ein Pin niht angeschlossen war wegen einer kalten Lötstelle. Pieps alles durch! Nur so kannst du sicher sein, dass es nicht die Hardware ist.
|
|||
16.09.2013, 17:03
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2013 17:18 von alpenpower.)
Beitrag #14
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Hallo,
so, nun tut das Display was es tun soll. Es war doch noch eine schlechte Lötstelle. Heute habe ich nachgemessen. Beim Antippen mit der Messspitze wurde es dann doch noch hell und der Text kam zur Anzeige. Unter dem Mikroskop konnte ich eine schlechte Verbindung feststellen. Jedenfalls klappt nun die Anzeige. Nun noch für alle Sainsmartgeschädigten hier der funktionierende Code: Code: #include <Wire.h> // Diese Lib fehlte und damit die I2C Ansteuerung Was ich noch hinzufügen muss; die Belegung der Pins/Ports und die Vielfalt der existierenden Libs sind verwirrend, zumindest für einen Anfänger wie ich einer bin. Dann ärgert mich schon die schlechte Qualität der Displays, allerdings für den Preis kann man nicht mehr erwarten. Schade ist nur, dass es beim Hersteller sogar Beispielcode gibt, der dann fehlerhaft u. löchrig ist wie Schweizerkäse, egal, man lernt nie aus. Vielen vielen Dank an Ricardo u. Hobel. ![]() Gruß Franz |
|||
16.09.2013, 17:05
Beitrag #15
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Jo, ich hatte auch eine kalte Lötstelle :-)
|
|||
16.09.2013, 18:26
Beitrag #16
|
|||
|
|||
RE: Mega 2560 u. I2C-LCD von Sainsmart will nicht...
Hallo Franz,
ja es ist schon gemein wenn man als Beginner gleich so tief ins Klo fassen muß ;-) Aber mach dir nix draus, ich hänge auch schon am nächsten Problem. Jedenfals herzlichen Glückwunsch zur, wenn auch etwas schwierigen, "Geburt" ;-) Grüße Ricardo |
|||
|
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste