Forum: Mikrocontroller und Digitale Elektronik 8051 LCD Problem und Anschluss am Datenbus


von Tobse (Gast)


Lesenswert?

Hallo,

ich habe mein 4x16 LCD-Display von Reichelt im 4 Bit_Modus erfolgreich
zum Laufen gebracht (Seit Wochen 1A Funktion). Nun möchte ich es aber im
8 Bit-Modus nochmals versuchen (was eigentlich leichter sein sollte, da
man nix hin und herschieben muss), weil ich es später in den Datenbus
vom At89c51 hängen möchte. Angeschlossen ist es 1:1 am P0 (Open-Drain
10K Pullups nicht vergessen)Steuerleitungen sind RS P3.4 ; R/W P3.5 ;
Enable P3.3 .
Voerst wollte ich über diese 3 SteuerPins meine neuen Funktionen fürs
Display testen und es dann später über den Adressbus ansprechen.
Ich muss das so machen, weil ich externen Speicher anschliessen möchte
(4 Mbit SRAM drei zusätzliche Pins für kompl. speicher/Adressbereich
werden benötigt) und keinen freien Port mehr zur Verfügung habe.Es gehen
außerdem Pins für I2C-Anscluss drauf und eine Impulsmessung mit dem PCA.

Ich versteh an dieser Stelle nicht, wieso ich das LCD nicht zum Laufen
kriege. Sind die Timings anderst als beim 4 Bit-Modus. Ich hatte kurz
mal meinen Testtext, aber erst nachdem ich hundertmal die Resettaste
gedrückt hatte. Mit den Timings hab ich schon rumgespielt. Habe
außderdem noch Pullups für die Datenleitungen auf der LCD-Platine
eingelötet, da das Flachbandkabel etwas länger ist (ca 40 cm). Die
Signale kommen laut meines Oszis sauber an.

Wenn jemand ne Idee hätte wäre ich recht dankbar.

Ich hätte da noch ein weiteres Anliegen. Wie kann ich den  Adressbus
erweitern (normal max. 64K -->16 bit Adresse, brauche aber mehr)? D.h.
wie erklär' ich es dem Atmel (Bankumschaltung?), dass er mehr Speicher
adressieren zu hat?. Ich benutze den AT89C51ED2 in DIL40-Version und die
4k  Demoversion des Raisonance Kit 51.

Ich bin mit den Nerven am Ende.
Ich hoffe auf eure Hilfe.

von Joe (Gast)


Lesenswert?

Ein bischen Code wäre hilfreich !!!

Es sollte in der Tat mit nem 8 BIT Bus einfacher sein.

von Tobse (Gast)


Lesenswert?


von Joe (Gast)


Lesenswert?

Also, vielleicht einfach mal der Reihe nach.

3x 0x38 und je 4,1 mSec. warten, dann
entry_mode und wieder 4,1 mSec. warten.
clear_display und dann cursor_home also 0x01 sowie 0x02.

Ich gehe mal davon aus das EA deines MC's an VCC ist ? Wie willst du den 
Speicher ansprechen, häng mal noch nen Schaltplan rein. Wenn EA an Masse 
ist (weil BUSbetrieb) dann hast du ein Problem. Also, wie sieht deine 
Speicherkonfiguration aus ?

An P0 hängt ja nun nicht nur das Display !?!?

von Tobse (Gast)


Lesenswert?

Also, der EA MUSS so lange kein EEprom angeschlossen ist auf VCC. Damit 
er den  Programmbeginn nicht bei 0000h im EEProm sucht. Das ist nicht 
das Problem. Obwohl ich das LCD am P0 angeschlossen hab und ich noch 
nicht im Busbetrieb bin sollte, ich das LCD ganz normal im 8 Bit Betrieb 
schalten können.
Der Busbetrieb sollte erst später kommen, wenn ich weiss dass das LCD 
läuft.
Ich glaub auch nicht, dass mein Latch die Spannung runterzieht, da es 
noch nicht aktiv ist. Außerdem seh' ich doch die Signal mit dem 
Speicheroszi.
Ich versuch jetzt zum allerletzten mal deinen Tip zu Initialisierung des 
LCD's und danach schmeiss ich's ausm Fenster.

Was denn Speicher betrifft, wissen wir ja alle wie er angeschlossen 
wird.
Nur wie ich dem Mikro verklickere, dass er weiss, dass er Speicher 
anhängen hat, weiss ich nicht. Außerdem möchte ich mehr als die üblichen 
64k ansprechen, d.h ich muss 3 Pins von nem anderen Port entleihen. Nur 
wie ich die dann in den Adressbus einfüge, sprich programmiere, da 
brauch ich Hilfestellung.

Gruß

von holger (Gast)


Lesenswert?

>Außerdem möchte ich mehr als die üblichen
>64k ansprechen, d.h ich muss 3 Pins von nem anderen Port entleihen. Nur
>wie ich die dann in den Adressbus einfüge, sprich programmiere, da
>brauch ich Hilfestellung.

Ganz einfach: Das Banking der 64kB Blöcke musst du selbst
erledigen. Also Portpins für die jeweilige Bank setzen.
Das adressieren innerhalb der 64kB Blöcke macht dann
der Adressbus.

So klappte das bei mir vor einigen Jahren jedenfalls
mit einem 29F040 an 8051.

von Joe (Gast)


Lesenswert?

Tobse,

ich weiß wie es geht ;-)) Dir muß man allerdings alles aus der Nase 
ziehen. Dein C Code ist nicht sehr überzeugend und daher schließe ich 
das du Anfänger bist. Daher auch mein Nachfragen.

Also, nichts für ungut.

von Sigint 112 (sigint)


Lesenswert?

Hi Tobse,
  du scheinst dich nicht 100% mit der 8051er Architektur auszukennen, 
sonst würdest du nicht fragen wie der µC erkennt das externer Speicher 
vorhanden ist. Beim Programmspeicher kannst du mit EA ja auswählen, aus 
welchem Speicher das Programm heraus ausgeführt werden soll. Wenn du 8k 
internem Programmspeicher hast, dann werden dafür keine Zugriffe auf dem 
externen Speicherinterface erzeugt. Erst für Adressen nach diesen 8k 
wird der externe Programmspeicher angesprochen. Beim XRAM ist das 
ähnlich: Im Register AUXR gibt es das Bit EXTRAM mit dem man den 
internen XRAM ausschalten kann und dann auf den gesamten externen XRAM 
zugreifen kann.
Im Datenblatt steht alles schön erklärt.

Zum Thema LCD:
  Es ist möglich das Display "Memory Mapped" zu betreiben, allerdings 
hast du dann entweder einen relativ großen Speicherbereich verschenkt 
oder eine komplexere Adresslogik. Ich persönlich würde das Display mit 
einem Schieberegister ansteuern oder im 4Bit Modus direkt an einen Port 
hängen.

Gruß,
  SIGINT

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.