C Display an Atmega 32 4-zeilig initialisieren

platano

Neues Mitglied
24. Apr. 2014
7
0
0
Berlin
Sprachen
  1. ANSI C
Moin moin,

ich habe ein Display welches ich an einem Atmega32 betreibe. Auf dem Display ist ein KS0066 Controller verbaut. Das soll wohl ein Äquvalent zum HD44780 sein.
Die Initialisierung als solche läuft bei mir, genau so die Ausgabe.

Jetzt kommt aber das Problem:

Ich bekomme lediglich eine Ausgabe auf Zeile 1 und 3. Je nach Kontrast sieht man auf dem Display auch, dass nur eben jene Zeilen aktiv sind. Wie bekomme ich die anderen beiden Zeile dazu auch was auszugeben?

Meine Initialisierung ist angehangen.

Edit: Bevor sich einer einen abbricht und den Code durchgeht, wobei er die Antwort schon weiß: Das ganze ist im 4-bit Betrieb initialisiert.

Vielen Dank schonmal :ciao:

Setup:
Atmega32 auf Pollin Evaluierungsboard Vers. 2.01
Programmieradapter AVRISP mkII
Display: AnagVision AV2040 mit KS0066 (HD44780 Äquivalent)
Software: Atmel Studio 6.1.2730
 

Anhänge

  • Display_Funktionen_self_XXX.txt
    2,3 KB · Aufrufe: 26
Hi,

ich habe ein Display welches ich an einem Atmega32 betreibe. Auf dem Display ist ein KS0066 Controller verbaut. Das soll wohl ein Äquvalent zum HD44780 sein.
...
Ich bekomme lediglich eine Ausgabe auf Zeile 1 und 3. Je nach Kontrast sieht man auf dem Display auch, dass nur eben jene Zeilen aktiv sind.
hört sich danach an als wenn das Display 2 getrennte Controller besitzt. Also einer für Zeile 1+3 und einer für 2+4. Dafür sollten dann 2 Enable-Pins am Display sein. Genaueres würde man im Datenblatt des Displays finden. Hab aber grad keine Lust das nun in den Weiten des WWW zu suchen ;)

Gruß
Dino
 
Hi,

danke für die fixe Antwort.

Das Display hat definitiv nur einen Controller und auch nur ein Enable. Das Datenblatt sagt das gleiche.

Aus Datenblättern zum HD44780 geht sich hervor, dass die Initialisierung sich für zwei- oder vierzeilig nicht unterscheidet. Deswegen bin ich momentan ratlos

Gruß
 

Anhänge

  • 181657-da-01-en-LCD_MOD_STN_BLAU_NEG_LED_WEISS_20X4.pdf
    353,4 KB · Aufrufe: 26
Hi,

sieh dir mal im Datenblatt die DisplayPosition an ...
Display position
DD RAM Address Line1 - 00h .. 13h
DD RAM Address Line2 - 40h .. 53h
DD RAM Address Line3 - 14h .. 27h
DD RAM Address Line4 - 54h .. 67h

Wenn du nun per Schleife Zeichen ans Display sendest, dann kommt nach der Zeile 1 sofort die Zeile 3.
Erst nach 40 Zeichen siehst du in der Zeile 2 was ankommen. Danach dann sofort in der Zeile 4.

Versuch es mal. Evtl paßt ja nur die Berechnung der Zeichenposition bei deiner Display-Bibliothek nicht.

Gruß
Dino
 
Ich spreche über das DDRAM direkt die Zeilen an. Ich kann ja zwischen den Zeilen wählen, egal ob ich 3 oder 20 Zeichen ausgebe. Ich schiebe zwar per Schleife Daten rein, achte aber drauf, dass ich nicht auf mehr als 20 Zeichen pro Zeile komme.
Was mich auch verwundert ist, dass wenn ich das Display initialisiert habe und am Kontrast drehe, nur Zeile 1 und 3 hervortreten.

Habe Display shift aus und AutoIncrement an
 
Ich spreche über das DDRAM direkt die Zeilen an. Ich kann ja zwischen den Zeilen wählen...
Jain...
Du kannst den Cursor auf eine Adresse, eine Displayposition setzen. Der theoretische Adressraum umfaßt 128 Adressen (0..127), da das Kommandobyte=(1|ADD6|ADD5|ADD4|ADD3|ADD2|ADD1|ADD0) bei RS=lo und RW=lo ist. 7bit eben.
Auf Display-Zeichen verbunden sind aber lediglich
0..19 (00h..13h), erste Zeile
20..39 (14h..27h), dritte Zeile
64..83 (40h..53h), zweite Zeile
84..103 (54h..67h), vierte Zeile

