www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA128:Flash beschrieben


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
such mal nach bootloader ..

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jedes ISP-Tool sollte gehen, also Ponyprog mit entsprechender Hardware.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen evtl etst einmal suchen???

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry ich habe da was falsch gerechnet.

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

Autor: Steffen (Gast)
Datum:

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


Wie setzte ich dies um?

Autor: dam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.