Forum: Mikrocontroller und Digitale Elektronik 8051 und externer Datenspeicher


von Klaus (Gast)


Lesenswert?

Hallo an alle im Forum!

Ich habe schon einige Artikel gelesen die sich mit externen 
Datenspeicher beschäftigen aber fand auf meine frage keine Antwort.

Also erstmal für den Überblick was ich machen möchte.
Ich will mit einem 8051 Derivat eine Platine entwickeln die man dann auf 
ein Steckbrett aufstecken kann.

Das ganze soll für Experimente und Lernzwecken dienen.

Entschuldigt bitte meine etwas ungewöhnlichen fragen aber ich 
Programmiere normalerweis 8051 die mit integrierten Flashspeicher 
ausgerüstet sind.

Jetzt stellte sich mir die frage ob ich noch einen externen 
Datenspeicher anbinden soll oder nicht.
Ich dachte da mal erst an RAM-Speicher oder EEPROM.

Wenn ich den externen Datenspeicher anbinden möchte müsste ich es dann 
in
der sog. Von Neumann-Architektur realieren?

Welchen nutzen hätte ich von einem externen Datenspeicher?

Kann ich in so einem RAM-Speicher Programm ablaufen lassen oder nur 
Temporäre Daten speichern?

Bitte um Konstruktive Kritik und Anregungen.

MfG
Klaus

von Helmut L. (helmi1)


Lesenswert?

>Wenn ich den externen Datenspeicher anbinden möchte müsste ich es dann
>in der sog. Von Neumann-Architektur realieren?


Die brauchst du nur wenn du auch Programme dort laufen lassen willst.

>Welchen nutzen hätte ich von einem externen Datenspeicher?

Groesseren Programm b.z.w. Datenspeicher.
Auch lassen sich so weitere Ports realisieren wo du parallel darauf zu 
greifen kannst

>Kann ich in so einem RAM-Speicher Programm ablaufen lassen oder nur
>Temporäre Daten speichern?

Wie gesagt dann in der von Neumann Architektur.

Gruss Helmi

von Klaus (Gast)


Lesenswert?

@Helmut Lenzen

Vielen Dank für deine Antwort!

Das mit der Porterweiterung hört sich gut an.
Lässt sich das auch parallel mit externen Speicher realisieren?

von peter-neu-ulm (Gast)


Lesenswert?

Bei der 8051-Familie geschieht der Zugriff auf externen Speicher über 
ein gemultiplextes 8-Bit-Port als Daten-Adress Byte von 8 Bit, dazu 
kommen noch mehrere Leitungen eines anderen Port für die höherwertigen 
Bits der Adresse. für den Zugriff auf externen Datenspeicher existiert 
der MOVX - Befehl, bei dessen Ausführung die Signale ALE, RD/WR erzeugt 
werden, mit denen das Adress-Latch und der Zugriff auf das RAM gesteuert 
werden.

Externes RAM wird also ganz schön kompliziert (und auch halb? so 
schnell)

Programm im externen Datenspeicher ist wegen des Zugriffs über MOVX wohl 
nicht möglich.

externes RAM bringt Zugriff auf wesentlich mehr Speicherraum: allerdings 
meist langsamer als beim internen RAM.

Bei der Benutzung des Ports für RAM-Zugriff steht es für andere Nutzung 
nur mit Einschränkungen zur Verfügung.

von Helmut L. (helmi1)


Lesenswert?

Ja sicher geht das. Du musst nur deine Addressdekodierung so auslegen 
das sich für die Ports und das RAM unterschiedliche Addressen ergeben.

Man kann sogar mehr Speicher addressieren als der Prozessor 
Addressleitungen hat . Stichwort Banking.

von Helmut L. (helmi1)


Lesenswert?

>Programm im externen Datenspeicher ist wegen des Zugriffs über MOVX wohl
>nicht möglich.

Doch es geht. Man muss nur die PSEN Leitung mit RD Leitung über ein AND 
Gate zusammen führen.

von Max (Gast)


Lesenswert?

Es gibt auch 8051er mit internen RAM und EEPROM. Und auch welche, wo der 
FLASH (Programmspeicher) während der Laufzeit umprogrammiert werden 
kann, so das man auch ein neues Programm laden könnte. Das Angebot ist 
riesig.
http://www.keil.com/c51/chips.asp

Ein externer RAM kann natürlich auch dran. Die von Neumann Architektur 
schränkt zwangsweise den Adressraum ein, oder Du machst eine Art 
Bank-Switching.