Die Bereiche 40..63 (28h..3Fh) sowie 104..127 (68h..7Fh) sollten sich zwar auch beschreiben und auslesen lassen, haben aber keine Auswirkung auf das Display.

Dinos Vorschlag war, einfach mal ab der ersten Zeile (Adresse 00h) fortlaufend (Auto-Inkrement) sichtbare Zeichen (Bytes) in das DisplayRam zu übertragen. Ggf unterschiedliche, und eben mindestens 64 (40hex-viele). Ohne den Cursor umzusetzen.
Das 20ste (14hex) sollte dann in Zeile drei erscheinen, das 64ste (40hex) in Zeile zwei.

Wenn Du allerdings sicher bist, daß Deine Zeilenwahl den Cursor korrekt auf Adresse 40h setzt, wird das auch keinen Unterschied machen

Ein Versuch wäre noch, irgendwelche Characters die erkennbar sein sollten an irgendeine Adresse in Zeile 2/4 zu senden, und dann wieder von dort zu lesen. Geht das korrekt?
 
Ohne jetzt in den Code oder das Datenblatt geschaut zu haben...

Je nach Kontrast sieht man auf dem Display auch, dass nur eben jene Zeilen aktiv sind.
Das Display selbst kenne ich nicht, ich hab nur die von EA in Verwendung. Da kenne ich das Phänomen allerdings auch.
Die 4zeiligen Displays werden als 2zeilig initialisiert. Dreht man am Kontrast rum werden (bei den Displays die ich hier habe) nur die ersten 2 Zeilen schwarz. Die unteren beiden sind komplett unberührt. Die werden erst angesprochen wenn das Display richtig initialisiert wird. Bei den von EA musste man wegen Kompatibilität noch mit einem Befehl erst in ein erweitertes Funktionsregister umschalten und dann sagen dass er 4 Zeilen verwenden soll. Wenn da was nicht stimmt hat man nur die 2 Zeilen. Ich vermute da liegt bei dir was im argen. Das muss auch nicht zwangsweise an deiner Initialisierung liegen, vielleicht braucht das LCD beim Power On auch etwas länger zur Initialisierung und "verpasst" somit die ersten Initialisierungsbefehle.
 
Die Function 'Function Set' ist dazu da die Anzahl der Display-Zeilen zu setzen. Aber das hast Du sicher berücksichtigt?!

Wolfgang
 
Jap, das habe ich berücksichtigt. Laut dem zum Display gehörigen Datenblatt kann man zwischen 1- und 2zeilig wählen. Da zwei Zeilen funktionieren gehe davon aus, dass ich das richtig gemacht habe. Aus Datenblättern zum HD44780 weiß ich, dass sich die Initialisierung von 2zeilig zu 4zeilig nicht unterscheiden sollte.
Ich habe den Code nochmal überarbeitet, damit ich sicher bin dass ich erst das Hi-Nibble und dann das Lo-Nibble übertrage. Die Verarbeitungszeiten habe ich natürlich beachtet.


@TommyB

Das Display braucht laut Datenblatt mind. 30ms für den Bootup. Ich gebe ihm 35ms. Eigentlich sollte das reichen....
Ich werde jetzt mal versuchen die Firma zu erreichen die das Datenblatt verfasst hat. Vielleicht können die mir was bezüglich eines Befehls zur 4-Zeilen-Initialisierung sagen. Nicht dass das Datenblatt wieder unvollständig oder falsch ist. Wäre nicht der erste Fehler den ich darin gefunden habe....
 
schon mal mit einer fertigen Lib versucht?

z.B.

http://homepage.hispeed.ch/peterfleury/avr-software.html#libs

oder

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

wenn die funktioniert, dann weißt du, dass du was falsch gemacht hast ;)



EDIT:

von Peter Fleury hab ich auch schon verwendet, funzt einwandfrei ....
lcd.h muss man anpassen .....


Du müsstest allerdings auch noch bei den #defines den Atmega32 mit einbinden.....

