Forum: Mikrocontroller und Digitale Elektronik Externes Flash für Unterprogramme


von Marcus (Gast)


Lesenswert?

Hallo!

Ich habe zwar noch keine konkreten Pläne, möchte vorher aber wissen ob 
das geht:

Ich habe vor, (vorzugsweise) einen Atmega 16/32 zu verwenden. Damit 
möchte ich ein 128x64 Display ansteuern. Wäre es möglich, dass ich 
Unterprogramme in ein externes Flash brenne und dann mit dem µC zu 
diesem externen Speichersegment springe wo das Programm liegt, dieses 
zeilenweise einlese und ausführe?

Vorzugsweise würde ich ein serielles Flash von Atmel verwenden.

Bitte um Antworten!

von Oliver J. (skriptkiddy)


Lesenswert?

Marcus schrieb:
> Ich habe vor, (vorzugsweise) einen Atmega 16/32 zu verwenden. Damit
> möchte ich ein 128x64 Display ansteuern. Wäre es möglich, dass ich
> Unterprogramme in ein externes Flash brenne und dann mit dem µC zu
> diesem externen Speichersegment springe wo das Programm liegt, dieses
> zeilenweise einlese und ausführe?

Nein es ist nicht möglich. Du kannst beim AVR Code nur aus dem internen 
Flash ausführen.

Gruß Skriptkiddy

von peter (Gast)


Lesenswert?

vor der frage stehe ich auch zur zeit, evtl. kann noch jemand einen link 
reinwerfen wie es überhaupt funktioniert programmcode auf einem externen 
speicher zu legen und diesen dann über den hauptcontroller auszuführen. 
vorzugsweise für atmegas. :)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

z.B: indem man einen Interpreter auf dem AVR laufen lässt
Beitrag "AVR-ChipBasic2 - BASIC-Computer mit ATMega 644"

von Tiny (Gast)


Lesenswert?

Marcus schrieb:
> Unterprogramme in ein externes Flash brenne und dann mit dem µC zu
> diesem externen Speichersegment springe wo das Programm liegt, dieses
> zeilenweise einlese und ausführe?

Soll da so eine Art Script abgelegt werden? Das zeilenweise macht mich 
etwas stutzig.

Bitte beschreibe den Sinn und Zweck. Da gibt es vielleicht noch andere 
Lösungen.

von Stefan E. (sternst)


Lesenswert?

peter schrieb:
> vor der frage stehe ich auch zur zeit, evtl. kann noch jemand einen link
> reinwerfen wie es überhaupt funktioniert programmcode auf einem externen
> speicher zu legen und diesen dann über den hauptcontroller auszuführen.
> vorzugsweise für atmegas. :)

Direkt geht das bei AVRs gar nicht.

Was du machen kannst, ist, im ATmega einen Interpreter zu 
implementieren, der sich dann seinen Code vom externen Medium lädt und 
ausführt.

von Matthias K. (mkeller)


Lesenswert?

Naja du kannst statt eines Mega16/32 auch ein Mega8515 nehmen, der hat 
ein externes Speicherinterface oder eben Mega64 /Mega128.

Wenn du direkt den Code vom externen Speicher ausführen willst brauchst 
du ein richtiges XMEM-Interface. Wenn du den Code selbst noch 
interpretierst ("bytecode interpreter") dann gehts auch ohne.

von Klaus W. (mfgkw)


Lesenswert?

Auch durch mehrfaches Nachfragen geht es nicht.

Man könnte durch den Bootloadermechanimus das gesamte Programm aus einem 
externen Speicher in den internen übertragen, dann nach einem Reset aus 
dem internen ausführen.
Aber direkt aus einem externen Speicher geht halt nicht.

Ein Ausweg wäre nur, im internen Speicher einen irgendwie gearteten 
Interpreter als Programm zu haben, der seine Befehle nach und nach von 
externem Speicher liest und ausführt.

Das gilt für AVR; bei anderen CPUs kann es anders aussehen.

von Stefan E. (sternst)


Lesenswert?