Für Einstieg sind aus meiner Sicht besonders geeignet:
AT89C51ED2, AT89S8253 Atmel
LPC900 Serie, z.B P89LPC922 NXP

Für größere, professionelle Projekt auch schon mal die uPSD3xxx Serie 
von STM.

von Klaus (Gast)


Lesenswert?

Vielen Dank für euere Antworten und nützlichen Hinweisen.

Ich werde erst den Controller auf die Platine mit RS232 bannen und alle
Pins dann rausführen. Ich werde einen AT89C51AC2 verwenden.

Für externe Anbindungen Speicher oder Porterweiterungen werde ich 
seperate
Platinen herstellen um hier flexibler zu sein.

Über weitere Anregungen würde ich sehr freuen.

MfG

Klaus

von Robert T. (robertteufel)


Lesenswert?

> Ein externer RAM kann natürlich auch dran. Die von Neumann Architektur
> schränkt zwangsweise den Adressraum ein, oder Du machst eine Art
> Bank-Switching.
Ich glaube da besteht ein Missverstaendnis. Erstens schraenkt vonNeumann 
den Adressraum nicht ein, sondern die verfuegbaren bits fuer 
Adressierung, also max 16-bit beim 8051, das macht 64 KB max (ohne 
Banking). Das groessere Missverstaendnis ist allerdings zu glauben, dass 
der 8051 auf einer von Neumann Architektur aufbaut, er ist naemlich 
Harvard basierend, Adressraeume fuer Daten und Caode sind grundsaetzlich 
getrennt, bei von Neumann (z.B. ARM7) gibt es aber die Adressen nur 
einmal. Also eine Adresse 0x1000 kann nicht zweimal vorkommen, bei 
Harvard kommt sie aber 2 mal vor, einmal inm Datenbereich und einmal in 
Codebereich.
>
> Für Einstieg sind aus meiner Sicht besonders geeignet:
> AT89C51ED2, AT89S8253 Atmel
> LPC900 Serie, z.B P89LPC922 NXP
Ich mag die LPC900 serien von NXP aber die genannten Typen habe keinen 
externen Bus. Da sollte es schon eher der LPC954 sein, der hat einen 
ext. Bus.


Robert Teufel
-------------------------------------------------
Partner in Silicon Valley gesucht?
Ich stehe gerne zur Verfuegung.
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
http://www.lpc2000.com
http://www.mcu-related.com

von Helmut L. (helmi1)


Angehängte Dateien:

Lesenswert?

Hier mal ein Beispiel für Externes RAM und Eprom am 80x51.
Auch externe Ports sind dort realisiert. Der externe Bus ist durch 
Bustreiber zum Prozessor hin abgetrennt. Am externen Bus sind bis zu 256 
Addressen verfügbar.

Gruss Helmi

von Klaus (Gast)


Lesenswert?

@Helmut Lenzen

Danke für deinen Beitrag. Ich werde den Schaltplan mal Studieren so bald 
ich dazu komme. Sieht auf jedenfall sehr Interessant aus.


MfG
Klaus

von Helmut L. (helmi1)


Angehängte Dateien:

Lesenswert?

Hier noch der Rest des Planes.

Gruss Helmi

von Peter D. (peda)


Lesenswert?

Klaus wrote:
> Das ganze soll für Experimente und Lernzwecken dienen.
>
> Entschuldigt bitte meine etwas ungewöhnlichen fragen aber ich
> Programmiere normalerweis 8051 die mit integrierten Flashspeicher
> ausgerüstet sind.

Dann ist es unsinnig, noch externen SRAM dranzupappen.

Im Gegenteil, für Lernzwecke ist es besser nicht tonnenweise SRAM zu 
haben, damit man lernt zu überlegen und nicht Variablenspeicher nach der 
Gießkannenmethode zuweist, wie es leider unter Windows üblich ist.

Also am besten sogar verschweigen, daß noch 1kB interner XRAM verfügbar 
ist, sondern erstmal nur die 256 Byte benutzen.

Und die freien 18 Portpins kann man viel besser als IO-Ports gebrauchen.
Wenn man die UART zum Flashen abzieht, hast Du also 30 IOs zur Verfügung 
statt nur 12.


> Jetzt stellte sich mir die frage ob ich noch einen externen
> Datenspeicher anbinden soll oder nicht.

Ein klares nein von mir.


Peter

von R. W. (quakeman)


Lesenswert?

@Helmut Lenzen

