www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HD44780


Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Oh nein, nicht schon wieder eine HD44780-Beitrag.
Ja, ich habe die Suchfunktion verwendet.

Ich habe einen Display 4x20 HD44780 Kompatibel von Embedit 
(http://shop.embedit.de/product__250.php)
Datenblatt: http://www.embedit.de/dmdocuments/pc2004cp1.pdf

An einem Board mit einem ATmega32 drauf. Ansteuern möchte ich den mit 
der LCD-Lib von Fleury.

Ich hab den Display an dem Board angeschlossen. Wenn ich jetzt aber den 
anschalte, dann zeigt er das: http://gianclaudio.muasch.com/DSC05569.JPG 
. Eigentlich sollte dann Text dort kommen.
Was mache ich Falsch?

lg
gckoe

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht hast du einfach nur den Kontrast zu weit
aufgedreht ?

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, daran liegts nicht. Ich habe schon ewigs rumgeschraubt an dem 
Kontrastpoti.

Auszug aus dem Wiki-Beitrag zum HD44780:

Spannung zwischen VSS und VCC, kann auf VSS gelegt, oder via Poti 
angeschlossen werden. Bei großflächigen LCDs oder LCDs für weite 
Temperaturbereiche kann auch eine negative Kontrastspannung nötig sein.

Kann es sein dass mein LCD so grossflächig ist, dass eine negative 
Kontrastspannung nötig ist? Und wie würde ich die Realisieren?
Oder was ist sonst falsch?

Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Display ist nicht korrekt initialisiert....
1.) Schaltung Hardwareseite überprüfen, ob alle Signale korrekt ankommen
2.) Software anpassen ob richtiges Display gesetzt ist

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah
Nachdem ich jetzt alles unschöne sauber neu gelötet habe sieht da schon 
einiges anders aus. Aber es ist bei weitem noch nicht das richtige. 
Jetzt kommt folgendes Bild:
http://gianclaudio.muasch.com/DSC05654.JPG

Dastehen sollte:
LCD Test Line 1
Line 2
Line 3

Die Kontakte habe ich überprüft, die sollten funktionieren.

In der LCD Lib von Fleury steht:
Definitions for Display Size
Change these definitions to adapt setting to your display

#define   LCD_LINES   2
#define   LCD_DISP_LENGTH   16
#define   LCD_LINE_LENGTH   0x40
#define   LCD_START_LINE1   0x00
#define   LCD_START_LINE2   0x40
#define   LCD_START_LINE3   0x14
#define   LCD_START_LINE4   0x54
#define   LCD_WRAP_LINES   0
#define   LCD_IO_MODE   1


In einem roboter-chat wurde mir gesagt diese Angaben könne ich so 
lassen. Stimmt das oder liegt hier der Hund begraben?

Autor: Andreas Kramer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da liegt der Hund begraben meine ich mal ^^ du hast 4 Linien und 40 
länge und nicht 2 * 16

Gruß Andreas

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach nein. Es gab doch einen Grund das aus dem Code zu kopieren und nicht 
aus dem Internet.
Ich hab das natürlich auf 4x20 umgeschalten (ist 20 breit, nicht 40), 
den rest aber gelassen. Ankopfhau war ein schlechtes post da oben.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte denken neuer Tag - neues Glück, ist aber nicht so.
Ich habs heute mit der Lib von Radig versucht. Dann kommt aber wieder 
der das Bild, das ich schon bei 
http://gianclaudio.muasch.com/DSC05569.JPG gesehen habe.

Kann es sein dass ich (in der Fleury-lib) im Bereich
#define   LCD_LINE_LENGTH   0x40
#define   LCD_START_LINE1   0x00
#define   LCD_START_LINE2   0x40
#define   LCD_START_LINE3   0x14
#define   LCD_START_LINE4   0x54
etwas falsch habe?

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei interresse kann ich ja mal meinen test code posten der ist evtl für 
anfänger etwas übersichtlicher und einfacher gestrickt.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar besteht interesse. Ist der auch in C programmiert?
Und etwas das einfacher gestrickt ist find ich toll, bis jetzt ist immer 
alles kompliziert.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blöde Frage:
------------

Hast Du bei deinem Projekt die Prozessortaktfrequenz richtig 
eingestellt?
Die Lib von Fleury und andere ähnliche verwenden so weit ich eiss einen 
"Eierloop" für das Timing. Dafür muss man dem Compiler die Taktfrequenz 
richtig einstellen. Geht im Makefile bzw. AVR-Studio unter 
Compileroptionen
(jeweils AVR-gcc)