Matthias Keller schrieb:
> Naja du kannst statt eines Mega16/32 auch ein Mega8515 nehmen, der hat
> ein externes Speicherinterface oder eben Mega64 /Mega128.
>
> Wenn du direkt den Code vom externen Speicher ausführen willst brauchst
> du ein richtiges XMEM-Interface.

Auch über das externe Speicherinterface kann man keinen Code ausführen.

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe vor, (vorzugsweise) einen Atmega 16/32 zu verwenden.

Warum diese Dinosaurier? Nimm einen ATMega1284p (pinkompatibel zu den 
Oldies) mit 126k Flash und fertig ist es.

MfG Spess

von Matthias K. (mkeller)


Lesenswert?

Sorry habt natürlich recht. Der XMEM-Bereich wird ja auf den SRAM 
Bereich gemappt!

Leider kann ich den Beitrag nicht mehr editieren :(

Da musst du leider eine andere Architektur nehmen:

8051
ARM
...

von spess53 (Gast)


Lesenswert?

Hi

Korrektur: 'mit 126k Flash' -> 'mit 128k Flash'.

MfG Spess

von Stefan (Gast)


Lesenswert?

ev. ist es ausreichend, alle im Flash gespeicherten Konstanten (Texte, 
Graphiken, konstante Arrays ...) ins externe Flash zu speichern. Das 
dürfte bei einem Graphik-Display schon einiges sein. Nur der reine Code 
bleibt dann im internen Flash.

Gruß, Stefan

von Marcus (Gast)


Lesenswert?

@Stefan: Danke für deinen (für mich zumindest) hilfreichen Tipp. So 
könnte ich es ja eigentlich machen.

@Spess: Ich verwende vorzugsweise den Atmega 16 bzw. 32 weil ich welche 
herumliegen habe.

@alle Anderen: Vielen Dank für eure schnellen und auch hilfreichen 
Antworten!

von Marcus (Gast)


Lesenswert?

Ich weiß, das ist jetzt eine etwas blöde Frage, aber wie bringe ich 
eigentlich Daten via PC in das Flash? Ich möchte im Flash ein Charset 
für das Display ablegen. Kann ich das einfach via Programmer (MySmartUSB 
MK2) machen oder ist das etwas komplizierter?

von spess53 (Gast)


Lesenswert?

Hi

>Ich weiß, das ist jetzt eine etwas blöde Frage, aber wie bringe ich
>eigentlich Daten via PC in das Flash? Ich möchte im Flash ein Charset
>für das Display ablegen.

Kommt auf deine Programmiersprache an. In Assembler per .db, in C als 
Array den Zeichensatz in dein Programm einbinden und mitflashen.

>@Spess: Ich verwende vorzugsweise den Atmega 16 bzw. 32 weil ich welche
>herumliegen habe.

Hoffentlich geschenkt bekommen.

MfG Spess

von Marcus (Gast)


Lesenswert?

Ich programmiere in C

Sorry, ich habe mich jetzt unklar formuliert. Ich möchte das Chaset ins 
EXTERNE Flash/EEPROM brennen. Wie stelle ich das an? Wenn ich das 
Charset mitflashe, dann ist es ja nur im AVR drinnen. Das externe 
Flash/EEPROM ist bzw. wird später via I2C mit dem µC verbunden.

von Klaus W. (mfgkw)


Lesenswert?

Entweder machst du dir einen AVR, klemmst dort das Flash an und lässt es 
ihn reinschreiben, oder du nimmst einen dedizierten Brenner (Galep oder 
sowas)

von spess53 (Gast)


Lesenswert?

Hi

Dann wirst du dir erst mal ein Programmiergerät basteln müssen. Und u.U. 
noch die passende PC-Software dazu schreiben.

Ehrlich gesagt sehe ich in deinen Vorhaben keinen Vorteil gegenüber 
einem passenden Controller. Hast du überhaupt schon eine Vorstellung zum 
notwendigen Flashbedarf?

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
Noch kein Account? Hier anmelden.