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!
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
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. :)
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.
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.
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.
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.
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.
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
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:
8051ARM
...
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
@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!
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?
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
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.
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)
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