Forum: Mikrocontroller und Digitale Elektronik ATMEGA128:Flash beschrieben


von Steffen (Gast)


Lesenswert?

Hi,

ich habe ein kleines Testboard mit einem ATMEGA128 darauf.
Wie kann man unter CodeVisionAVR(C Programmierung) den Flash Speicher
beschreiben und lesen?

Ich möchte damit z.B. den ganzen Flash Speicher über Windows per RD232
auslesen und wieder mit Werten beschreiben.

von Jens D. (jens) Benutzerseite


Lesenswert?

such mal nach bootloader ..

von Steffen (Gast)


Lesenswert?

Warum Bootloader?
Kann ich nicht unter CodeVision dies so machen:
Beispiel:
unsigned int flash x=1111;
Da müsste doch der Wert 1111 im Flash stehen oder?

von Steffen (Gast)


Lesenswert?

Das verstehe ich nicht. Bootloader???
Ich möchte z.B. 128K Flash mit irgendwas beschrieben und wieder lesen.
Kann ich da nicht ein Array mit 128 Bytes anlegen und beschrieben?

von Hubert (Gast)


Lesenswert?

Jedes ISP-Tool sollte gehen, also Ponyprog mit entsprechender Hardware.

von Jens D. (jens) Benutzerseite


Lesenswert?

@Hubert lesen ....
>>Ich möchte damit z.B. den ganzen Flash Speicher über Windows per
RD232
>>auslesen und wieder mit Werten beschreiben...

So, wie du es geschrieben hast moechtest du im Betrieb den Flash
auslesen / schreiben??
oder willst du ihn allgemein Lesen / Schreiben?

Wenn du den mega128 NUR per rs232 OHNE Isp Tools etc beschreiben willst
brauchst du einen Bootloader (er ist dann die Programmiersoftware)..

ein Jumper wird gesetzt und dann kannst du per RS232 dein Programm in
den Flash reinschreiben
auslesen kannst du auch waehrend der µC Laeuft

oder redest du etwa von externem Flash Speicher??

von Steffen (Gast)


Lesenswert?

Nein ich möchte schon den internen Flash 128K benutzen.
Ich schreibe ein Programm und in diesem deklariere ich ein Array Größe
128K (bzw. kann auch weniger sein).
Dann möchte ich in der while Schleife im Main das Array befüllen bzw.
auslesen.das müsste doch so gehen oder?

von Jens D. (jens) Benutzerseite


Lesenswert?

nicht im flash speicher!!!
dazu kannst du das EEPROM nehmen aber achtung maximale schreibzyklen
beachten!

die daten kannst du dann von der RS232 nehmen

von Rolf Magnus (Gast)


Lesenswert?

> Ich schreibe ein Programm und in diesem deklariere ich ein Array
> Größe 128K (bzw. kann auch weniger sein).

Das steht im RAM, nicht im Flash.

> Dann möchte ich in der while Schleife im Main das Array befüllen
> bzw. auslesen.

Flash kann man nicht einfach so beliebig lesen und schreiben. Wenn man
das könnte, wäre es RAM.

Wenn du den Flash neu programmieren willst, und das nicht über ISP,
dann ist ein Bootloader genau das, was du willst.

von Steffen (Gast)


Lesenswert?

Hallo Rolf,

kannst du mir nähere Angaben über diesen Bootloader geben.Ich weiss, es
gibt 100 Beiträge.Welchen Bootloader vewendest du da? Und wie wird der
eingesetzt bzw. benutzt?
Kann ich den dann in meinem C Programm für den ATMEAG128 benutzen?

von Steffen (Gast)


Lesenswert?

Ach noch was:
Ich kann doch z.B. in meinem C Programm einfügen
unsigned char flash x=10;

Das müsste doch gehen? Der Wert 10 müsste doch dann im Flash stehen,
der?

von Rolf Magnus (Gast)


Lesenswert?

> kannst du mir nähere Angaben über diesen Bootloader geben.Ich
> weiss, es gibt 100 Beiträge.Welchen Bootloader vewendest du da?

