mikrocontroller.net

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


Autor: Tobse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bischen Code wäre hilfreich !!!

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

Autor: Tobse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !?!?

Autor: Tobse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht 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

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.