Bei dem zweiten Bild sieht mir das nämlich nach einem Timingproblem aus.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gckoe wrote:
> Klar besteht interesse. Ist der auch in C programmiert?
> Und etwas das einfacher gestrickt ist find ich toll, bis jetzt ist immer
> alles kompliziert.

Warum benutzt Du eigentlich C?
- Beherrscht Du es soooo gut?
- Oder drückst Du Dich vor der Arbeit an der Basis, also vor Assembler,
  den Timing-Diagrammen und anderen Angaben im Datenblatt und deren
  direkte Umsetzung in Programm-Routinen direkt an der Hardware?

Meine LCDs liefen auch nicht immer von der ersten Minute an, tun es aber
inzwischen alle. Allerdings nicht mit irgendwelchen Routinensammlungen 
fremder Herkunft, sondern mit meinen eigenen Routinen, die vermutlich 
ein paar Features weniger haben, aber mit denen ICH umgehen kann.

Ich weiß, dieser Beitrag wird von Einigen als 'nicht konstruktiv' 
angesehen werden, damit muss ich aber leben. Ich will damit sagen: Wer 
nur fremdes Zeugs benutzt, ohne es zu verstehen, muss sich nicht 
wundern, wenn etwas nicht funktioniert.

...

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes
Da stimme ich zu, eine Initialisierung und Ausgabe für HD44780 in ASM 
selbst zu schreiben ist wirklich kein Hexenwerk. Datenblatt lesen, ne 
Handvoll Bytes ausgeben, dazwischen Delays ...fertig!

Vorallem kann man eine solche Routine immer wieder brauchen.

Ich bin grad an nem GLCD ohne Zeichensatz mit zwei Controllern 
(linke/rechte Hälfte), da mit Tabellen arbeiten ist schon wilder.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die blöde Frage ist nicht mal so blöd - es war keine 
Prozessortaktfrequenz eingegeben. Allerdings glaub ich langsam aber 
sicher an ein höheres Wesen, denn jetzt ist wieder das Anfangsbild 
(http://gianclaudio.muasch.com/DSC05569.JPG) kopfschüttel irgendwas 
ist da nciht normal, aber was?

Warum ich C benutze? Weil ich zuerst mal ein Handyboard mit InteractiveC 
hatte, dann aber auf Atmel umstieg und da dachte, wenn ich doch schon IC 
gelernt habe, dann mach ich jetzt mit C weiter. Eine eigene Ansteuerung 
bauen ist mir im Moment zu schwierig, ich hab von der Materie keine 
Ahnung, klar ich kann sie mir zulegen, aber ich möchte jetzt aus dem 
Thread keinen Thread machen ist C oder Assembler besser, sollte man libs 
verwenden oder nicht... sondern mir wäre lieber wenn geholfen würde.

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
@hannes:
da muss ich dir recht geben, ich benutze auch nur selbst geschriebene 
software. da dauert jedes projekt zwar länger^^, aber dafür hat man 
danach was gelernt.

@gckoe:
schau dir mal die LCD-lib im avr tutorial von mikrocontroller.net an!!!
die ist leicht verständlich und gut dokumentiert. spiel damit nen bissi 
rum und dann schreib deinen eigenen code, schon allein aus der sicht des 
lerneffektes!!!


gruss an alle ;-)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ne blöde Frage:
--------------------

Die Fuses sind auch auf den richtigen Takt eingestellt?

Autor: Sven S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier mal mein code.

an alle die jetzt sagen das ist aber "mieser spagetti code" muss ich 
sagen sie haber rech ;-)

hier noch des passende MAIN schnippsel:

int main( void )
{

lcd_init();
lcdprint("Hallo Welt",1);

while(1)
    {}
}

include wirst du noch selber hin bekommen ansonsten. die funktionen 
lcdprint,lcd_write_line und lcd_writeline machen im prinzip alle das 
gleiche mit ein paar keinen unterschieden. mir gefällt aber lcdprint am 
besten. mit den define´s kann man oben die ports und pins der steuer und 
datenleitungen einstellen, aber vorsicht wie gesagt nur ziemlich einfach 
gehalten. das heist wenn die steuerleitungen nicht die ersten 3 sind 
muss man schon die init ändern.

viel spass beim testen

gruss sven

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal ne Frage:
Zeigt das Display direkt nach dem Anschalten der Betriebsspannung (ohne 
Initialisierung!) zwei schwaze Balken in Zeile 1 und 3 an? Wenn nicht, 
liegt der Hund eher im Display begraben als in der Init-Routine

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bastler

ein glcd in asm programmieren ... das wär mir zu blöd... mehr als ein 
lern effect hast du dabei auch nicht.