Ich verwende bisher gar keinen, weil ich das noch nicht gebraucht hab.
Kann dir also leider keine Auskunft darüber geben, was da am besten
ist, wo die Unterschiede liegen und wie man ihn genau einsetzt.

> Ich kann doch z.B. in meinem C Programm einfügen
> unsigned char flash x=10;
>
> Das müsste doch gehen? Der Wert 10 müsste doch dann im Flash
> stehen, der?

Indirekt steht der Wert natürlich schon im Flash, denn irgendwo muß er
ja herkommen. Die Variable "flash" ist aber zunächst mal im RAM und
belegt dort ein Byte. Sie muß natürlich beim Programmstart mit dem Wert
10 initialisiert werden, und dazu wird dieser Wert aus dem Flash in die
Variable im RAM kopiert. Ich sehe aber nicht, wie dir das beim
Programmieren des Flash weiterhelfen sollte.

von Jens D. (jens) Benutzerseite


Lesenswert?

@Rolf Magnus
>> Dann möchte ich in der while Schleife im Main das Array befüllen
>> bzw. auslesen.

>Flash kann man nicht einfach so beliebig lesen und schreiben. Wenn
man
>das könnte, wäre es RAM.

das stimmt nciht ganz!!!
Flash kann man zwar nur ueber den Bootloader schreiben, aber lesen
klappt wunderbar
endweder direkt ueber adressen oder man deklariert ein PRG_MEM welches
die Daten im flash speichert
das PRG_MEM kann man aber NICHT mit der MCU bearbeiten..

@Steffen
schau mal in der Codesammlung und lerne erst einmal die funktionsweise
etc eines Bootloaders...
dann kannst du erst damit anfanngen einen zu suchen und auszuwaehlen

Gruss Jens

von Jens D. (jens) Benutzerseite


Lesenswert?

@Steffen
Beschreib bitte GENAU was du machen willst..
Woher kommen die Daten, was willst du damit machen und wohin sollen die
Daten gehen
muessen sie bei einem PowerDown in der MCU gespeichert bleiben??

von Steffen (Gast)


Lesenswert?

Ok um den bootloader näher kennen zu lernen benötige ich
Informationen.Kann mir dabei jemand sagen, wo ich Infos
herbekomme(deutsch).

Also ich mochte Daten vom PC via RS232 auf den Flashspeicher des
ATMEGA128 ablegen und abfragen können.

von Jens D. (jens) Benutzerseite


Lesenswert?

Nochienmal sollen die daten erhalten bleiben??
WTF nimmst du nicht das EEPROM???????????

von Steffen (Gast)


Lesenswert?

Ja die Daten sollen gespeichert bleiben.
Warum EEPROM? Das EEPROM ist doch beim ATMEGA128 nicht so groß wie das
Flash oder?
Die Flashgröße beträgt 128kB.

von Steffen (Gast)


Lesenswert?

Ja die Daten sollen gespeichert bleiben.
Warum EEPROM? Das EEPROM ist doch beim ATMEGA128 nicht so groß wie das
Flash oder?
Die Flashgröße beträgt 128kB.

von Jens D. (jens) Benutzerseite


Lesenswert?

weil du NICHT die 128k vom flash komplett nutzen kannst (darin wird auch
das Programm gespeichert)
werde doch einmal konkret wieviele daten willst du speichern??
wenn alles nicht reichen sollte nim ein externen flash speicher oder
sogar eine mmc karte, da bekommst du sicher genug rein..

der flash ist nicht dafuer da roh daten zu speichern, sondern nur das
programm und konstante
evtl noch eine scancode tabelle und bei einem grafikdisplay die
zeichentabelle mehr nicht..

Gruss

von Steffen (Gast)


Lesenswert?

Ok ich habe da ein altes Projekt mit einem 80C535.
Da messe ich Temperatur und Luftdruck. Zusätzlich wird da noch die Zeit
gespeichert. Insgesamt benötige ich da 30KByte.
Die Werte konnte ich mit der RS232 auslesen. Die Werte standen da im
RAM.Das heisst ich durfte das Ding niemals ausschalten, sonst sind ja
die ganzen Daten weg.
Wie könnte ich da beim ATMEGA128 tun?

