Hallo Forum,
was gibt es schöneres im Zeiten der Ausgangssperre sich mit
Mikrokontroller zu beschäftigen :D
Nur problematisch ist, wenn das Ding einfach nicht das macht was es
machen soll...
Ich habe mir das Addon Board von Pollin angeschafft für mein
Evaluationboard und möchte das LCD Display zum laufen bringen.
Ich bin schon durch geschätzte 100000 Foreneinträge gescrollt, hab
verschiedene Libarys ausprobiert, verschiedene Ports und und und....
Als ich dann gemerkt habe, dass ich mit dem Originalen Pollin
Evaluationboard nicht wirklich weiter komme bin ich jetzt auf einen
Arduino UNO umgestiegen, hab das ganze verkabelt und wollte dies jetzt
nochmal versuchen, aber auch da scheitere ich!
Das Display zeigt mir immer den schwarzen Balken an, ganz egal was ich
mache.
Beim verwendeten Display handelt es sich um das Original Display von
Pollin (LCD TC1602E-01) die Pinbelegung habe ich dem nachstehenden
Programmbeispiel entsprechend angeschlossen.
Auch ein vertauschen der Datenleitungen, rs/en Pins, die verbleibenden
Datenbits (DB0-DB3) auf Masse hängen bringt hier absolut nichts.
Hat jemand noch eine Idee was ich hier noch machen könnte bevor ich das
display rausfetze und im hohen Bogen vom Balkon schmeiße?
1
#include<LiquidCrystal.h>
2
3
// initialize the library by associating any needed LCD interface pin
Schema beachten !
Alle erforderlichen Verbindungen herstellen !
Zu beachten:
***********
Die Port-Verbinder auf dem Pollin-Addon-Board sind mit PX1..PX8
beschriftet. Bei Atmel-Datenblättern ist PX0..PX7 üblich.
> was gibt es schöneres im Zeiten der Ausgangssperre
Achtung! Wir haben keine Ausgangssperre, da hast Du wohl etwas falsch
verstanden. Wir sind im Bereich von "Beschränkungen".
> lcd.print("hello, world!");
Deine Ausgabe aus der Arduino-Welt darf jedenfalls nicht schneller
erfolgen, als es das Display verschaffen kann. In seinem Dabla stehen
die Grenzen zum Nachlesen. Wurde die Initialisierung korrekt
durchgeführt?
Du kannst auch mal vom Programm aus bei ausgestecktem Display testen, ob
das Programm jeden Pin an der erwarteten stelle ansteuert, z.B. durch
Toggeln des Pins.
mfG
Schwarzer Balken heißt gar nichts.
Möglicherweise funktioniert alles korrekt.
Es kann einfach die Kontrasteinstellung sein.
Du hast sicher irgendwo ein Potentiometer für den Display Kontrast.
Benutze das mal ...
Auf dem Pin-Header LCD_Fixed sind alle Brücken gesteckt.
HD44780 kompatible LCD's kann man auch im 4Bit-Mode ansteuern mit
RS,RW,EN,DB4,DB5,DB6,DB7
Mode kontrollieren und Einspeisung an J4 kontrollieren
Thomas W. schrieb:> Schwarzer Balken heißt gar nichts.> Möglicherweise funktioniert alles korrekt.> Es kann einfach die Kontrasteinstellung sein.
Nein, das gezeigte Bild ist typisch für ein Display, welches nocht nicht
initialisiert wurde.
Das heißt auch: Das eigentliche Problem liegt vor printf() bei
lcd.begin() oder in der Hardware.
Man könnte zur Probe mal den Clock Prescaler (Register CLKPR) benutzen,
damit der µC schön langsam läuft. Wenn es dann geht, ist es wirklich nur
eine simple Frage des Timings.
Christian S. schrieb:>> was gibt es schöneres im Zeiten der Ausgangssperre>> Achtung! Wir haben keine Ausgangssperre, da hast Du wohl etwas falsch> verstanden. Wir sind im Bereich von "Beschränkungen".
ach wie gut, dass die welt nur aus deutschland besteht...
Hallo Leute,
erstmal vielen Dank für eure Beiträge.
Die sind wirklich sehr Hilfreich und ich bin sehr erfreut darüber, dass
ich nicht gleich wieder auf irgendein Forum verwiesen werde wo das schon
Behandelt wurde :D
@ A. B. (Firma: uc++):
Auch wenn ich mir mit diesem Schema etwas schwer tue, was du gepostet
hast und welches dem Artikel mitgeliefert wurde, gehe ich schon davon
aus, dass ich dies Richtig verdrahtet habe. Ich gehe von J4 vom LCD
kommend auf den den Arduino. Damit das funktionieren kann, habe ich an
der Stifleitste "LCD" alle Jumper gesetzt! Auch ein durchpiepsen auf
mein Pollin Evaluation Board mit ATMEGA1284p Chip darauf hat mir
bestätigt dass ich die die Jumper stecken muss!
Christian S. schrieb:> Du kannst auch mal vom Programm aus bei ausgestecktem Display testen, ob> das Programm jeden Pin an der erwarteten stelle ansteuert, z.B. durch> Toggeln des Pins.
Das ist ein guter HInweise! Das werde ich mal probieren!
Naja, zum Thema schneller, das könnte ich mir durchaus vorstellen, dass
das Möglich ist, da sonst keinerlei Code auf den Arduino läuft! Ich
werde da mal ein Delay vorschalten und nochmal probieren!
Thomas W. schrieb:> Möglicherweise funktioniert alles korrekt.> Es kann einfach die Kontrasteinstellung sein.
Danke für den Tipp :D Wenn es das gewesen wäre, würde ich jetzt schon
meinen Schulaufsatz auf dem Display ausgeben...
Christian S. schrieb:> die Initialisierung im 4-Bit-Modus
Da tue ich mir etwas schwer, zum einen ist im Datenblatt nichts über
eine Initialisierung vorhanden. Es steht da nur was vom
"Industriestandard"...
Hat hier jemand eventuell ein Datenblatt oder eine Init sequence für ein
TC1620E-01 welches funktioniert?
Aber dass könnte schon eine tatsächliche Fehlerquelle sein, dass sich
dieses Display vom Timing her anderst verhält als es sonstige Displays
tun, denn mit der Arduino Lösung --> Kein Erfolg; mit den Libarys von
microctontroller.net --> Kein Erfolg; Mit Peter Fleury Lösung --> Kein
Erfolg..
Mfg Jojo
Thomas W. schrieb:> Schwarzer Balken heißt gar nichts.
Natürlich heißt das was, nämlich: die Initialisierung des Displays ist
gescheitert. Also wiring oder timing stimmt nicht.
> Es kann einfach die Kontrasteinstellung sein.
Nein, wenn es daran läge, dann gäbe es bei einem zweizeiligen Display
natürlich ZWEI schwarze Balken (oder halt garnichts) zu sehen.
Genau, um auf derart einfache Weise diese beiden Fehlermöglichkeiten
unterscheiden zu können, gibt's diesen default für die Zeit vor einer
gelungenen Initialisierung beim HD44780.
Jojo1220 schrieb:> Als ich dann gemerkt habe, dass ich mit dem Originalen Pollin> Evaluationboard nicht wirklich weiter komme bin ich jetzt auf einen> Arduino UNO umgestiegen,
Hi,
warum funktionierte es mit dem Pollin EVA board nicht. Bevor Du die
Ursache nicht aufgespürt hast, kann es jetzt mit dem Arduino auch nicht
unbedingt besser gehen. Was durchaus möglich ist, und das war bei meinem
STK500 Board so, Haarriss in der Platine.
Der erste Schritt wäre also, sämtliche Leiterbahnen, Kontaktierungen
etc. pp. nachprüfen. Dann die Verbindungen zum Display.
Dass + und - vertauscht sind, kann man ja schon einmal ausschließen, da
ja Balken erscheinen. Und wenn sich was am Kontrast verändern lässt,
dann ist das Pinout dafür auch richtig. Auf dem Foto sehe ich keine
guten Verbindungen von den Ports. Das HD44780 muss im Vierbitmodus mit
D4 bis D7 angesteuert werden. Das will der Controller so.
D0 bis D3 bleiben erst einmal frei. Auch nicht jumpern an GND. Ich sehe
da jede Menge Jumper. Was soll das?
Dann sehen wir weiter.
ciao
gustav
Karl B. schrieb:> Das HD44780 muss im Vierbitmodus mit> D4 bis D7 angesteuert werden. Das will der Controller so.
Welcher Controller will das so? Der HD44780 jedenfalls nicht, der kann
natürlich auch 8Bit. Genau deswegen existieren D0..D7, weil eben beides
geht.
Welche Variante tatsächlich verwendet werden soll, wird eben im Zuge der
Initialisierung festgelegt (neben einigen anderen Sachen).
Diese Sequenz (und auch die HD44780-Hardware) ist natürlich so
gestrickt, dass sie auch funktioniert, wenn D0..D3 überhaupt nicht
angeschlossen sind.
Tatsache ist aber, dass der initiale Zustand des HD44780 der 8Bit-Modus
ist. Erst im Zuge der Initialisierung wechselt man tatsächlich auf den
4Bit-Modus (wenn man ihn denn haben will).
Jojo1220 schrieb:> LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Das setzte ich voraus.
Wenn 4 Bit dann erwartet Controller immer in der Reihenfolge zuerst D4
bis D7 und dann gefolgt von D0 bis D3. Mit jeweils einem Enableimpuls.
So war das zu verstehen.
Hätte aber auch als Fehlerquelle ein abweichendes Pinout annehmen
können.
Je nachdem wie in Initsequenz "geswappt" wird, gibt es da noch
Fehlerquellen.
c-hater schrieb:> Tatsache ist aber, dass der initiale Zustand des HD44780 der 8Bit-Modus> ist. Erst im Zuge der Initialisierung wechselt man tatsächlich auf den> 4Bit-Modus (wenn man ihn denn haben will).
Das Display macht einen POS und der funktioniert nur, wenn
1) Versorgungsspannung nicht zu langsam ansteigt.
(Ergo: zu dicke Elkos direkt vor dem LCD vermeiden.)
2) Immer 8 Bit Busbreite, und Display schaltet Anzeige ab.
Also Wiedererwecken notwendig.
Zitat:
"...
Initializing by Internal Reset Circuit
An internal reset circuit automatically initializes the HD44780U when
the power is turned on. The
following instructions are executed during the initialization. The busy
flag (BF) is kept in the busy state
until the initialization ends (BF = 1). The busy state lasts for 10 ms
after VCC rises to 4.5 V.
1. Display clear
2. Function set:
DL = 1; 8-bit interface data
N = 0; 1-line display
F = 0; 5 ´ 8 dot character font
3. Display on/off control:
D = 0; Display off
C = 0; Cursor off
B = 0; Blinking off
4. Entry mode set:
I/D = 1; Increment by 1
S = 0; No shift
Note: If the electrical characteristics conditions listed under the
table Power Supply Conditions Using Internal Reset Circuit are not met,
the internal reset circuit will not operate normally and will fail to
initialize the HD44780U. For such a case, initial-ization must be
performed by the MPU..."
/Zitat
ciao
gustav
D = 0; Display off
Fehlt folgender oder ähnlicher String in der µC-Initialisierungsroutine,
wird Pufferinhalt nicht auf Anzeige durchgereicht. Leider nur ASM :-(
Ist zwar alles da, man sieht nur nichts.
lcd_entrymode: ;Entry/Shift Mode Set:
ldi temp, 0x0C ;Anzeige wieder einschalten
Karl B. schrieb:> Das Display macht einen POS und der funktioniert nur, wenn> 1) Versorgungsspannung nicht zu langsam ansteigt.> (Ergo: zu dicke Elkos direkt vor dem LCD vermeiden.)>> 2) Immer 8 Bit Busbreite, und Display schaltet Anzeige ab.> Also Wiedererwecken notwendig.
Falsch. Du unterschätzt massiv die Intelligenz der HD44780-Entwickler.
Die haben die Sache wirklich unter allen Aspekten durchdacht.
Die Standard-Initsequenz ist nämlich so gestrickt, dass sie auch dann
funktioniert, wenn das Display bereits im 4Bit-Modus ist (also z.B.
einen Reset nicht mitbekommen hat).
Probleme kriegen immer nur die, die vom Standard abweichen...
Das allerdings hat sich im Laufe der Jahre rumgesprochen, was dazu
führte, dass die Hardware fast niemals das Problem ist, auch wenn es
sich nur um "kompatible" Controller handelt und nicht um das Original.
Allerdings ist ein Haufen Vollschrott an Software im Umlauf, deren
Programmierer das nicht begriffen haben. Sprich: wenn man will, dass es
funktioniert, schreibt man's entweder gleich selber oder schafft die
Eigenkompetenz, um die C&P'te Lib daraufhin zu überprüfen, ob sie was
taugt...
Ich persönlich ziehe es vor, den Kram gleich selber zu schreiben (bzw.
hab' das im Falle von HD44780 vor vielen Jahren getan).
c-hater schrieb:> Ich persönlich ziehe es vor, den Kram gleich selber zu schreiben (bzw.> hab' das im Falle von HD44780 vor vielen Jahren getan).
Hi,
Also, Display wird das allererstemal an Versorgungsspannung angelegt:
Im Daba steht:
DL = 1; 8-bit interface data
und das ist kein Vierbit-Modus.
Wie kommst Du darauf, dass beim ersten Einschalten der
Versorgungsspannung (+5V Vcc meistens) automatisch auf Vierbit-Modus
gesprungen wird?
Die Standard-Init-Sequenzen in der Software nach Abwarten des Power on
Self Resets können durchaus abweichen. Da gebe ich Dir Recht.
Die Angaben im Datenblatt sind Deiner Meinung nach wie zu
interpretieren?
Ich sehe da "no display", bevor nicht irgendetwas an Befehlen bezüglich
der Operationsweise noch nachgeschoben worden ist.
ciao
gustav
Also bevor du dein Display wegschmeisst, schau dir mal den Plan des
Boards an. Du hast die Leitungen vom Uno auf J4 gesteckt. Du hast von
dort aber keine Verbindung zum LCD-Port. Einfach mal durchklingeln wenn
du es nicht glaubst. Wenn du die Leitungen vom Uno direkt zum LCD-Port
steckst, wird es auf Anhieb funktionieren.
Der UNO Sketch funktioniert richtig gesteckt sofort.
Das mit der Verbindung von J4 zum LCD-Port muss ich zurücknehmen, hatte
da die Brücken nur einseitig gesteckt.
Die Leitungen von J4 zum LCD solltest du trotzdem durchklingeln, denn
das das Display defekt ist, glaube ich nicht ganz.
Karl B. schrieb:> Der erste Schritt wäre also, sämtliche Leiterbahnen, Kontaktierungen> etc. pp. nachprüfen.Jojo1220 schrieb:> Hat hier jemand eventuell ein Datenblatt oder eine Init sequence für ein> TC1620E-01 welches funktioniert?
Hi,
Merke:
Die Befehlslisten spiegeln nicht die Reihenfolge, die Abfolge der
Initialisierungssequenzen wieder.
Das wird immer 'mal wieder verwechselt.
Die sind nach aufsteigender "Wertigkeit" gegliedert. Immer ein Bit mehr
nach links.
Initialisierung braucht andere und Extra-Reihenfolge.
Also:
Grobe Einteilung:
Erst einbmal Pinout/Port dokumentieren:
LCD 2x16, Vierbitmodus
; Vcc +5V
; PortB LCD Ausgabe:
; R/W=GND
; PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
; n/a LED ena rs D7 D6 D5 D4
kann abweichen, ist für die tatsächlich verwendete "Swap"-Sequenz dann
wichtig.
LED steht hier für Hintergrundbeleuchtung ein/aus. Kann leer bleiben.
Die µC-Initialisierungsprogrammsequenz könnte (in ASM) so aussehen.
(Die wait-Zeitschleifen werden als bekannt vorausgesetzt.)
rcall wait ; LCD Power On Self Reset abwarten
push temp ; Sicherung Temporaer- und
push temp1 ; Statusregister auf Stapel
in temp1,SREG
push temp1
rcall lcd_reset ; LCD-Bus-Reset, 3 x $03 (Portbelegung!)
rcall lcd_achtbit ; LCD-Init: acht Bit
rcall lcd_acht_vier ; LCD-Init: acht zu vier Bit
rcall lcd_vier_zwei ; LCD-Init: vier Bit, zwei Zeilen
rcall lcd_on_off ; LCD-Init: Displaypuffer aus
rcall lcd_clear ; LCD-Init: Anzeige löschen
rcall lcd_entrymode ; LCD-Init: Entry Mode Set
pop temp1 ; Wiederherstellung Temporaer-
out SREG,temp1 ; und Statusregister
pop temp1
pop temp
ret
Wer will, kann es so machen. Leider nur ASM -:(
Dass es auch anders geht, braucht nicht extra betont zu werden.
ciao
gustav
@von Jojo1220
Anbei zwei Dateien und damit ein neues Projekt mit deinem Controller
erzeugen.
Das hier entsprechend deinem Quarz anpassen sonst stimmt das Timing
nicht.
#define F_CPU 16000000UL // Verwendeter Quarz
Eventuell die Optimierung auf -OS einstellen.
Verwendeter Port frei wählbar.
Hier wird der PORTB verwendet.
In der LCD-Defintion.h
#define LCD_PORT PORTB
#define LCD_DDR DDRB
#define LCD_PIN PINB
Wichtig ist, das die Verbindungen vom LCD - Display DB4 - DB7 ( 11 - 14
)
am Port des Controllers am gewählten Port z.b. PORTD an den Pins PD3-
PD6 werden.
Hubert G. schrieb:> Am Programm liegt es sicher nicht. Das Arduino Prog hat bei mir> auf> Anhieb funktioniert.
Also ich hoffe auch der TO hat sein Display richtig angeschlossen
und hat es nicht ausversehen getötet.
Ich hoffer der TO kann ein bischen Nachvolziehen
was alles erledigt werden muss damit so ein Display funktioniert.
Neuer Tag - naja nicht umbedingt neues Glück...
der nixwois schrieb:> Anbei zwei Dateien und damit ein neues Projekt mit deinem Controller> erzeugen.
Danke dir vielmals, habe das auch gleich mal versucht in die Tat
umzusetzen mit nem ATMEGA1284P und komplett neuer Verdrahtung (siehe
angehängtes Bild). Die Datenpins D0-D3 liegen jetzt erstmal frei -->
Jumper entfernt! Die Änderungen habe ich vorgenommen wie du sie mir
geschildert hast.
Hab das ganze auch nochmal mit dem Fluke durchgepiepst un dkann
versichern dass der Kontrast 100x hoch und runter geschraubt wurde...
Am Pin 5 und Pin 6 des PortD sind die 2 LED's (LED 1 und LED 2) mittels
Jumper am ATMEL Evaluationboard angeschlossen. Ich kann daran erkennen,
dass definitiv etwas passiert und sie flackern kurzzeitig auf, also der
Chip hängt sich nicht irgendwo auf.
Ein Austauschen der Datenleitungen von DB3-DB7 auf DB7-DB3 hat keinen
ERfolg gebracht.
Ich bin auch dem nachgegangen indem ich mal die Clkdiv fuse
ein/ausschalte, keine veränderung...
Im Anhang hab ich nochmal die Datenblätter angefügt, diese sagen mir
aber aber im übertragenden Sinne nichts aus, ob es sich beim angenommen
LCD Controller überhaupt um einen HD44780 handelt.
Mfg,
Jojo
Das LCD von Pollin ist zu 99.9% kompatibel mit HD44780
Ich habe aber den Eindruck, dass du die Belegung der Pin-Header J4 nicht
nicht richtig verstanden hast. Mit einem 40Pin Flachbandkabel lassen
sich J4-EVAL und J4-ADDON verbinden - muss aber nicht sein.
Die Signale für die LCD könntest du auch direkt einspeisen - ohne
J4-ADDON: siehe Bild.
Die Brücken auf J4-EVAL machen für mich keinen Sinn.
Schema für EVAL ist beigefügt. Da musst du dich einarbeiten - sonst wird
das nix. Nicht jeder ATmega hat alle Ports.
Ein Blink-Led wäre sinnvoll, zeigt dass uC arbeitet.
Damit das einfacher und konkreter wird, wäre das oben verlinkte
Arduino-Tutorial ein Weg. Dort sind die Signale gut dokumentiert und die
Software sollte zur Hardware passen ...
von Jojo1220
Hallo!
Ich habe nochmal die Dateien überarbeitet und es an einem
LCD Display mit 16x2 Zeichen getestet.
Wenn du die Verdrahtung richtig und den Port
LCD_Defintion.h geändert hast.
Sollte als Ergebnis wie die Demo.gif Zeigt zu sehen sein.
Jojo1220 schrieb:> Im Anhang hab ich nochmal die Datenblätter angefügt, diese sagen mir> aber aber im übertragenden Sinne nichts aus, ob es sich beim angenommen> LCD Controller überhaupt um einen HD44780 handelt.
Hi,
definitiv HD44780 kompatibel.
Bei mir läuft's. (Die tatsächlich hier verwendete Initialisierung im
Dateianhang. Kann noch verbessert werden, das steht außer Frage. Einige
Strings sind völlig unnötig. Es ging aber darum, was tatsächlich in der
Praxis verwendet wird und ob es dann damit funktioniert.)
Wenn es nicht anders geht,
bau das LCD aus und betreibe es solo. Irgendetwas an Deiner Verdrahtung
ist da faul.
ciao
gustav
P.S.: Fehlt noch:
;Variablendefinitionen:
.equ daten = portb