Forum: Mikrocontroller und Digitale Elektronik Habe ich die Theorie von Mikrocontroller richtig verstanden?


von Pera P. (pera91)


Lesenswert?

Hallo zusammen

Ich habe ein wenig mit der Theorie von Mikrocontroller beschäftigt. 
Könnt ihr es überprüfen, ob ich es verstanden habe?

Vorgang
über Eingabeport kommen die Signal rein, die Signale werden über den 
Datenbus direkt ins Rechenwerk weitergeleitet. Der CPU (Rechenwerk) 
wandelt die Signale in Nummer und sendet die Nummer an den 
Programmcounter. Der Programmcounter sucht anhand der Nummer (Adresse) 
den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden 
zusammenrechen) und gibt es an den Befehlsinterpeter, der den Befehl 
entsprechend umwandelt. Dann schickt der Befehlsinterpreter den Befehl 
in den Rechenwerk, wo die Operationen durchgeführt wird. Die aktuelle 
Zahlenwerte der Operation werden in den Register (Akkumulator) 
gespeichert. Falls es zwischenergebnisse gibt, landen die in den 
Datenspeicher des Mikrocontroller. Die Zwischenergebnisse werden 
adressiert im Datenspeicher gelegt, die Nummer der jeweiligen Ergebnisse 
liegen im Programmcounter.

*Adressbus:* Über diesen Bus laufen alle Adresse (Nummer).
*Datenbus:* Alle Daten gehen über diesen Bus
*Steuerbus:* Er steuert oder organisiert alle Büsse, ist quasi der 
Verkehrspolizist auf der Büsse.


Stimm das etwa, wenn nicht würde ich auf Antworten und Kritik freuen 
:-).

Gruss
Pera

von Georg A. (georga)


Lesenswert?

Was du beschreibst, ist das von Neumann'sche Rechnermodell. Das gilt 
auch für Microcontroller, eigentlich aber für fast alles, was heute 
Programme ausführen kann.

http://de.wikipedia.org/wiki/Von-Neumann-Architektur

von (prx) A. K. (prx)


Lesenswert?

Pera Panchan schrieb:
> Theorie von Mikrocontroller

Die gibt es? ;-)

Microcontroller sind einfach bloss Rechner wie andere auch. Die 
Abgrenzung ist formal ziemlich schwierig, weil manche Leute auch einen 
Quadcore mit Gigabytes an Speicher und Linux drauf noch als 
Microcontroller sehen, wenn damit nur irgendwelche automatischen 
Steuerungen erfolgen, während andere diesen Begriff auf vollintegrierte 
selbständige Chips beschränken.

> über Eingabeport kommen die Signal rein, die Signale werden über den
> Datenbus direkt ins Rechenwerk weitergeleitet. Der CPU (Rechenwerk)
> wandelt die Signale in Nummer und sendet die Nummer an den
> Programmcounter.

> Der Programmcounter sucht anhand der Nummer (Adresse)
> den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden
> zusammenrechen) und gibt es an den Befehlsinterpeter, der den Befehl
> entsprechend umwandelt.

Bis hierhin sind wird ungefähr beim Konzept von Interrupts.

> Die Zwischenergebnisse werden
> adressiert im Datenspeicher gelegt, die Nummer der jeweiligen Ergebnisse
> liegen im Programmcounter.

Aber das ist ziemlich schräg. Weshalb sollte der program counter 
irgendwas mit der Datenadressierung zu tun haben?

von Korrektor (Gast)


Lesenswert?

Hallo zusammen,

ich habe mich ein wenig mit der Theorie hinter dem Mikrocontroller 
beschäftigt.
Könntet ihr bitte überprüfen, ob ich das unten Zusammengefasste soweit 
richtig verstanden habe?