von Jens D. (jens) Benutzerseite


Lesenswert?

sagte ich doch schon
externer flash speicher im prinzip endlos viel platz
eeprom 4k byte (100 000 schreibzüklen)
oder du nimst einfach eine MMC Karte, die ja im grunde schon flash ist

von peter dannegger (Gast)


Lesenswert?

Den internen Flash kann man nur seitenweise (512 Bytes am Stück)
beschreiben. Dazu muß die entsprechende Routine im Bootbereich liegen.

Für 30kB würde ich nen AT24C512 oder AT24C256 anschließen, die können
sowohl byteweise als auch blockweise beschrieben werden. I2C-Routinen
gibt es haufenweise dafür, man sollte allerdings Software-I2C verwenden
(einfacherer und sicherer).


Peter

von Steffen (Gast)


Lesenswert?

Der IC AT24C512 ist bei mir schon auf dem Board.
Ok ich werd mich mal damit beschäftigen.
Peter kannst du mir eine Quelle geben, wo ich einen C-Code für die I2C
Ansteuerung finde?

von Jens D. (jens) Benutzerseite


Lesenswert?

Steffen evtl etst einmal suchen???

von peter dannegger (Gast)


Lesenswert?

"Peter kannst du mir eine Quelle geben, wo ich einen C-Code für die
I2C
Ansteuerung finde?"

http://home.tiscali.de/peterd/appl/soft/c51/eeprom/index.htm

Ist allerdings für den kleinen AT24C16, die größeren benötigen ein
Adreßbyte mehr.

Auch mußt Du die SDA-Zugriffe anpassen, der 8051 hat ja open-drain
Ausgänge, der AVR aber nicht (kann man aber über das Direktion-Bit
simulieren).


Peter

von Steffen (Gast)


Lesenswert?

Hi Peter,

das heisst ich müsste doch für das Adressbyte eine Integer Variable
reservieren oder?
Im Mikrocontroller Forum habe ich keinen Beispielcode für die
Ansteuerung eines AVR (ATMEGA) auf AT24C512 gefunden.

von Steffen (Gast)


Lesenswert?

Sehe ich das richtig so, dass der ATFC512 5125Kbit Speichekapazität hat.
Umgerechnet in Kbyte = 8,192Kbyte.
Leider brauche ich 30Kbyte!

von Steffen (Gast)


Lesenswert?

Sorry ich habe da was falsch gerechnet.

Es sind 64Kybte. --> 512KBit / 8 = 64Kbyte

von Steffen (Gast)


Lesenswert?

"Ist allerdings für den kleinen AT24C16, die größeren benötigen ein
Adreßbyte mehr."


Wie setzte ich dies um?

von dam (Gast)


Lesenswert?

Hello All;
I have to modify the following source code which was written for
atmega128 ( using avr-gcc) to port it in msp430f1611 using IAR
compiler, and I would be very grateful if you could help me.
any help any advice will be appreciated
Thanks
=================================================

//void ReadEEPROM (BYTE *pData_buff, unsigned short address, unsigned
short  length)

//  DESCRIPTION:
//    Reads data from the 4kB MCU EEPROM
// Paramaeters
//      BYTE *pData_buff  :    A pointer to the read buffer
//      unsigned short address : The address of the first read byte
//      unsigned short   NUM_BYTES :  The number of bytes to read
//---------------------------------------------------------------------- 
---------------------------------
void ReadEEPROM(BYTE *pData_buff, unsigned short   address, unsigned
short NUM_BYTES) {

    // Wait for the last write operation to complete
    while (EECR & BM(EEWE));

    // For each byte...
    do {

        // Setup the address register, issue the read command, and
store the result
        EEAR = address++;
        EECR |= BM(EERE);
        *(pData_buff++) = EEDR;

    } while (--NUM_BYTES);

} // ReadEEPROM

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.