@Roland Praml
gute idee. auch wenn der schaltplan x mal im netz ist könnte er mal 
seinen posten.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias: Die Fuses sind Oke
@Sven: Thx für den Code, ich werd mir den mal ansehen.
Aber ahnscheinend liegt der Hund im Display, denn wenn ich nur 
Betriebsspannung anlege dann sieht man nicht, wenn ich den Kontrast noch 
dazufüge dann sieht man immernoch das gleiche.

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gckoe

ich denke mal du hast am kontrast ein poti darn. kommt da nix wenn du 
daran drehst.
wär nicht schelcht wenn du mal deine schaltung herzeigen würdest.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am Kontrast ist ein Poti dran, genau. Wenn ich daran drehe siehts so 
aus:
voll offen: http://gianclaudio.muasch.com/DSC05657.JPG
und jetzt immer weniger: http://gianclaudio.muasch.com/DSC05658.JPG
http://gianclaudio.muasch.com/DSC05659.JPG
http://gianclaudio.muasch.com/DSC05660.JPG
Immer das gleiche Bild, einfach immer weniger.
Meine Schaltung? Ist im Prinzip das selbe wie
http://www.ulrichradig.de/site/atmel/avr_lcd/gfx/C...
von Ulrich Radig. Das Controllerboard ist ein Mega32 Prototype Bausatz 
von embedit.de (http://shop.embedit.de/product__346.php). Sonst hängt da 
nichts dran.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du die Taktfrequenz auch in der lcd.h Datei eingetragen?

#define XTAL 4000000

Der gute Mann scheint da wohl ein eigenes Süppchen zu kochen.

Wenn es im Makefile/Compiler Optionen und in der lcd.h richtig drin ist,
was passiert dann?

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gckoe

das ist für 4 bit modus angeschlossen. mein code ist für 8bit.
ich würd zuerst mal mit 8bit versuchen ist auch viel einfacher zu 
initialisieren.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven S. wrote:
> @gckoe
>
> das ist für 4 bit modus angeschlossen. mein code ist für 8bit.
> ich würd zuerst mal mit 8bit versuchen ist auch viel einfacher zu
> initialisieren.

Ich lach' mich krank....

Dieses Zusammenkopieren von unverstandenen Schaltungen und Routinen 
unterschedlicher Herkunft kann ja auch nicht funktionieren.

Ja, ich schau' mir auch mal fremden Code und fremde Schaltungen an, aber 
nicht, um sie unverstanden zu benutzen, sondern um sie mit meinen 
eigenen Ideen zu vergleichen und ggf. die eine oder andere sinnvolle 
Einzelheit zu übernehmen.

Irgendwie erinnert mich das an die Anfangszeit des PC (DOS), da hatte 
ein Bekannter CONFIG.SYS und AUTOEXEC.BAT - Dateien gesammelt. Aber 
nicht, um die darin enthaltenen Befehle verstehen zu lernen, sondern um 
bei Rechnerproblemen eine nach der anderen auszuprobieren zu können.

...

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes Lux

Da hast du wohl Recht. Am besten seine eigene Schaltung und sein eigener 
Code. Das mit dem 4Bit Modus hab ich halt nicht Gewust.

Hab mir mal den Code von Fleury angesehen und kann da nur sagen bis ich 
da zu 100% durchsteig schreib ich 10 mal einen neuen Code, den ich dann 
auch verstanden habe.

gruss sven

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es denn irgendwo ein Tutorial das die HD44780 ansteuert und das mit 
C und nicht mit Assembler macht?
Denn ich bin jederzeit auch bereit, das zu lernen. Aber das ganze in 
Assembler macht für mich keinen Sinn, da ich C ein bisschen kann und mit 
dem Projekt auch noch etwas C lernen will (oh, ich hör schon schreien 
"mit zusammenkopieren lernst du nix..."). Ich kann euch sagen, das 
Projekt geht anschliessend noch weiter, es soll mal eine Wetterstation 
werden. Und für die anderen Komponenten mag ich selber Proggen, aber für 
das Display wollte ich nicht.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gckoe wrote:
> Gibt es denn irgendwo ein Tutorial das die HD44780 ansteuert und das mit
> C und nicht mit Assembler macht?

Im GCC-Tutorial wird es (vermutlich) auch ein Kapitel über LCDs geben.

In der Codesammlung solltest Du auch genügend Beispiele finden.

> Denn ich bin jederzeit auch bereit, das zu lernen. Aber das ganze in
> Assembler macht für mich keinen Sinn, da ich C ein bisschen kann und mit
> dem Projekt auch noch etwas C lernen will

Es ist nicht die Sprache, sondern das Auseinandersetzen mit der 
Hardware. Ich benutze ASM, weil es unmissverständlicher und eindeutiger 
ist und damit zuverlässiger als C, das man (ich) nicht (oder nur 
dürftig) kann.

> (oh, ich hör schon schreien
> "mit zusammenkopieren lernst du nix...").

Dann hörst Du Gespenster, ich schrei' da nicht. Ich habe dazu meine 
Meinung (etwas überspitzt) gesagt, nun ist gut.

> Ich kann euch sagen, das
> Projekt geht anschliessend noch weiter, es soll mal eine Wetterstation
> werden. Und für die anderen Komponenten mag ich selber Proggen, aber für
> das Display wollte ich nicht.

Dann ist vermutlich Dein Projekt für Deinen heutigen Wissensstand eine 
Nummer zu groß. Fang' etwas kleiner an, nur mit kleinen Schritten kommst 
Du vorwärts.

...

Autor: Sven S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes Lux
> Es ist nicht die Sprache, sondern das Auseinandersetzen mit der
> Hardware.

Genau. Und Asm ist perfekt um sich mit dem Controller auseinander zu 
setzen.

> Ich benutze ASM, weil es unmissverständlicher und eindeutiger
> ist und damit zuverlässiger als C, das man (ich) nicht (oder nur
> dürftig) kann.

Na ja "zuverlässiger" in Asm muss man sich schon mit dem Controller gut 
auskennen um ein grösseres Projekt zu realisieren ohne dabei bugcode zu 
erzeugen.

Gerade bei so sachen wie Zeiger und Rechnungen jenseits der 8 bit 
programmiert man sich in asm auf die Dauer den Wolf ab und hält sich nur 
unnötig auf. Auch Funktionen mit übergabe Parametern würde ich in Asm 
stark vermissen.

gruss Sven

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin beim stöbern im Internet (jaa, ich kann google verwenen, sonst 
wär ich gar nicht hierhin gekommen) auf eine interessante Abbildung 
gestossen.
http://www.sprut.de/electronic/lcd/index.htm#4x20
Hier werden genau auch die ersten 8 Zeichen der ersten beiden Linien 
anders Dargestellt als die Anderen. Könnte das Problem eventuel hier 
sein?

Und noch: Das Display sollte, wenn man es nur an die Stromversorgung 
hängen, immernoch einen Strich in der ersten und dritten Linie machen, 
macht es aber nicht. Daher ist das Problem eher am Display als am Code.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gckoe wrote:
> Ich bin beim stöbern im Internet (jaa, ich kann google verwenen, sonst
> wär ich gar nicht hierhin gekommen) auf eine interessante Abbildung
> gestossen.
> http://www.sprut.de/electronic/lcd/index.htm#4x20
> Hier werden genau auch die ersten 8 Zeichen der ersten beiden Linien
> anders Dargestellt als die Anderen. Könnte das Problem eventuel hier
> sein?

Eher nicht.

>
> Und noch: Das Display sollte, wenn man es nur an die Stromversorgung
> hängen, immernoch einen Strich in der ersten und dritten Linie machen,
> macht es aber nicht. Daher ist das Problem eher am Display als am Code.

Genau.

Wenn du nichts mit dem Display machst, keine Initialisierung,
dann sollte das Display in der ersten und dritten Zeile besagte
schwarze Balken anzeigen. Tut es das nicht, dann ist irgendetwas
faul: Kontrastspannung stimmt nicht oder du hast das Display
bereits gehimmelt.

Autor: gckoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich die Kontrastspannung mit einem Poti schön einstellen kann ist das 
wohl auszuschliessen. Shit, ich brauch ein neues Display :-(

Autor: Recke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen. Ich habe die Software von Sven S. probiert. Funktioniert 
prima. Allerdings habe ich dazu folgende Frage:

Ich kann natürlich mit dem Befehl lcdprint("Zeile 4",4); Den Text "Zeile 
4" in Spalte 4 ausgeben. Jetzt möchte ich aber einen Variableninhalt 
(Zahlenraum von 0 - 255) auf dem Display ausgeben. Wie muss ich den 
entsprechenden Code ändern um dies zu erreichen?

Über Hilfe wäre ich sehr dankbar.

Gruß,

Recke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Recke wrote:
> 4" in Spalte 4 ausgeben. Jetzt möchte ich aber einen Variableninhalt
> (Zahlenraum von 0 - 255) auf dem Display ausgeben. Wie muss ich den
> entsprechenden Code ändern um dies zu erreichen?

http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

Autor: Recke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank!!! Funktioniert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.