Forum: Mikrocontroller und Digitale Elektronik LCD am mega8 will nicht ganz


von GMB (Gast)


Lesenswert?

Also, da das Problem mit dem Reset etc. an meiner Schaltung ja nun
geklärt ist, habe ich nun das Problem, das mein Display nicht ganz so
will wie ich.
Der mega8 läuft auf jeden Fall "richtig", ein "Rechteck" an einem
Portpin lässt eines der Relais schön schalten, es sollte also soweit
erstmal alles laufen, das Display habe ich ähnlich dem Tutorial
angeschlossen, und zwar wie folgt:

PB5 => RS
PB4 => E (nable)
PB3 => DB4
PB2 => DB5
PD1 => DB6
PB0 => DB7

Vcc und GND nach Datenblatt, DB0 bis DB3 auf GND, RW auf GND, Vee über
47k Poti (funzt auch zur Kontrasteinstellung)

Das Display zeigt auch etwas an, allerdings nicht das, was es anzeigen
soll, es kommen nur "Hyroglyphen" zum vorschein, Aktionen wie
"Display löschen (Cls in Bascom) funktionieren wohl, den es
"wackelt" kurz, bis er die Hyroglyphen neu anzeigt.
Es sind auch jeweils die gleichen Hyroglyphen (also das Wort "Test"
gibt immer die gleiche sinnlose Zeichenfolge) etc.

Woran könnte es liegen? Das Display bekommt ja wohl nur die Daten
irgendwie falsch rüber, oder?

Ist übrigens ein 2*16 Display mit HDD44780-Controller, lief auch vorher
am mega8, also keine Kompatibiltätsprobleme.

Wer hat eine Idee??

von Hannes L. (hannes)


Lesenswert?

Kannst du ausschließen:

- vertauschte Leitungen?
- D0 bis D3 nicht sauber auf GND?
- andere Pins benutzt als in BASCOM konfiguriert?
- anderes Timing als in BASCOM konfiguriert?

Mehr fällt mir jetzt nicht ein, da ich den Baukasten BASCOM nicht
benutze und daher kaum kenne. Ich schreibe mein Zeugs in ASM, das ist
irgendwie übersichtlicher, da sieht man, was man macht.

...

von Chris Nöding (Gast)


Lesenswert?

Gleiche Problem habe ich derzeit. Es hängt eigentlich nur am Timing. Das
 Programm läuft einwandfrei, nur das Display spinnt. Wenn ich ein paar
mal schnell hintereinander auf Reset drücke, dann kommt auch das
richtige Bild auf dem LCD (auch 2x16 mit HD44xxx).

Offensichtlich muss man sehr genau auf das Timing beim initialisieren
achten :-/


probier mal ein paar waitms(100) - bzw. je nach Sprache entsprechende
verzögerungsschleifen am Programmstart einzubauen. Das wirkt Wunder :)

von Karl H. (kbuchegg)


Lesenswert?

Keine Ahnung wie BASCOM das haben will.
Aber das kommt mir Spanisch vor

PB3 => DB4
PB2 => DB5
PD1 => DB6
PB0 => DB7

Bit 0 am µC  entspricht Bit 4 (oder Bit 7) am Display?
Das kann ich fast nicht glauben, da mann dann jedes Byte
in sich spiegeln muesste, bevor man es ausgibt.

von GMB (Gast)


Lesenswert?

@Hannes: D0 bis D3 auf GND? Wie du siehst, verwende ich D1 um es an DB6
am Display anzuschließen. Sollten die anderen (D0, D2, D3) auf GND
gelegt sein?

@Chris: werde das mit den Warteschleifen nochmal versuchen, wobei ich
zuletzt z.B. ein paar Warteschleifen zwischen die einzelnen Ausgaben
gesetzt habe (allerdings auch nicht vor die erste Ausgabe), das werde
ich nachher nochmal prüfen.

@Karl-Heinz: ich stelle bei Bascom die Portpins ein, an welchem
Datenbit des LCD diese sind, Bascom kompiliert das dann passend. Wie es
genau abläuft kann ich dir leider auch nicht sagen.

Ist es denn allgemein "verkehrt", das Display an verschiedene Ports
anzuschließen, also z.B. ein paar der Leitungen an PortB, ein paar
andere an Pins von PortD?

Danke aber soweit erstmal, weitere Tips sind herzlich willkommen!!

von ttt (Gast)


Lesenswert?

Mit D0 bis D3 (DB0-DB3)sind die restlichen Pins am Display gemeint, die
du im 4-Bit Modus nicht brauchst!

von GMB (Gast)


Lesenswert?

Ach so, sorry, ja, die sind alle auf GND, werde das heute alles nochmal
nachprüfen, aber die anderen Leitungen habe ich gestern doppelt
gegengeprüft, da ist alles so wie es sein sollte!!

von Marko (Gast)


Lesenswert?

richtigen quarz angegeben und eingestellt im compiler?
fuses intern extern?
jtag-fuse disabled?
ist n timing problem.
schnellen timer nebenher laufen mit langer ISR?