Wenn mich nicht alles täuscht ist in deinem DM9000 Schaltplan ein 
kleiner Fehler drin. Der Low-Drop Spannungsregler U17 (LM3940) ist 
verkehrt herum eingezeichnet. Der Eingang liegt an 3,3V und der Ausgang 
an 5V. Es müsste aber genau umgedreht sein. Oder die Beschriftung der 
3,3V und 5V daneben ist falsch.

von Helmut L. (helmi1)


Lesenswert?

@Fox Mulder

Gut beobachtet , das hast du recht der ist verkehrt rum eingezeichnet.
Das hatte ich aber schon bei der bestueckung gesehen und den um 180 Grad 
gedreht eingesetzt. Wie gut das der den GND in der mitte hat.

Gruss Helmi

von IGBT (Gast)


Lesenswert?

Hier:
http://www.goblack.de/desy/mc8051chip/bauanleitung/desy535_2cls/cls22schaltplan_komplett.html
ist ein Beispiel, wie man es machen könnte.
Sinnvoll oder nicht...

Gut, dass es heutzutage 8051er µC gibt, wo 62K Flash EEPROM Program 
Memory, 4K Data Flash EEPROM, 2304 Bytes On-chip RAM u.s.w. schon auf 
dem Chip sind.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ist zwar schon ne weile her aber ich habe jetzt meinen µC AT89C51AC2 auf 
eine Platine gebannt.

Es funktioniert auch alles Wunderschön also Programm schreiben Flashen 
und ausprobieren.

Was mich jetzt im Moment interessiert ist, welche Vorrausetzungen man 
benötigt um Programme direkt auf dem µC zu Debuggen.
Also einzelschritte Ausführen über ein Entwicklungstool das direkt mit 
dem µC verbunden ist.

Ich habe zwar schon Beiträge über Bootloader gelesen aber schreiben 
könnte ich bis jetzt keinen.

In manchem Beiträge wird sogar von einem Monitorprogramm geredet aber 
darunter kann ich mir auch nicht wirklich was vorstellen vll. auch ein 
Bootloader?

Kann einer vll. erklären wo die Unterschide sind?

Wie schwierig ist es einen Bootloader selber zu schreiben bzw. welches 
Wissen muss man sich da aneignen?



MFG Klaus

von Ralf (Gast)


Lesenswert?

> Was mich jetzt im Moment interessiert ist, welche Vorrausetzungen man
> benötigt um Programme direkt auf dem µC zu Debuggen.
> Also einzelschritte Ausführen über ein Entwicklungstool das direkt mit
> dem µC verbunden ist.
Im Prinzip ein entsprechendes Debugtool, eine IDE, die die 
Debugfunktionen unterstützt, und natürlich einen entsprechenden µC. Mit 
den C8051Fxxx-Controllern und dem Keil Entwicklungspaket konnte ich da 
schon sehr gute Erfahrungen machen.

> Ich habe zwar schon Beiträge über Bootloader gelesen aber schreiben
> könnte ich bis jetzt keinen.
Dann hast du ihn nicht verstanden. Warum solltest du keinen schreiben 
können?

> Kann einer vll. erklären wo die Unterschide sind?
Ein Bootloader gibt dir die Möglichkeit, die µC-Software direkt in der 
Schaltung ohne Hardware-Tools updaten zu können. Der BL wird anstelle 
des normalen Programms ausgeführt, erhält die neue Version und schreibt 
sie in den Speicher.
Ein Monitor-Programm wird zusätzlich zum normalen Programm gelinkt, und 
gibt dir auf eine Schnittstelle Daten aus, wie z.B. Zustand der 
Register, aktueller Variableninhalt, etc. War früher sehr beliebt, als 
es noch keine Möglichkeit gab, direkt die µC-Hardware debuggen zu 
können.
Hast du dir während einer Software-Entwicklung schon mal Daten (z.B. 
Variablen-Inhalte) auf die serielle Schnittstelle oder ein Display 
ausgegeben? Das ist im Prinzip eine Art Monitor, aber seeeeehr primitiv.

> Wie schwierig ist es einen Bootloader selber zu schreiben bzw. welches
> Wissen muss man sich da aneignen?
Ist eigentlich nicht schwierig - wenn man richtig plant. Du brauchst zum 
einen Wissen darüber, wie dein Controller sich selbst programmieren 
kann, also die entsprechenden Schreib-/Lesefunktionen.
Dann musst du dir Gedanken drüber machen, über welches Protokoll du mit 
dem BL kommunizieren willst, hard- wie softwareseitig. Also RS232, etc. 
und wie die Kommandos für den BL aufgebaut sind, inkl. Fehlerprüfung 
etc.
Wie du den BL aktivieren willst, spielt auch eine Rolle, also über 
Kommando in der normalen Applikation, über Pinzustand beim Reset oder 
immer zuerst nach Reset ausführen etc. Kommt natürlich auch drauf an, ob 
sich dein µC dafür eignet, einige Sachen werden je nachdem besser 
unterstützt als andere.
Du musst sicherstellen, dass der BL sich nicht selber überschreiben 
kann.
Auf der Applikationsseite musst du sicherstellen, dass das Programm dort 
anfängt, wo es der Bootloader erwartet. Sonst läuft es nicht.

