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.
Ein bischen Code wäre hilfreich !!! Es sollte in der Tat mit nem 8 BIT Bus einfacher sein.
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 !?!?
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ß
>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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.