Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem: Ansteuerung eines LCD über I2C
Hallo,
für ein Schulprojekt haben wir den Auftrag, den Asuro mit einem Display auszustatten. Ich bin dann auf folgende Seite gestoßen:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCDErweiterung
Als Display steht uns ein TC1602A mit 2x16 Zeichen (5x8 dots) und Hintergrundbeleuchtung zur Verfügung.
Dann habe ich testweise, anhand des Beispiels, die Schaltung mit einen PCF8574 und dem Rest auf einem Steckbrett aufgebaut.
Nachdem es mit dem Asuro verbunden war, erfolgte die Programmierung (ebenfalls aus dem Beispiel, jedoch angepasste Werte). Und nach ändern des Kontrasts konnte das Display dann den Text ausgeben. \:D/
Da es mir dann langweilig wurde nur vorgegebenen Text auszugeben, schloss ich parallel an den I²C-Bus einen PCF8591. An diesen kamen dann Fototransistoren und ein Temperatursensor. Die Daten konnten problemlos ausgelesen werden und auf dem LCD angezeigt werden.
Doch dann - ich hatte eigentlich gar nichts geändert - erschien nach erneutem Einschalten des Roboters kein Text mehr!
Daraufhin habe ich nach Kontaktfehlern gesucht, dachte es wäre bloß ne Kleinigkeit. Doch es tat sich nichts.
Nach diesem Testaufbau, welcher nicht weiter nach dem Fehler überprüft wurde, folgte das Löten auf einer Lochplatine. Kurz und gut war das Display dann mit der Schaltung fixiert.
Doch nun ergab sich das gleiche Problem wie vorher: Es lässt sich kein Text mehr anzeigen!
Der PCF kann angesprochen werden, zumindest die Hintergrundbeleuchtung lässt sich darüber steuern.
Ich kann es mir einfach nicht erklären. Ich weiß nicht, wo ich nach dem Fehler suchen soll! Ob möglicherweise sogar das Display zerstört wurde!? Vielleicht ist auch einfach ein Problem in der Software, obwohl ich das fast ausschließen kann, da es ja mal funktioniert hat.
Wie kann ich jetzt nachprüfen, wo der Fehler liegt? Was haltet ihr für möglich, gab es schon ähnliche Vorfälle?
Gruß,
Olli
schumi2010
14.03.2010, 15:59
Hallo,
überprüf nocheinmal alle Lötpunkte es kann ja sein das sich ein Fehler eingeschlichen hat. Ansonsten zeig uns doch einfach mal den Schaltplan, dann können wir die besser helfen.
Mfg Michael
Wie gesagt habe ich den Schaltplan grundsätzlich vom AsuroWiki übernommen. Hier trotzdem nochmal mein Plan:
http://img169.imageshack.us/img169/740/schaltplan.png
021aet04
14.03.2010, 16:34
Versuche einmal am Poti zu drehen. Sonnst könntest du das Display direkt anschließen und eventuell ein fertiges BSP nehmen.
Versuche einmal am Poti zu drehen.
Das habe ich bereits.
Sonnst könntest du das Display direkt anschließen und eventuell ein fertiges BSP nehmen.
Was meinst du damit? Was ist ein fertiges BSP?
schumi2010
14.03.2010, 16:49
Nach dem Schaltplan sieht alles richtig aus. Versuch einmal das Programm neu auf deinen Asuro zu spielen. Es könnte sein das es dann wieder funktioniert.
Das Programm hab ich schon mehrfach übertragen (mit kleinen Änderungen) und ein Neustart hat auch nichts gebracht.
Mit folgendem C-Code wurde er zuletzt programmiert:
#include "asuro.h"
#include "i2c.h"
#include "lcd.h"
#define DELAY 1500
int main(void)
{
Init();
InitI2C();
InitLCD();
BacklightLCD( ON);
PrintAlignLCD( CENTER, 0, "Hallo!");
Msleep(DELAY);
PrintAlignLCD( LEFT, 1, "Ich bin Asuro!");
Msleep(DELAY);
while(1)
;
return 0;
}
Doch bis auf die Hintergrundbeleuchtung und leicht abgedunkelten Kästchen in der ersten Zeile tut sich nichts. :cry:
schumi2010
14.03.2010, 17:34
Das Programm scheint richtig zu sein. Überprüf einmal SCA und SDA ob sie richtig verbunden sind.
[quote]Überprüf einmal SCA und SDA ob sie richtig verbunden sind.[quote]
Wenn da was falsch wäre, würde sich wohl kaum die Beleuchtung über den PCF8574 ansteuern lassen. Also die Verbindung scheint zu klappen.
schumi2010
14.03.2010, 18:05
Okay dann muss der fehler in der Programierung liegen, aber du hast ja gesagt das es vorher funktioniert hat. Da ich einen anderes Display benutze, kenne ich mich nicht so gut mit dem TC1602A Display aus :/.
Hast du alles mit Vcc und Gnd verbunden?
hallo zusammen,
nach deiner beschreibung würde ich es nicht ausschließen, dass das display oder dein ic kaputt sind!
gruß josua
m.a.r.v.i.n
15.03.2010, 17:30
Hallo josua,
du betreibst die Hintergrundbeleuchtung ohne Transistor/FET und ohne Vorwiderstand direkt über den PCF8574. Das wird dieser nicht lange überleben, bzw. hat er wohl nicht überlebt.
Das Display selbst wird wohl noch i.O. sein.
Vielen Dank erstmal an alle, die bereits geantwortet haben und mir helfen wollen! =D>
du betreibst die Hintergrundbeleuchtung ohne Transistor/FET und ohne Vorwiderstand direkt über den PCF8574. Das wird dieser nicht lange überleben, bzw. hat er wohl nicht überlebt.
Wie hättest du das Display bzw. die Beleuchtung denn angeschlossen? Im Datenblatt steht ja, dass an Pin 15 (LED+) +5V und an Pin 16 (LED-) 0V anliegen sollten. Warum kann meine Schaltung dann meinen IC zerstört haben? Ich verändere doch nur den Ausgang P6 am PCF, um die Beleuchtung ein- oder auszuschalten.
Inzwischen denke ich selber, dass da was defekt ist bzw. zerstört wurde. Ich möchte nur wissen, was ich evtl. falsch gemacht habe, um beim nächsten Versuch nicht wieder den gleichen Fehler zu machen.
Gruß, olli
Würde ein einfacher NPN-Transistor reichen?
Ich würde ihn dann mit Collector an Pin 16 vom LCD, Basis an P6 vom PCF und Emitter an GND anschließen. Würde das so gehen?
Edit: Sehe ich es richtig, dass der IC (PCF) durch meine Beschaltung zu viel Strom abbekommen hat? Oder wie kann der IC dadurch kaputtgehen?
Basis an P6 vom PCF
Ja, aber einen Widerstand 4,7 kOhm dazwischen.
Sehe ich es richtig, dass der IC (PCF) durch meine Beschaltung zu viel Strom abbekommen hat?
Ja.
Gruß Dirk
m.a.r.v.i.n
15.03.2010, 21:01
Hallo Josua,
ich habe mir mal das "Datenblatt" von Pollin zu dem LCD Modul angeschaut. Viel schlauer werde ich dadurch allerdings nicht. Dort steht nur etwas von 18..20mA Stromaufnahme mit Backlight, was selbst für den PCF8574 eigentlich kein Problem wäre. Allerdings schweigt sich das Datenblatt gänzlich aus, ob im Display bereits ein Vorwiderstand drin ist oder nicht. Für die Kontrastspannung wird zudem ein Poti von 10..20kOhm empfohlen, nicht 5KOhm. Offen bleibt auch die Frage, wie man die Datenbits 0..3 im 4-Bit Mode beschalten soll. Offen lassen, mit GND verbinden. Bei DOGM Module werden die nicht benutzten Datenpins mit VCC verbunden.
Zum Transistor möchte ich noch folgendes anmerken. Zwar geht das auch mit einem NPN, allerdings leuchtet dann das Backlight nach dem Einschalten solange bis das Display initialisiert wurde. Bei einem PNP Transistor passiert das nicht. Auch mit einem Transistor ist ein Vorwiderstand für das Backlight notwendig.
@Dirk: Vielen Dank!
ich habe mir mal das "Datenblatt" von Pollin zu dem LCD Modul angeschaut. Viel schlauer werde ich dadurch allerdings nicht.
Das ging mir genauso, hatte allerdings ein anderes Datenblatt (siehe hier (http://www.datasheet4u.com/download.php?id=658330)). Da ich es nicht besser wusste, hab ich es dann so angeschlossen wie ich es für richtig hielt.
Dort steht nur etwas von 18..20mA Stromaufnahme mit Backlight, was selbst für den PCF8574 eigentlich kein Problem wäre.
Hm, also im Datenblatt vom PCF gibts einen Maximalwert für "maximum allowed input current through protection diode" der I/Os. Dort steht als Maximum +/-400 µA! Ist das nicht der entscheidende Wert? Oder hab ich da was übersehen?
wie man die Datenbits 0..3 im 4-Bit Mode beschalten soll
Also in meinem Datasheet steht: "In case of 4 bits instruction [...] D0 - D3 are not used." Das würde ich verstehen wie: werden nicht verbunden?!
Sternthaler
26.03.2010, 03:57
Hallo zusammen,
ich tippe auch auf einen 'angeschlagenen' PCF8574.
Die Outputpins schaffen als typichen Wert 25mA. Werden aber mit nur 10mA beim Minimum angegeben. Seite 15 bei "LOW level output current"
http://www.datasheetcatalog.org/datasheet/philips/PCF8574_4.pdf
Bei LCDs würde ich mich schwer wundern, wenn dort ein Vorwiderstand schon eingebaut wäre. Der würde dann ja die Betriebspannung für die Beleuchtung festlegen.
Aber genau das lese ich aus folgendem Datenblatt:
http://www.jameco.com/Jameco/Products/ProdDS/1585979.pdf
Letzte Seite unter "Electrical Characteristics" und "Block Diagram"
Möglicherweise hatte der verwendete PCF zu wenig Power und konnte nur diese 10mA liefern.
Jetzt stellt sich nur noch die Frage, warum aber genau dieser Pin noch schaltbar ist und ein anderer Pin zur Datensteuerung deshalb kaputt sein soll. Allerdings wäre ein zerstörter 'Nachbar'-Portpin P7 schon zuständig, dass der LCD-Enable-Eingang nicht mehr schaltet.
Gruß Sternthaler
Also, habe jetzt einen Nachmittag mit dem Teamkollegen verbracht, um das wieder zum Laufen zu kriegen - erfolglos!
Erstmal haben wir die Hintergrundbeleuchtung vom Display gekappt, dann haben wir den PCF ausgetauscht - nichts. Nochmal neu programmiert, sollte nun nacheinander die Buchstaben von "Hallo" ausgeben. Als erstes kommt ein merkwürdiges Sonderzeichen, dann folgen "! , , /".
Ok, haben wir uns ASCII-Tabelle angschaut und Hexcodes - da ist was faul:
'a': 0110 0001 => 0010 0001
'l': 0110 1100 => 0010 1100
'o': 0110 1111 => 0010 1111
Jetzt weiß ich nicht sicher welche Bits bzw. Pins das sind, also von wo man zählt?
Andererseits ist das allein von der Hardware unmöglich, da wir ja eine 4-Bit-Ansteuerung haben?! Dann müssten ja noch weitere Bits fehlerhaft sein.
Ich habe den Code im Programm abgeändert, um zu testen, ob ich das mit der Software beeinflussen kann.
#define LCD_D0 (1 << LD4)
#define LCD_D1 (1 << LD5)
#define LCD_D2 (1 << LD6)
#define LCD_D3 (1 << LD7)
#define LCD_D4 (1 << LD4)
#define LCD_D5 (1 << LD5)
#define LCD_D6 (1 << LD6)
#define LCD_D7 (1 << LD7)
Habe diese Werte verändert - die Anzeige blieb gleich!!!
Das kann doch nicht sein? Wenn diese Werte doch relevant sind, wie kann ich dann das Display ansteuern? :-s
Bitte helft uns, es muss doch ne Erklärung geben? Ist das Display jetzt doch futsch? Oder warum kommt diese merkwürdige Ausgabe?
Sternthaler
08.04.2010, 22:43
Hallo Olli08,
dein Muster könnte man so interpretieren, dass das höchste Bit in der 4´er-Gruppe für das 'falsche' Bit zuständig ist.
Bitsfolge 3210 ... Beim '-' soll es egal sein wie das Bit steht.
Regel 1) 0x-- -> liefert x=0
Regel 2) 1x-- -> liefert x=1
'a': 0110 0001 => 0010 0001
'l': 0110 1100 => 0010 1100
'o': 0110 1111 => 0010 1111
Da ja bei deinen Buchstaben bis jetzt nur das höhere Nibble (die ersten 4 Bit) zu einem Fehler führen, könnte man Buchstaben suchen die auch im unteren Nibble nach meinen "Regeln" den Fehler machen sollten.
Als Testmuster wäre somit folgendes Bitzeug interessant:
000- ---- - Leider keine druckbaren Zeichen. Entfallen
1--- ---- - Können die Displays meistens nicht. Entfallen
0011 0000 "0" => 0011 0000 "0" (Zahl 0)
0011 0100 "4" => 0011 0000 "0"
0011 1000 "8" => 0011 1100 "<"
0011 1001 "9" => 0011 1101 "="
....
Na, ob das wirklich so ist? Aber etwas anderes fällt mir nicht ein.
Gruß Sternthaler
P.S.: Ich hoffe, ihr habt Ostern gut verbracht.
Also auch wenn die Einträge schon etwas zurückliegen - so offen möchte ich den Thread nicht verlassen. 8-[
Hier also ein kurzes Resümee:
Das Projekt ist mittlerweile abgeschlossen, der endgültige Aufbau funktioniert heute noch.
Was habe ich geändert?
Ich habe ein neues, anderes Display genommen. Und die Pins D0-D3 habe ich an Masse geschlossen. Software und Grundschaltung sind also geblieben.
Was war also die Fehlerquelle?
Sicher kann ich das leider nicht beantworten, vermutlich war das Display selbst nicht ganz fehlerfrei. Ansonsten kann es wohl nur an den Pins D0 bis D3 gelegen haben, die ich wie beschrieben offen gelassen hatte. Andererseits hat ein funktionierender Aufbau gezeigt, dass es auch anders gehen kann. Naja - kann eben...
Die Schuld des Problems würde ich letztendlich dem dürftigen Datenblatt des Displays geben! Aber ob das gerechtfertigt ist, weiß ich auch nicht. :-k
Nun ja, das nächste Mal wüsste man, worauf man achten muss... O:)
Gruß, Olli
Sternthaler
10.06.2010, 23:42
Hallo Olli08,
schön,dass es geht.
Nicht schön, dass nicht genau klar ist warum.
Sehr schön ist, dass du dein Resümee geschrieben hast. Wird leider nicht immer gemacht.
Hoffentlich hatte dich die Asuro-Aufgabe so gefesselt, dass du mit dem Teil weiter machst.
Gruß Sternthaler
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.