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
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?
Das Display ist nicht korrekt initialisiert.... 1.) Schaltung Hardwareseite überprüfen, ob alle Signale korrekt ankommen 2.) Software anpassen ob richtiges Display gesetzt ist
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?
Da liegt der Hund begraben meine ich mal ^^ du hast 4 Linien und 40 länge und nicht 2 * 16 Gruß Andreas
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.
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?
bei interresse kann ich ja mal meinen test code posten der ist evtl für anfänger etwas übersichtlicher und einfacher gestrickt.
Klar besteht interesse. Ist der auch in C programmiert? Und etwas das einfacher gestrickt ist find ich toll, bis jetzt ist immer alles kompliziert.
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.
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. ...
@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.
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.
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 ;-)
Noch ne blöde Frage: -------------------- Die Fuses sind auch auf den richtigen Takt eingestellt?
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
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
@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.
@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.
@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.
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/ConnectLCD_AVR.JPG 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.
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?
@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.
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. ...
@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
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.
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. ...
@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
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.
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.
Da ich die Kontrastspannung mit einem Poti schön einstellen kann ist das wohl auszuschliessen. Shit, ich brauch ein neues Display :-(
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
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_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.