Hallo liebe Gemeinde, ich muss mich für ein Referat (Allgemeines über Atmel 8bit-AVR's) vorbereiten und stöberte bereits im Netz und in diversen Büchern. Über eine Sache bin ich aber gestolpert: Ich behandle nur die 8bit-AVR's. Zur Architektur habe ich gefunden, dass diese Chips laut Wikipedia die Harvard-Architektur benutzen, sprich getrennter Befehls- und Datenspeicher. Soweit ist es noch überschaubar, aber wenn ich mir die Speicheradressen durchsehe, komme ich durcheinandner. Bei einem Atmega8 ist der Adressbus vom FLASH 16bit breit, Register, I/O, SRAM und EEPROM jedoch 8bit breit. Warum ist der Adressbus vom FLASH 16bit breit? Es handelt sich doch um einen 8-Biter! Auf einer anderen Seite im Netz habe ich gelesen, dass der interne Adressbus vom SRAM zum Program Counter, FLASH Program Memory, Instruction Register und Instruction Decoder in 16bit ausgeführt ist, obwohl das General Purpose Register doch nur 8bit breit ist. Direkte Adressierung wird in 8bit-Breite vorgenommen. Oh man, mir wird schwindelig! Ist das soweit richtig? Kann mir bitte mal jemand trotzdem genauer erklären, welcher Adressbus 16bit und welcher 8bit breit ist und warum das so gemacht wird? In diesem Zuge frage ich mich auch, wie groß das größte externe EEPROM bei einem ATmega8 sein kann. Eigentlich kommt es doch nur drauf an, wieviele Pins man für den Daten- und Adressbus zur Verfügung hat, oder? Nehmen wir mal an, ich habe 20 Pins frei (Steuerleitungen vernachlässigt). Der Datenbus ist 8bit breit, somit habe ich nur noch 12 Pins für den Adressbus zur Verfügung. Demnach kann ich ein EEPROM mit maximal (2^12)x8, also 4k x 8bit anschließen, richtig? Danke, es grüßt der Tino!
Tino M. schrieb: > Bei einem Atmega8 ist der Adressbus vom FLASH 16bit breit, Register, > I/O, SRAM und EEPROM jedoch 8bit breit. Warum ist der Adressbus vom > FLASH 16bit breit? Es handelt sich doch um einen 8-Biter! Frag dich mal, was für Inhalte der Adressbus transportiert und wieviele Bits man dafür benötigt. Tip: Beim Mega8 sind es mehr als 8 und weniger als 16. > Instruction Register und Instruction Decoder in 16bit ausgeführt ist, > obwohl das General Purpose Register doch nur 8bit breit ist. Und schau man in die Befehlssatzbeschreibung, wieviele Bits eines oder mehrerer Register bei indirekter Adressierung über Register verwendet werden (also Adressierung über die X/Y/Z-Register). > Ist das soweit richtig? Vom Verständnis her kein bischen. Du scheinst noch keinerlei Vorstellung davon zu haben, was Adressen und was Daten sind. > In diesem Zuge frage ich mich auch, wie groß das größte externe EEPROM > bei einem ATmega8 sein kann. Unbegrenzt, wenn man es seriell anschliesst ;-).
Toll, A. Ak.! :( A. K. schrieb: >> Ist das soweit richtig? > Vom Verständnis her kein bischen. Du scheinst noch keinerlei Vorstellung > davon zu haben, was Adressen und was Daten sind. Sicherlich ist bekannt, was Adressen und Daten sind. Eine Adresse gibt an, wo die Daten liegen. Die Daten findet man an der Adress-Stelle. Jede Adresse kann doch beim ATmega8 Bit aufnehmen?! Wenn man nun ein 16bit-Datum speichern möchte, muss ich dieses Datum in ein LSB und MSB aufteilen und entsprechend an zwei Adressen speichern. Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl kaum hier im Forum fragen, oder? Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! :(
Tino M. schrieb: > Jede Adresse kann doch beim ATmega8 Bit aufnehmen?! Vielleicht verstehst du es ja so: Jede Speicherstelle kann 8 Bit an Daten aufnehmen, wieviele Speicherstellen angesprochen werden können hängt davon ab, wieviele Bit die Adresse aufnehmen kann. Tino M. schrieb: > Sicherlich ist bekannt, was Adressen und Daten sind. Die Definition gehört zu haben bedeutet nicht, sie verstanden zu haben. Tino M. schrieb: > Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell > anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! > :( Auf die Schnelle habe ich Speicher in DIL32 gefunden, die belegen rund 620mm².
Aufgrund der Harvard-Architektur muss man erst mal zwischen Programmspeicher (Flash) und Datenspeicher (SRAM) unterscheiden. Das Flash hat eine Datenbusbreite von 16bit, da die Befehle 16bit breit sind (in 8bit würde man nicht genügend unterbringen können, da auch teilweise die Operanden mitcodiert werden). Die Adressbusbreite richtet sich nach der Speichergröße. Das SRAM hat 8bit Datenbusbreite (und hierüber erfolgt die Einstufung als 8bit-System!), die Adressbusbreite richtet sich auch hier nach der Speichergröße.
Tino M. schrieb: > Sicherlich ist bekannt, was Adressen und Daten sind. > Eine Adresse gibt an, wo die Daten liegen. Und, was hat das jetzt damit zu tun, dass der AVR ein 8-Bit Prozessor ist? In ein Einfamilienhaus passen maximal 4 Leute. Aber in einer Strasse können Millionen von Einfamilienhäuser stehen. Jedes mit seiner eigenen Adresse, die natürlich größer als 4 sein kann. > Die Daten findet man an der Adress-Stelle. > Jede Adresse kann doch beim ATmega8 Bit aufnehmen?! Nö Der AVR kann 8-Bit an Daten in einem Rutsch verarbeiten, wobei es ein paar Ausnahmen gibt, aber im wesentlichen sind die Daten auf jeweils 8 Bit limitiert. Aber das heißt ja nicht, dass er sich diese 8_bit nicht auch aus einem Terrabyte großen Speicher holen kann, wenn die Adressregister nur groß genug sind.
Tino M. schrieb: > Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl > kaum hier im Forum fragen, oder? Man könnte ja auch Google benutzen ... > Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell > anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! > :( Ja du ganz ehrlich - so ist es aber. Man kann alles anschließen soweit eine Schnittstelle vorhanden ist. Ich würde hier nicht anfangen den großen Macker zu markieren. Da bist du nämlich hier definitiv falsch. Und schon garnicht wenn ich keine Ahnung habe (wie jeder Anfänger). Ich warne dich nur - du wirst hier gnadenlos zerlegt ... Hier im Forum ist dein 'Status' wichtig. Glaube mir als Anfänger hat man hier einen ziemlich schlechten. Lass dich nicht ärgern aber mach bloss keinen auf dicke Hose. Das könnnen wir hier nämlich garnicht haben. Und bitte unterlasse wüste Beschimpfungen (vielleicht mir) und anderen gegenüber. Gleiches gilt für süffisante Kommentare (z.B. 'Klugscheißer' und sowas).
Hi, > Warum ist der Adressbus vom > FLASH 16bit breit? Es handelt sich doch um einen 8-Biter! Also ... Die Breite des Adressbus gibt an, auf wie viele Adressen die CPU zugreifen kann. Die Breite des Datenbus gibt an, auf wie breit die Daten sein können, mit der die CPU arbeiten kann. Vorab: 2^8 = 256 2^16 = 65535 Beim AVR sind die Daten, die in der CPU verarbeitet werden können, 8 Bit breit (Wie das für Adresspointer aussieht, weiss ich gerad nicht, glaub der berechnet L, H getrennt). D.h., es wird mit 8Bit breiten Daten gerechnet. Der Adressbus beim selbigen ist etwas grösser, nämlich 16Bit. D.h., der AVR ist in der Lage, 64k Adressen zu bearbeiten. Soll heissen, der AVR kann von 64k möglichen Adressen jeweils 8Bit Daten holen oder wegschreiben. --- Das Dingen ist Havard Architektur. Das wiederum bedeutet, dass die CPU zwei Interfaces hat, jeweils aus Daten- und Adressbus bestehend: - Programmspeicher (Flash) - Datenspeicher & Peripherals Er kann diese "gleichzeitig" bearbeiten, es treten keine 'Stalls' auf, wenn z.B. Mem geschrieben (Write Back) und der nä. Befehl (Instruction Fetch) geholt werden soll. Das ist aber auch der Grund, warum Daten, die im Flash abgelegt wurden, mit PROGMEM gelesen werden müssen. So, nun hab ich mich auf die Schnelle hoffentlich nirgends vertan :-) VG, /th.
Tino M. schrieb: > Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell > anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! Die weitaus meisten an Mikrocontroller extern angeschlossenen EEPROMs sind tatsächlich serielle Typen. Parallelen EEPROMs begegnet man fast nur noch in Altlasten und in der Lehre. Wenn dir mein Stil, Leuten bei solchen Fragen eher beim Selberdenken zu helfen, indem die Richtung aber nicht das fertige Ergebnis geliefert wird, dann ignoriere es eben. Gleich rumzukotzen, wenn man auf die Frage keinen direkt fürs Referat verwendbaren Text geliefert bekommt, geht nämlich wiederum mir auf den Sack.
@Uwe... Danke für die Erklärung, die ist schlüssig. Neu ist für mich, dass die Einstufung der Systeme vom SRAM abhängig ist. @Karl heinz Buchegger Wenn der AVR auf eine Adresse zugreifen kann, kann dieser die 8 Bit in einem Rutsch dort rausholen, soweit richtig? @Lehrmann Michael Tino M. schrieb: >> Wenn ich bereits die Antwort auf meine Fragen wüsste, würde ich wohl >> kaum hier im Forum fragen, oder? Lehrmann Michael schrieb: > Man könnte ja auch Google benutzen ... 1. Wenn man weiß, WONACH man suchen muss, ist das nicht schwierig. Wie würdest du nach Warentrenner suchen, wenn du nicht wüsstest, dass die so heißen? Mit einer Umschreibung, die nicht jeder verstehen muss/wird. 2. Wenn ich den großen Macker markieren würde, würde ich schreiben, dass ich alles weiß und eure Antworten falsch sind. Das habe ich nie behauptet, aber ein Anfängerstatus ist gefühlsmäßig mit einem gesteinigt werden zu vergleichen. Ich glaube, viele Profis lesen sich die Fragetexte nicht durch und antworten einfach drauf los, so dass sich ein Anfänger in die Enge getrieben fühlt. Das ist nicht Sinn eines Forums. Anfänger haben es nicht leicht mit der Begriff-Findung. Einen Begriff, den man nicht weiß, kann man wunderbar um/beschreiben und jeder, der die Beschreibung liest, interpretiert etwas anderes heraus. Das ist nun mal so, wenn man Anfänger mit Profis vergleicht. Vielleicht sollten sich Profis zurückerinnern, dass diese auch mit Problemen angefangen haben. Wer etwas anderes behauptet, der lügt. Achja, Artikel 5 GG ist überall vertreten. Ich habe niemanden direkt angesprochen, sondern meine Meinung geäußert! @Random... Das klingt interessant, was du beschreibst! Durch die Havard-Architektur ist es also möglich gleichzeitig zu lesen und zu schreiben?! @A. K. A. K. schrieb: > Gleich rumzukotzen, wenn man auf die Frage > keinen direkt fürs Referat verwendbaren Text > geliefert bekommt... Darum geht es doch nicht! Wenn ich noch nichts vorbereitet hätte, hätte ich im Fragepost nur geschrieben: "Hallo Leute, erklärt mir doch mal, wie die Architektur bei einem AVR ist. Ich habe nämlich keine Ahnung, ob die Dinger 8, 16 oder 32-Biter sind"!. Sowas ist doch nicht im Sinne eines Forums, das ist klar. Da ich schon etwas ausgearbeitet habe und mir ein paar Sachen unklar sind, habe ich gedacht, ich frage hier mal in die Runde und gebe meinen Kenntnisstand mit an. Anscheinend darf man hier seinen Kenntnisstand nicht angeben und wenn man was fragt, sollte man es so formulieren: "Hey Leute, ich bin Profi-Programmierer, bin seit 34 Stunden auf den Beinen, halte mich mit 5 Liter Kaffee wach und irgendwie habe ich nun ein Brett vorm Kopf. Ich kann mich an die ADC-Routinen nicht mehr erinnern, kann mir einer ein Programm in C schreiben?! Danke!". lach @ll Ich möchte doch nur die Unklarheit beseitigen, und ohne eure Hilfe geht es nicht. Dieses Forum "lebt" doch von Anfängern und Profis gleichermaßen!
Tino M. schrieb: > @Uwe... > Danke für die Erklärung, die ist schlüssig. > Neu ist für mich, dass die Einstufung der Systeme vom SRAM abhängig ist. Du legst hier etwas zuviel Gewicht darauf. Für die Einstufung ist in erster Linie entscheidend, mit welcher Datenbreite in der CPU gerechnet werden kann, wie breit die Register in der CPU sind. Dort entscheidet sich die Einstufung. Der Transfer zum Speicher, ob der jetzt auf einem 8-Bit oder einem 16-Bit Datenbus passiert, ist normalerweise nicht das entscheidende Kriterium. Also: Kann die CPU 2 Zahlenwerte addieren, und zwar in einem Rutsch addieren, wenn beide Werte 16 Bit breit sind, oder muss sie das auf 2 mal machen, weil es nur 8 Bit breite Register bzw. Additionsbefehle die nur 8 Bit bearbeiten gibt. > @Karl heinz Buchegger > Wenn der AVR auf eine Adresse zugreifen kann, kann dieser die 8 Bit in > einem Rutsch dort rausholen, soweit richtig? Ja. Aber wie gesagt: Das ist meistens nicht das entscheidende Kriterium für die Einstufung einer CPU. Speicher-Bottlenecks kann man mit Caches entschärfen. Berechnungen auf mehrmals, wegen nicht ausreichender Reigsterbreite aber nicht. Wobei es nicht gilt, wenn die CPU ein paar Spezialbefehle hat, die mit höheren Bitzahlen umgehen können. Entscheidend ist, wenn man sich den Befehlssatz ansieht, wie es mit der Mehrzahl der Befehle aussieht. Und bei einem AVR kann die Mehrzahl der Befehle eben nur 8 Bit Einheiten in einem Rutsch bearbeiten. Für mehr Bits sind mehrere Befehle nötig.
Tino M. schrieb: > Und diese Klugscheißerantworten à la "Unbegrenzt, wenn man es seriell > anschliesst ;-)" gehen mir und anderen Anfängern tierisch auf den Sack! > :( Es gibt keine dummen Fragen, nur dumme Antworten. Du hast im Gegenzug nun auch davon Eine abgeliefert - ihr seid quitt ;) A. K. schrieb: > Gleich rumzukotzen, wenn man auf die Frage > keinen direkt fürs Referat verwendbaren Text geliefert bekommt, geht > nämlich wiederum mir auf den Sack. Full ACK!
Tino M. schrieb: > @Random... > Das klingt interessant, was du beschreibst! > Durch die Havard-Architektur ist es also möglich gleichzeitig zu lesen > und zu schreiben?! Nicht in den gleichen Speicher, das sollte klar sein. Aber Flash und SRAM parallel würde gehen. Ob man das auch macht ist eine andere Geschichte. Denn deswegen macht man keine Harvard Architektur. Man macht sie um eine saubere Trennung zwischen Daten und Programm zu haben. Damit ein Programm sich nicht so ohne weiteres selbst im Programmspeicher rumpfuschen kann.
> In diesem Zuge frage ich mich auch, wie groß das größte externe > EEPROM bei einem ATmega8 sein kann. Eigentlich kommt es doch nur > drauf an, wieviele Pins man für den Daten- und Adressbus zur > Verfügung hat, oder? > Nehmen wir mal an, ich habe 20 Pins frei (Steuerleitungen > vernachlässigt). > Der Datenbus ist 8bit breit, somit habe ich nur noch 12 Pins > für den Adressbus zur Verfügung. Demnach kann ich ein > EEPROM mit maximal (2^12)x8, also 4k x 8bit anschließen, > richtig? Nein falsch. Du kannst ja zb auch einen Pin spendieren, um der externen Hardware anzuzeigen: jetzt liegt der High-Anteil von der Adresse auf den 11 Adressleitungen, bzw. jetzt der Low-Anteil. Du machst also ein Multiplexing auf dem Adressbus. Dadurch hast du 22 Adressleitungen bekommen und kannst etwas über 4MByte adressieren. Und ja. Sowas hat man schon gemacht. Es gibt auch noch andere Mischformen: Wo sich Adress und Datenbus die gleichen Leitungen teilen. Erlaubt ist, was gefällt und was umsetzbar ist. Alles nur eine Frage der Organisation.
Tino M. schrieb: > man was fragt, sollte man es so formulieren: "Hey Leute, ich bin > Profi-Programmierer, bin seit 34 Stunden auf den Beinen, halte mich mit > 5 Liter Kaffee wach und irgendwie habe ich nun ein Brett vorm Kopf. Ich > kann mich an die ADC-Routinen nicht mehr erinnern, kann mir einer ein > Programm in C schreiben?! Danke!". *lach* Der würde aber hier was zu hören bekommen. Ebenfalls lach
Karl heinz Buchegger schrieb: > Es gibt auch noch andere Mischformen: Wo sich Adress und Datenbus die > gleichen Leitungen teilen. ...z.B. wie beim alten 8051 mit einem externen Latch... Noch mal eine Frage zur Harvard-Archtitektur und internen Adressleitungen im AVR: Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl 16. Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen sind dort vorhanden? Auch 16? Oder kommt das auf dem Controller-Typ an? Soweit, wie ich das verstanden habe, werden intern 16 Adressleitungen verwendet, weil sich Anweisungen meist nicht mit 8 Bit zufrieden geben. Ein Register ist ein Byte groß, das ist bekannt. Aber es gibt auch Spezial-Register, z.B. der Program Counter, der ist nach meinen Erkenntnissen nämlich 16bit breit, nur wie werden diese adressiert? 8 oder 16bit? Und was man extern als EEPROM anschließen kann, ist mir nun auch klarer geworden. Entweder man schließt etwas serielles an oder man arbeitet mit Adressleitungen. Diese Mischform mit dem 8051 hat mich auch durcheinander gebracht.
Tino M. schrieb: > Noch mal eine Frage zur Harvard-Archtitektur und internen > Adressleitungen im AVR: > Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl > 16. Da dieser AVR das Flash eingebaut hat, kann das so sein, muss aber nicht, wenn es nicht notendig ist, weil gar nicht soviel Speicher eingebaut ist. Wie genau Atmel das macht, da musst du Atmel fragen. > Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen > sind dort vorhanden? Die Register SIND in der CPU. Die werden nicht drangehängt > Soweit, wie ich das verstanden habe, werden intern 16 Adressleitungen > verwendet, weil sich Anweisungen meist nicht mit 8 Bit zufrieden geben. > Ein Register ist ein Byte groß, das ist bekannt. Aber es gibt auch > Spezial-Register, z.B. der Program Counter, der ist nach meinen > Erkenntnissen nämlich 16bit breit, nur wie werden diese adressiert? 8 > oder 16bit? gar nicht. Die werden nicht adressiert. Zumindest nicht so, wie anderer Speicher adressiert wird. Die sind einfach da. Wenn ein Befehl eines dieser Register braucht, dann schaltet ein Transistor eines dieser Register auf den internen Datenbus. That's it. Mehr ist dazu nicht zu sagen. Jeder Befehl löst intern einfach nur Schaltvorgänge aus ohne das da irgendwelche Registeradressen im Spiel sind. Alle diese Register zusammengenommen + eine Arithmetikeinheit SIND die CPU
Karl heinz Buchegger schrieb: > gar nicht. Die werden nicht adressiert. Zumindest nicht so, wie anderer > Speicher adressiert wird. Die sind einfach da. Also Kuriosum sei am Rande mit dem CDP1802 von RCA ein früher Mikroprozessor genannt, dessen Program Counter ausnahmsweise kein derart implizit zugeordnetes Spezialregister war, sondern der 16 16bit Register hatte, von denen jedes als Program Counter verwendbar war. Es gab ein spezielles 4bit Register, das eines dieser 16 Register als aktuellen Program Counter definierte.
Hi >Die Adressleitungen zum Programm-Code (Flash-Speicher) sind der Anzahl >16. Die reichen aber z.B. bei einem ATMega2560 nicht. Da bedarf es schon 17. Der Befehlssatz der AVRs ist auf maximal 22 Bit (4 MWord) Programmspeicher ausgelegt. >Wenn ich jetzt 32 Register an die CPU hänge, wieviele Adressleitungen >sind dort vorhanden? Auch 16? Bei den AVRs bilden die Arbeitsregister, die IO-Register und der RAM praktisch einen gemeinsamen Adressraum. Die Anzahl der notwendigen Adressleitungen ergibt sich also aus der Obergrenze des Rams. MfG Spess
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.