Vorgang der Datenverarbeitung:
Über einen Eingabeport kommen die Signale rein, werden über den
Datenbus ins Rechenwerk weitergeleitet und in der CPU verarbeitet.
Die CPU (Rechenwerk) wandelt die Signale in "Zahlen" und sendet diese an 
den Programmzähler (program counter).
Dieser sucht nun anhand der aus dem Signal erhaltenen Zahl
den jeweiligen Befehl aus dem Programmspeicher (z.B. 3 = zwei Summanden
zusammenrechnen) und gibt diesen Befehl an den Befehlsinterpreter, der 
den Befehl entsprechend umwandelt. Dann schickt der Befehlsinterpreter 
den Befehl in das Rechenwerk, wo die Operationen durchgeführt werden.
Die aktuellen Zahlenwerte der Operation werden in einem Register 
(Akkumulator) gespeichert.
Falls es Zwischenergebnisse gibt, landen diese im Datenspeicher des 
Mikrocontrollers.
Die Zwischenergebnisse werden adressiert im Datenspeicher abgelegt, die 
zugehörige Adresse der jeweiligen Ergebnisse liegen im Programmzähler.

*Adressbus:* Über diesen Bus laufen alle Adressen.
*Datenbus:* Alle Daten gehen über diesen Bus
*Steuerbus:* Er steuert oder organisiert alle Busse; ist quasi der
Verkehrspolizist auf dem Bus.


Stimmt das etwa?
Wenn nicht, würde ich mich über Antworten und Kritik freuen :-).

Gruss
Das geht sonst nicht!

von (prx) A. K. (prx)


Lesenswert?

Korrektor schrieb:
> Das geht sonst nicht!

So gehts aber auch nicht. Was posten angeht.

von Pera P. (pera91)


Lesenswert?

@Geoarg A.
Danke für den Link. Aber schlauer als vorher bin ich immer noch nicht 
:-(.

@A.K.
sry. habe ich wohl falsch beschrieben.
Also der Programmcounter oder Befehlszähler besitzt die Tabelle mit der 
Adresse und dazugehörende Befehle/Ergebnisse. So meinte ich.
Wenn er die Tabelle nicht hat, wie soll er wissen, welche Nummer er als 
nächstes ausführen soll?

Die Tabelle sähe dann so aus:
Dstenspeicher
334   =  234.34
367   = 10
..

Programmspeicher
3 = Multipliziere zwei Zahlen
10 = Subtrahiere 4
...

Oder liege ich da falsch?

von (prx) A. K. (prx)


Lesenswert?

Pera Panchan schrieb:
> Wenn er die Tabelle nicht hat, wie soll er wissen, welche Nummer er als
> nächstes ausführen soll?

Was tut ein Zähler? Hochzählen beispielsweise. Auf den Befehl an der 
Adresse 10 folgt der Befehl an der Adresse 11. Es sei denn, der Befehl 
an 10 war ein ausgeführter Sprungbefehl nach beispielsweise Adresse 20.

von res (Gast)


Lesenswert?

Wenn Du tieferes Verständnis erlangen möchtest, könnte Dir vielleicht 
folgender Link (und ausreichend Zeit ;-)) helfen:
http://www.nand2tetris.org/

von Martin V. (oldmax)


Lesenswert?

Hi
Jetzt sag nicht, du willst einen Controller nachbauen? Ansonsten versteh 
ich deine Probleme nicht. Klar, ein Controller hat einen 
Programmcounter. Der Adressiert Speicherzellen, wo binärcodierte Befehle 
hinterlegt sind. Er holt nun einen Befehl nach dem anderen, decodiert 
sie und führt sie aus. Dabei muss er natürlich auch schon mal auf Daten 
oder Pripherie zugreifen.
In der Regel gibt es drei Busse: Datenbus, Adressbus und Steuerbus.
So, wo ist jetzt dein Problem? Der Programmcounter adressiert den 
Speicher. Der Steuerbus sagt "Lesen". Die Daten werden auf den Datenbus 
gelegt. Der Programmcounter erhöht und der Befehl ausgeführt. Und das 
macht er, bis du ihm den Saft entziehst.
Gruß oldmax

von Udo S. (urschmitt)


Lesenswert?


von Stefan (Gast)


Lesenswert?

> Die CPU (Rechenwerk) wandelt die Signale in "Zahlen"

Das ist übrigens falsch. Die Umwandlung von einem Signal in eine Zahl 
findet in der Peripherie der CPU statt, z.B. in einer Soundkarte, die 
dazu mit A/D Wandlern bestückt ist.