Wenn du 4-Bit Mode verwendest, würde ich die nicht benutzen Pins nicht offen lassen....
 
Hab beide Sachen schon getestet. Damit hat die Initialisierung gar nicht gefunzt :shout:

Hab die ganze Initialisierung dann zu Fuß (oder per Hand) geschrieben nach der hier enthaltenen Anleitung: http://www.datasheetarchive.com/dl/Datasheets-UEA1/DSAFRAZ007534.pdf
Dann habe ich wenigestens etwas gesehen, quasi den jetzigen Stand.

Hab mit dem Typen von DST gesprochen, der meinte nur, dass ich im Endeffekt alles richtig mache, da ich ja schon eine Ausgabe hinbekomme und sonst solle ich "weiterspielen" bis es klappt :hmmmm:

Er sagte auch, dass das Display im Grunde nur zwei Zeilen hat (sieht man ja auch an den Adressen für die Zeilen)
 
Hab beide Sachen schon getestet. Damit hat die Initialisierung gar nicht gefunzt :shout:

ok, das kann ich mir zwar nicht vorstellen, dass das mit der Peter Fleury Lib nicht funzt.... wie gesagt, du musst die lib natürlich anpassen ... und da du den Atmega32 verwendest, musst du die defines ergänzen....

wenn ich das hinbekommen habe, dann schaffst du das auch :D
 
Na das ist ja ein toller Support 0.0
Setzen, 6!

Ist es denn so wie ich vermutet habe dass wenn du den Kontrast übertrieben hoch drehst nur die 2 Zeilen die funktionieren schwarz werden? Oder wirkt sich der Kontrast auf alle 4 Zeilen aus? Wenn dem so ist dann liegt es definitiv an der Initialisierung. Meine schaut auch etwas anders aus (ist allerdings auch für ein anderes Display, aber vielleicht hilft es dir ja. Nicht wundern dass die Kommunikation über SPI läuft, mein Display lässt sich umlöten. Die Befehle sind aber die selben)

Anhang anzeigen SPILCD420.asm
Anhang anzeigen LCD 204BL-4.pdf

Ist jetzt natürlich ein Suchen nach dem Heu im Nadelhaufen :(
 
Sooo nochmal eine Nacht drüber geschlafen und siehe da, es funktioniert :)

Ich hatte ganz zu Anfang einen halben Befehl vergessen :hmpf:

Display läuft jetzt 4zeilig und gibt alles so aus wie ich es mir wünsche :)

Ich bedanke mich für eure Mithilfe!

Wer interesse an dem Init-Code hat kann sich ja bei mir melden ;)

Bis dann :ciao:
 
Hi,

Wer interesse an dem Init-Code hat kann sich ja bei mir melden ;)

den stellt man nach der Hilfe aus dem Forum normalerweise "als guten Ton" im Forum den Leuten zur Verfügung die in Zukunft auch mit einem solchen Problem zu kämpfen haben. Dann müssen die nämlich nicht die ganze Prozedur nochmal durchmachen. :cool: Ein Forum ist dafür da vielen Leuten Hilfe zu geben und Lösungen anzubieten und nicht um einem einzelnen zu einer Lösung zu verhelfen der die dann unter Verschluß hält oder nur auf Anfrage zur Verfügung stellt ;)

Wenn da irgendwelche Patente oder NDAs oder sowas dranhängen würden wäre das was anderes. Sehe ich bei ner Displayansteuerung aber nicht wirklich.

Gruß
Dino
 
Na dann will ich das mal machen ;)

Die Initialisierung und die anderen Funktionen sind für das AnagVision AV2040 an einem ATmega32 mit folgender Pinbelegung geschrieben:

ATmega PORT A

PA0=DB4
PA1=DB5
PA2=DB6
PA3=DB7

PA4=RS
PA5=R/W (hier noch nicht berücksichtigt, da zu Testzwecken auf Masse gelegt)
PA6=E
PA7=nicht belegt

Dieser Code kann als Vorabversion gesehen werden, da R/W noch nicht berücksichtigt und das Busy-Flag noch nicht abgefragt werden.
Sobald diese Sachen mit drin sind, lade ich eine finale Version hoch, dann gibt es auch eine Header dazu ;) das kann aber noch n bisschen dauern
 

Anhänge

  • Display_Funktionen_self_Vorab.txt
    5,2 KB · Aufrufe: 9

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)