- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 7 von 7

Thema: eeprom_write_block [gelöst]

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2006
    Ort
    Linz
    Beiträge
    7

    eeprom_write_block [gelöst]

    Anzeige

    Praxistest und DIY Projekte
    Hi!

    Ich möchte ein 10Byte großes unsigned char Array vom RAM ins EEPROM schreiben, dazu nütze ich die Funktion eeprom_write_block.
    Ich verwende einen ATmega162.


    Code:
    unsigned char matrix[] = "1111111111";
    eeprom_write_block(&matrix, (void *) 0x4010, sizeof(matrix));
    Die Funktion schreibt jedoch nichts ins EEPROM.
    Kann mir jemand sagen, an was es liegt?

    Ich komme einfach nicht weiter.
    Danke für eure Hilfe!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Ein ATmega162 hat 512 Bytes EEPROM. Du schreibst ab Adresse 0x4010 (16400), also ins Nirgendwo. Gültige EEPROM-Adressen sind von 0-511 (0x0-0x1ff).
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2006
    Ort
    Linz
    Beiträge
    7
    Danke SprinterSB für die schnelle Antwort.
    Ich habs jetzt mit Adresse 0x01 bzw. mit 0x00 versucht. Funktioniert auch nicht.

    Ich hab mir gedacht, dass der EEPROM Adressbereich von 0x4000 bis 0x41FF liegt. So steht es im galep32 der Software für den GALEP-4, mit der ich dann kontrolliere, ob die gewünschten Daten geschrieben worden sind.

    Hast du noch ne Idee?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    GALEP???
    Wenn du damit ausliest, musst du ab 0x4000 lesen. Das sind wohl virtuelle Adressen, um Flash-Adresse 0 von EEPROM-Adresse 0 von SRAM-Adresse 0 unterscheiden zu können.

    Also:
    EEPROM (GALEP: 0x4000-0x41ff)
    EEPROM (AVR: 0x0-0x1ff)

    Hast du alles neu übersetzt? Sicher?
    Stimmt der -mmcu Schalter?

    BTW: sizeof (matrix) ist 11.
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2006
    Ort
    Linz
    Beiträge
    7
    ok, dass mit den Adressen ist mir jetzt klar.

    ja, sicher hab ichs neu übersetzt.....
    ich hab jetzt mal versucht, ins EEPROM zu schreiben und dann wieder daraus zu lesen.

    Code:
    unsigned char matrix[] = "1111111111";
    UART0_transmit (matrix[0]);
    eeprom_write_block(&matrix, (void *) 0x010, sizeof(matrix)); 
    matrix[1]='~';
    UART0_transmit (matrix[1]);
    eeprom_read_block (&matrix, (void *) 0x010, sizeof(matrix));
    UART0_transmit(matrix[1]);
    Da sollte dann herauskommen: 1,~,1

    Es kommt aber: 1,~,0xFF

    Es steht auch nichts im EEPROM auf dieser Adresse, wenn ich mit GALEP auslese. Also 0xFF.

    Was meinst denn mit dem -mmcu Schalter?

    sizeof(matrix) sollte 10 sein? oder? matrix[0] bis matrix[9] sind 10 Zeichen

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Die endende 0 bei Matrix gehört bei sizeof() dazu. Belegt ja auch Speicher.

    mmcu ist ein Compilerschalter, mit dem du den Controller angibst. Wenn der nicht richtig steht wird Code für nen anderen µC generiert, der sich flashen lässt aber evtl. nicht funktioniert. Bei dir muss es heissen -mmcu=atmega162

    Ansonsten fällt mir auch nix mehr ein.
    Disclaimer: none. Sue me.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2006
    Ort
    Linz
    Beiträge
    7
    Servus SprinterSB!

    Genau, die 0 am Ende steht ja auch im EEPROM!

    Ich hab in der Entwicklungsumgebung schon eingestellt, dass ich nen ATmega162 hab.

    Aber ich weiß jetzt, worans gelegen ist.

    Der Code funktioniert!
    Das Problem ist aber, dass ich den Code mit dem Bootloader "MegaLoad V5.0b1" in den Controller lade, nach dem flashen macht der Controller einen Reset und das Programm wird ausgeführt.
    Dies hat bis jetzt auch immer funktioniert, jedoch jetzt mit der eeprom_write Routine ist es notwendig, dass ich nach dem Flashen noch einen weiteren Reset mache(davor muss ich aber MegaLoad schließen, weil sonst wird ja bei einem Reset sofort wieder neu geflasht).

    Jetzt funktionierts!
    Danke für die Hilfe SprinterSB!

    -andio-

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test