Die CPU unterscheidet prinzipiell nicht zwischen Zahlen und anderen 
Daten. Alle mir bekannten CPU's verarbeiten Daten in numerischer Form - 
auch Buchstaben.

A=65
B=66
C=67
usw.

Wenn die CPU den Wert 65 verarbeitet, weiß sie selbst nicht, ob es sich 
dabei um einen Buchstaben, oder um die Zahl oder um etwas ganz anderes 
(z.B. ein Stück Musik) handelt.

Nur spezialisierte Recheneinheiten, z.B. für Fließkomma-Arithmetik 
wissen, mit was für eine Art von Daten sie arbeiten, weil sie eben dafür 
spezialisiert sind.

von Stefan (Gast)


Lesenswert?

Ich würde die Grundsätzliche Arbeitsweise einer CPU anders 
zusammenfassen:

Die CPU enthält einen Programmzähler. Dessen Wert wird über den 
Adressbus an den Programmspeicher übertragen. Der Programmspeichert 
liefert daraufhin über den Adressbus einen Befehl, der von der CPU 
ausgeführt wird.

Jede CPU hat einen Befehlssatz, wo bestimmten Zahlen bestimmte 
Operationen zugewiesen sind. Zum Beispiel:

0 = tu nichts
1 = Springe zu Adresse x
2 = Addiere x zum Register A
3 = Springe zu Adresse x, wenn die vorherige Addition 0 ergab
4 = Lade ein Byte von Port x in register A
5 = Gib ein Byte von Register A auf Port x aus

Die Steuereinheit reagiert auf diese Befehle. Wenn es sich um eine 
Operation handelt (wie 2), überträgt sie den befehl zur ALU, welche die 
Operation durchführt. Ansonsten prüft sie Bedingungen, verändert den 
Programmzähler entsprechend oder sendet Signale an die Peripherie, damit 
Daten übertragen werden.

Register dienen der temporären Ablage von Daten. In der Regel finden 
Operationen mit Registern statt. Zum Beispiel lädt man eine Zahl in ein 
Register, addiert dann einen Wert zum Register und speichert dann das 
Ergebnis irgendwo anders.

Befehle für Ein/Ausgabe (oben 4 und 5) nutzen meistens den Adressbus und 
den Datenbus, sowie separate Steuerleitungen, um externe Peripherie 
anzusprechen. Bei Mikrocontrollern sind die I/O Schnittstellen jedoch 
oft zusammen mit der CPU in einem Chip integriert, so dass der 
Adress-Bus eventuell nicht verwendet wird.

Im einfachsten Fall hat eine CPU nur drei Register:

Akkumulator
Programzähler
Status Register

Das Status Register gibt darüber Auskunft, wie eine vorherige Operation 
abgelaufen ist: z.B. ob sie Null ergeben hat oder ob ein Überlauf 
stattgefunden hat. Zahlreiche bedingte Operationen (zB. Springe, wennn 
...) nutzen diese Flags.

von Udo S. (urschmitt)


Lesenswert?

Stefan schrieb:
> Die CPU enthält einen Programmzähler. Dessen Wert wird über den
> Adressbus an den Programmspeicher übertragen. Der Programmspeichert
> liefert daraufhin über den Adressbus einen Befehl, der von der CPU
> ausgeführt wird.

Ziemlich falsch:
Der PC zeigt auf die Adresse des Befehls der als nächstes decodiert 
werden wird. Dieser Wert wird an den Adressbus des Programmspeichers 
angelegt um den Befehlscode aus dem Programmspeicher zu lesen.
Der Befehlscode wird über den Datenbus vom Programmspeicher 
bereitgestellt, nicht über den Adressbus.

Weiter hab ichs mir nicht angeschaut, aber ehe man solche Fehler 
einbaut, sollte man einfach die Wikipedia Artikel lesen und versuchen zu 
verstehen.

von Stefan (Gast)


Lesenswert?

Ja natürlich, war ein Tippfehler. Eine meinte den Datenbus.

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.