von Hannes L. (hannes)


Lesenswert?

> Ist es denn allgemein "verkehrt", das Display an verschiedene Ports
> anzuschließen, also z.B. ein paar ...

Das kommt auf den "LCD-Treiber" an. Da das in BASCOM ein "Baustein"
dieses Baukastens ist, könnte dir nur der Programmierer dieses Bausteins
Auskunft geben. Vielleicht hat es das ja schon getan, indem er
entsprechende Hinweise in die BASCOM-Hilfe geschrieben hat.

> Aber das kommt mir Spanisch vor

> PB3 => DB4
> PB2 => DB5
> PD1 => DB6
> PB0 => DB7

Ich halte es auch für unwahrscheinlich, dass der LCD-Treiber das so
unterstützt. Ich denke eher, dass PB0 an DB4 muss usw.

Zum Timing von HD44780-kompatiblen LCDs:
- Das LCD benötigt einen schnellen Anstieg der Betriebsspannung beim
  Einschalten. Ein dicker Elko hinter dem Spannungsregler könnte
  das beeinträchtigen.
- Das LCD benötigt eine längere Pause zwischen Einschalten der
  Betriebsspannung und dem ersten Befehl der Initialisierung.
- Das LCD benötigt nach Clear eine größere Pause, manche LCDs auch
  nach Cursor-Home.
- Nach den restlichen Befehlen darf die Pause kleiner sein.
- Die genauen Werte der einzuhaltenden Pausen sind von Typ zu Typ
  etwas unterschiedlich.

> jtag-fuse disabled?

Der Mega8 hat kein JTAG. Auch bei den großen Megas, die JTAG haben,
braucht man diese Fuse nicht zu verändern, es genügt, wenn man zweimal
direkt hintereinander JTD in MCUCSR setzt.

...

von GMB (Gast)


Lesenswert?

Nebenher läuft sonst nichts, Fuses sind alle richtig gesetzt, werde
nachher mal ein wenig die Ausgänge "durchwechseln", also PB0 an DB4
und der Rest dann "analog".

Werde auch mal diverse Warteschleifen einbauen, um Fehler dieser Art
auszuschließen.

Quarz ist übrigens richtig angegeben, nebenher läuft nix anderes! (Wie
gesagt, habe nen Test-Programm draufgespielt, um solche Dinge
auszuschließen.

Ein Kondensator ist auch dran (220µF) am Spannungsregler, im
"Einschaltmoment" ist auch sonst erstmal kein Bauteil aktiv, was
große Ströme verlangen könnte.

von Chris Nöding (Gast)


Lesenswert?

bau die Zeilen für das LCD ziemlich am Ende deiner
Programminitialisierung ein:

Beispiel:

   Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3
, Db7 = Portc.2 , E = Portb.5 , Rs = Portc.1
   Config Lcd = 16 * 2

   Waitms 100

   Upperline
   Lcd "TIS ISSE TEST"
   Lowerline
   Lcd "GUHDEN DACH!"



dann kann das Display in Ruhe hochfahren, initialisiert dann über den
BASCOM-Treiber und gibt nach 100ms die ersten Buchstaben aus. Bei mir
klappt das einwandfrei bei ATmega8 und ATtiny2313 mit 4-8MHZ.

von GMB (Gast)


Lesenswert?

Stimmt, daran habe ich noch gar nicht gedacht, die Initialisierung
"so" vorzunehmen, also nicht den Compiler das machen lassen, sonder
"selber" zu machen, versuch ich direkt mal... ;-)

von GMB (Gast)


Lesenswert?

Also, habe das mal mit einem Code ähnlich dem oben probiert, jetzt sagt
das Display gar nix mehr!!

Habe auch folgendes gemessen:

Durchgang der Leitungen vom Display zu den Ports => alles i.O.

GND an Pin 5, 7, 8, 9, 10, 16, +5V an Pin 2, GND an Pin1 vom Display,
alles vorhanden bzw. Durchgang da...

Aber was mich wundert: alle Pins am Display (bis auf Pin 4 (RS)) haben,
wenn ich das Display hier so liegen habe, Durchgang gegen Masse?!?! Ist
das normal so?

Und warum tut sich jetzt auf einmal gar nix mehr am Display?

von GMB (Gast)


Lesenswert?

Hatte jetzt den 220µF am Ausgang des Spannungsreglers mal entlötet:
keine Änderung!!

Einstellung des Kontrastet funktioniert, als die "Balken" sind alle
sichtbar!!

Wer hat noch eine Idee woran es liegen könnte??

Habe jetzt vor und hinter jeden Befehl ein waitms 100, also das sollte
ja wohl reich, oder?!?!

