PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmspeicher vergrößern



CowZ
01.04.2006, 16:44
Hi,

da ich ein etwas umfangreicheres Board mit einem Mega32 plane, wollte ich euch fragen, ob es möglich ist, dessen Programmspeicher zu erweitern. Der hat ja "nur" 32Kb (sind das jetzt eigentlich KB oder KiB?)

Oder, wenn es beim Mega32 nicht geht, kann das überhaupt einer der AVRs?

Gruß, CowZ

bertl100
01.04.2006, 17:30
Es gibt z.b. bei www.elektro-nix.de einige Flashchips die per SPI angesteuert werden.

MFG

Bertl

CowZ
01.04.2006, 17:32
Und kann ich damit dann auch wirklich Programmcode speichern?

Also dass ich in meinem normalen ASM-Programmcode irgendwie schreiben kann:

"Jetzt springe zum Programmcode auf externem Speicher"?

Gruß, CowZ

linux_80
01.04.2006, 17:34
Hallo,
Programmspeicher ist der Flash-Speicher, bei einigen soviele KiloByte wie der Name des AVR, beim Mega32 sind's 32768 Bytes.
Du willst ein grösseres Programm schreiben, dann gibts da den Mega 64 oder 128 oder 256 ...
hier sind alle aufgelistet: http://www.atmel.com/dyn/products/devices.asp?family_id=607

Bei einigen kann der SRAM extern erweitert werden, zB. beim Mega128, der Flash kann aber nicht erweitert werden.

Diese anderen, grösseren, AVRs sind nur als SMD erhältlich.

bertl100
01.04.2006, 17:35
Wie die externen Flashchips programmiert werden weiß ich leider nicht.
Hab ich bisher nie gemacht aber 32 Kilobyte sind schon eine ganze Menge.
Ich hab mal einen Code über 800 Zeilen in Bascom geschrieben und hab gerade mal 17 Kilobyte gebraucht.

MFG

Bertl

CowZ
01.04.2006, 17:36
Ok, schade dass das nicht möglich ist...

meinte sowas aber mal gelesen zu haben... mhh komisch

linux_80
01.04.2006, 17:43
wie gesagt, das SRAM kann bei einigen erweitert werden, in diesem kann man aber nur Daten(Variablen) vom Programm ablegen, kein Porgramm ausführen.

Mehto
01.04.2006, 17:51
Hi,

möglich wäred as schon, du könntest das benötigte Programm wie bei einem Bootlader immer in einen Beriech laden der gerade nicht bnötigt wird.

Aber keine Angst, wenn du in ASM programmierst wirst du nicht mehr als 32KB brauchen, versuch erstmal 8KB mit ASM voll zu bekommen (fast unmöglich, es sei denn du programmierst etwas sehr komplexes oder wilst Bilder oder Grafiken im Flash ablegen)....

Gruß,
Mehto

CowZ
01.04.2006, 21:29
Ok, dass glaub ich dir, dass ich das nicht schaffen werde :) Wollte halt nur wissen, ob's geht und wäre es so gewesen, hätte ich auf meinem Board n Steckplatz oder sowas freigelassen.

Wie sieht denn die Benutzung von SRAM aus, hab irgendwie schon oft was dazu gelesen, aber kein Plan wie ich das ansteuer. (Natürlich alles in ASM)

Und wie schließe ich denn was für Bauteile an den µC... Naja, kann ich bei Gelegenheit auch nochmal googlen, wird sich bestimmt was finden :)

Gruß, CowZ

bertl100
01.04.2006, 23:00
SRAM kannst du nicht bei allen µC erweitern. Soweit ich weiß geht es bei
Mega32/64/128 aufwärts.
Dazu brauchst du 2 komplette Ports und eine andere Beschaltung.
Wenn du es genauer wissen willst dann schreib.

Sehr beliebt ist der I2C Bus. Atmel bezeit diesen aber als TWI Bus.
Damit kannst du sehr viele Bauteile anschliessen und mit diesen kommunizieren.
Z.B. I2C Clock oder Portexpander.............

CowZ
01.04.2006, 23:05
I2C ist mir bekannt :)

Das ist dann aber nicht so anzusteuern, wie der interne SRAM, oder? Das wäre dann doch über die I2C Schnittstelle...

Gruß, CowZ

bertl100
01.04.2006, 23:46
wieso der interne SRAM?
I2C ist was ganz anderes. dieser kommt mit 3 Leitungen aus SCL SDA und GND.
Damit redet der µC seriell mit anderen Teilnehmern.
Ein Externes SRAM wird parallel angesteuert, ist ja logisch, da der Zugriff für den SRAM sehr schnell erfolgen muss.

MFG

Bertl

CowZ
01.04.2006, 23:51
Ich dachte halt, dass ich irgendwo mal gelesen hätte, dass man auch den Programmspeicher erweitern kann, aber egal...

Zum SRAM: du meintest doch selber, dass I2C Dabei sehr beliebt sei. Da dachte ich, du würdest meinen, dass man einfach Speicherchips an den I2C-Bus anschließt. Gibt es andere ICs, die man dann auch im Programmcode als "Interner SRAM" mit STS und LDS schreiben / lesen kann?

Gruß, CowZ