Bei einem Standard-8051er ist es so, dass der Programmstart immer bei 
0x0000 anfängt, da bei 0x0003 schon der erste Interruptvektor ist, muss 
man direkt auf den Bootloader springen, der prüft, ob die normale 
Applikation ausgeführt werden soll, oder ob BL-Funktionalität zum Zug 
kommt. Daher muss die Applikation an einer bestimmten Stelle stehen, 
damit der BL dorthin springen kann, wenn die Applikation ausgeführt 
werden soll. Das musst du bei der Software-Entwicklung beachten.
Beim AT89C51ED2 ist es ein bisschen anders, da kannst du zum einen den 
Bootloader über einen Pinzustand beim Reset starten, oder ihn aus der 
Applikation aufrufen (sogar während der Applikation Teile des BL 
verwenden -> API). Über ein spezielles Flash-Register kannst du 
einstellen, wo dein BL startet, und der µC kann bei einem bestimmten 
Pinzustand beim Reset dorthin springen. Vorteil ist, dass deine 
Applikation nicht beachten muss, wo sie steht, sie kann ganz normal bei 
0x0000 starten.
Arbeiten mit Interrupts im Bootloader ist wiederum nicht möglich, da 
sich die Interruptvektoren nicht verschieben lassen, andere 
Architekturen können das wiederum.
Das hört sich jetzt alles recht viel an, ist aber halb so wild, musst 
halt fragen, wenn was unklar ist.

Ralf

von Klaus (Gast)


Lesenswert?

Hallo Ralf!

Danke für deine Ausführliche Antwort.

Weisst Du ob es irgend eine Litaratur gibt  wo man sich selber 
beibringen kann wie so ein Bootloader zu Programmieren ist.

Ehrlich gesagt hätte ich jetzt schwierigkeiten damit Anzufangen, weil 
ich im Moment nicht weiss wo hinten und vorne ist. Mir fehlt zu der 
Materie noch die Theorie wie sowas Prinzipiell ablaufen müsste.

Möcht hier betonen das ich hier nicht um fertige Lösungen betteln möchte 
sondern selber machen möchte.

Wie gesagt hab ich hier noch Startschwierigkeiten.

Mfg

Klaus

von Ralf (Gast)


Lesenswert?

Literatur wirst du kaum eine finden, weil es keinen Universalbootloader 
gibt. Jeder hat so seine Spezialitäten und ist auch immer auf einen 
bestimmten Bedarf zugeschnitten.

> Wie gesagt hab ich hier noch Startschwierigkeiten.
Das ist kein Problem. Zum Start kommst du von ganz allein. Mach dir eine 
Liste von dem, was du brauchst. Also die Funktionen zum 
Schreiben/Lesen/ChipErase etc. Der AC2 hat bereits einen Bootloader, 
soweit ich das sehen kann, also überleg dir, ob du per API-Call die 
entsprechenden Bootloaderfunktionen aufrufen oder eigene machen willst.
Mach dir Gedanken, über welche Schnittstelle das ganze gehen soll (meist 
UART), und mit welchem Protokoll du arbeiten willst. Die Flip-Software 
von Atmel kann mit dem Bootloader kommunizieren.
Wenn du was spezielles brauchst, wie z.B. Verschlüsselung, dann musst du 
das auch beachten.
Wenn du alles aufgelistet hast, dann baust du das Schritt für Schritt 
zusammen, also zuerst mal die Funktionen für den Flash-Zugriff, dann die 
Kommunikation an sich, dann das Auswerten von Kommandos usw.
Mach nicht den Fehler, parallel dazu eine PC-Software entwickeln zu 
wollen, die mit dem BL kommuniziert, das geht meist in die Hose, weil 
man manchmal an der falschen Stelle sucht.
Wenn du z.B. die Liste fertig hast, kannst ja Bescheid sagen. Und das 
Studium der (Bootloader-)Datenblätter von ED2 und AC2 ist sicherlich 
hilfreich.

Ralf

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.