von Chris Nöding (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt nur dieses lauffähige Programm (siehe Anhang) als
BASCOM-Code hier rumliegen. Das funktioniert hundertpro.

Bitte schließe das Display GENAUso an:
==================================
01 - GND
02 - +5V
03 - Schleifer eines 10k-Potis welches zwischen GND und +5V hängt
(Kontrasteinstellung)
04 - LCD RS (PinC1)
05 - GND
06 - LCD Enabled (PinB5)
07 - Frei (nicht auf GND)
08 - Frei (nicht auf GND)
09 - Frei (nicht auf GND)
10 - Frei (nicht auf GND)
11 - LCD DB4 (PinC5)
12 - LCD DB5 (PinC4)
13 - LCD DB6 (PinC3)
14 - LCD DB7 (PinC2)
15 - Helligkeit (PinB1)
16 - GND
====================================

ich habe die nichtverwendeten Pins des Displays einfach in der Luft
hängen und habe damit keine Probleme, auch wenn es "schlechter" Stil
ist. Zum Testen reicht es allemal. Die Firmware ist derzeit für 7,3728
MHz, aber das kannst du ja schnell angleichen (einer der ersten
Einträge im Sourcecode)


viel Glück!

von MArko (Gast)


Lesenswert?

Was ich bislang noch vermisse ist die Bezeichnung von dem Ding.
evtl. ist ja nur hd44780 "kompatibler" kontroller drauf ... hat ich
mal, der war dann doch nicht so ganz kompatibel, vor allem beim init

von MArko (Gast)


Lesenswert?

ach so, nach deiner pindeklaration fehlt mir noch

initlcd

von GMB (Gast)


Lesenswert?

Hatte das gleiche Display vorher auch am laufen, also es ist auf jeden
Fall kompatibel, ich vermute ich hab mir das Display "geschossen"
(schon das zweite!), der eine schwarze Knubbel hintendrauf ist einmal
sehr heiß gewesen, als ich das Display direkt am myAVR-Board hatte, und
ich blöderweise den Stecker falschherum drin hatte (+5V direkt an einem
der Dateneingänge etc.), so das ich denke das es jetzt defekt ist!!

Die schwarzen Balken werden aber dennoch angezeigt, Kontrasteinstellung
über Poti funktioniert, aber werde nachher erstmal das von Chris
vorgeschlagene "Prozedere" versuchen. Wobei ich denke das es so nich
geht, PortC ist doch der ADC bei meinem mega8!!!

@Marko: was für ein "initlcd"? In der Bascom-Hilfe ist davon keine
Rede, auch im Code-Beispiel ist kein derartiger Ausdruck.

von MArko (Gast)


Lesenswert?

ich hab mal mit dem befehl n lcd zum laufen bekommen,
warum auch immer. vorher ging nämlich nix

such mal in der Hilfe danach

von Läubi (Gast)


Lesenswert?

Du kannst jeden Pin mit spezilafunktionalität (eben auch ADC pins) als
normale I/Os verwenden.

von GMB (Gast)


Lesenswert?

Das ich PortC als normale Pins verwenden kann wusste ich nicht, aber hab
im Datenblatt mir das ganze mal angesehen, jetzt ist auch klar wie/warum
es geht... ;-)

Werde das alles mal testen, wobei ich mir schon sicher bin das ich das
nächste der Displays geschossen hab...

Naja, erstmal gucken...

von Chris Nöding (Gast)


Lesenswert?

@MArko: "initlcd" wird von den neuen BASCOM-Versionen automatisch bei
Nutzung des "LCD blabla" Befehls erledigt.

@GMB: +5VDC an den Dateneingängen dürfte nix schrotten, da der Atmel
selbst auf den "Datenpins" mit TTL-Pegel (sprich +5VDC) arbeitet.
Kann nur sein, dass du es mit ner statischen Entladung beim Anfassen
geschrottet hast ;)

Sonst hätte ich keine Ideen mehr. LCDs mit BASCOM sind eigentlich
überhaupt kein Problem, egal welchen Pin der Atmels du für die
Ansteuerung nimmst (auch quer Feld ein über PortA - B - C und sogar D
:))

tschautschau!

von GMB (Gast)


Lesenswert?

@ Chris: ja, das habe ich auch gedacht, es lief ja auch vorher alles auf
meiner alten Platine, frag mich nicht warum es jetzt nicht läuft, wie
gesagt, gestern einmal falschherum eingesteckt, keine Ahnung was da
kaputt gegangen sein kann, es sagt nix mehr!

Ich wollte aber eh noch ein neues Display bestellen, dann bestelle ich
mal direkt eins mehr mit (auch wenn's "weh" tut... :-/)

Hab aber auch mal mit Initlcd versucht, extra nochmal vor dem ersten
"Cls", aber hat nix gebracht, es tut sich nix am Display!!

von Marko (Gast)


Lesenswert?

naja, die LCD sind nicht generell unkompliziert
mit Bascom. Ich hab mit dem DIP-204 ziemlich
klimmzüge machen müssen um das zum Laufen
zu bringen (war auch mein Einstieg in die µC-Geschichte).
Das hab ich nur mit nem Lib hier ausm Forum in
Gang gebracht, Bascom hats nicht unterstützt
(speziell die Initalisierung)

von Chris Nöding (Gast)


Lesenswert?

@Marko: ich bezog mich jetzt nur auf die HD44780-LCDs ;-)

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
Noch kein Account? Hier anmelden.