bertl100
02.04.2006, 00:27
I2C ist nicht für SRAM. SRAM ist eine eigene Geschichte. Ich weiß zwar nicht wie umfangreich deine Programme sind, aber ich denke mal, dass du dass momentan noch nicht brauchen wirst.
Wenn du den Externen SRAM anschließt dann kannst z.b. in Bascom Variablen als XRAM deklarieren. Der Kompiler macht den Rest. Wird in ASM code prinzipiell dasselbe sein denke ich mal.

CowZ
02.04.2006, 02:43
Kannst du mir denn einen solchen externen SRam-Baustein sagen? Dann kann ich mich über das Datenblatt weiter informieren. Mir geht es nicht darum, was ich jetzt brauche, sondern darum, was ich vielleicht in ein paar Jahren mit dem gleichen Board machen möchte.

bertl100
02.04.2006, 09:20
Hier ein Datenblatt eines SRAMS

CowZ
02.04.2006, 14:25
Danke schön :)

Jetzt habe ich nur noch eine Frage: Wenn ich so einen Baustein an meinen Mega32 anschließe, dann muss ich die Datenspeicherung etc. alles selber schreiben, oder (ich nutzte ASM)? Oder gibt es da fertige Befehle, für die ich den Baustein an bestimmte Pins anschließen muss?

Gruß, CowZ

edit: ich dachte da an folgenden:
V62C5181024
Gibt's nämlich bei Reichelt schön billig unter der Bestellnummer 628128-70 M

bertl100
02.04.2006, 14:34
Ich weiß nur die Ansteuerung in Bascom.
Da werden die Variablen nicht normal deklariert sindern mit dem Zusatz XRAM. Den Rest macht der Compiler.
In ASM musst du dich selbst erkundigen. Sorry!!

MFG

Bertl

bertl100
02.04.2006, 14:36
Du musst aber beim anschliessen auch aufpassen.
Dazu brauchst du einen Inverter. Irgendwo im Forum hab ich mal ein Schema gesehen wie das SRAM angeschlossen werden muss.

MFG

Bertl

bertl100
02.04.2006, 14:37
der controller hat genau für diesen Zweck eigene Pins zur ansteuerung.
Ein Port ist die Ardesse und ein Port die Daten.

SprinterSB
02.04.2006, 15:06
Hi,

da ich ein etwas umfangreicheres Board mit einem Mega32 plane, wollte ich euch fragen, ob es möglich ist, dessen Programmspeicher zu erweitern. Der hat ja "nur" 32Kb (sind das jetzt eigentlich KB oder KiB?)

Oder, wenn es beim Mega32 nicht geht, kann das überhaupt einer der AVRs?


Nein. AVRs können kein Programmcode aus externem Flash-Speicher (wie auch immer angeschlossen) ausführen.
Was ebenfalls nicht geht bei AVR, ist Programmcode aus dem RAM (egal ob intern oder extern) oder aus dem EEPROM auszuführen.

Die Möglichkeit, Programmcode nachzuladen, besteht. Diese Möglichkeit ist aber keineswegs trivial. Dazu brauchst du einen Bootloader (easy) und einen dynamischen Linker. Zudem muss deine Software entscheiden können, welche Module vorhanden sind, welche gebraucht und nachgeladen werden müssen, wie die Abhängkeiten zwischen den Modulen sind, es muss entschieden werden, wo diese Module hingeladen werden sollen und es muss Interfaces geben, um diese Module (die ja immer woanders stehen können) von deinem Programmcode und auch von den Modulen aus(!) anspringen zu können.

Dazu dient wie gesagt ein dynamischer Linker. Wenn du den erst noch proggen willst, hast du garantiert keine Zeit mehr frei für deine eigentlichen Aufgaben ;-)

Ergo: Man wählt einen µC, dessen Ressourcen ausreichen. Um das wiederum abzuschätzen, ist Erfahrung notwendig, die du offenbar hast -- sonst würdest du kein solches Projekt planen... Also wähle einen µC der deinen Ansprüchen genügt, bzw eine Programmiersprache/Compiler die hinreichen dichten Code generiert.

Zu letzerem Punkt sei angemerkt, daß Assembler oft nur in der Theorie den dichtesten Code liefert. Ein optimierender Compiler wie GCC ist da oft besser als ein Asm-Programmierer, weil er Optimierungsstrategien einsetzt, von denen manche Programmierer noch nicht mal wissen, daß es sie gibt ;-)...

CowZ
02.04.2006, 15:20
Sprinter: Danke für diese ausführliche Erklärung :) Ich glaube wirklich, dass ich das mit dem Programmcode nachladen nicht machen werde, das erscheint doch ziemlich aufwändig :)

edit: Werde wohl auch für Variablen etc beim internen Speicher bleiben, ist ja doch recht groß ;)

SprinterSB
02.04.2006, 15:28
Wozu google???
Schau doch einfach mal ins Datenablatt eines ATmega128, da steht's garantiert drinne.

Für externes EEPROM gibt's keine Interfaces, die gibt's nur für den RAM.
EEPROM muss über Schnittstellen angeschlossen werden (I²C, SPI, ...)

Für den Zugriff auf XRAM gibt's Opcodes in den Befehlssätzen der AVRs, die XRAM unterstützen.

CowZ
02.04.2006, 16:52
Ah ja, danke :) Hab's gefuinden :)