www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGAxx Variable ins EEPROM


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,

versuche momentan mit nem ATMEGA16 eine Variable ins EEPROM zu 
speichern.
Dazu mein folgender, banaler Testcode:

#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

char test;

int main(void)
{
  DDRB = 0xFF;

  eeprom_write_byte((uint8_t *)0x01, 0x0F);
  test = eeprom_read_byte((uint8_t *)0x01);

   PORTB = test;
}

Wenn beide Zeilen einkommentiert sind, wird am PORTB die erhoffte 0x0F 
ausgegeben. Nun würde ich erwarten, dass wenn ich Zeile 1, also 
write_byte... auskommentiere, dass dann die zuvor gespeicherte 
Information ebenfalls wieder am Port ausgegeben wird.
Es bleiben allerdings alle LEDS aus :(

Was mache ich falsch?

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt eine Fuse, die verhindert, dass das EEPROM gelöscht wird, wenn 
das Device gelöscht wird. Ich vermute, dass die falsch steht. Dadurch 
wird beim neuprogrammieren des ATMEGA16 auch dessen EEPROM gelöscht.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausserdem sollte man auf das Ende des Schreibzyklusses warten

  eeprom_write_byte((uint8_t *)0x01, 0x0F);
  eeprom_busy_wait();

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey super, danke !
Es gibrt tatsächlich eine solche Fuse.

--> EESAVE

Ist das Bit gesetzt, wird bei jedem ChipErase das EEPROM mit gelöscht.
Steht es auf 0, bleibt das EEPROM unberührt :)


--> Danke für die schnelle Hilfe

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
> Ausserdem sollte man auf das Ende des Schreibzyklusses warten

Macht die Lib doch schon.
Zitat:
All of the read/write functions first make sure the EEPROM is ready to 
be accessed
Zitatende

Ich denke, dass es ohne eeprom_busy_wait() geht.

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel wrote:
> Hey super, danke !
> Es gibrt tatsächlich eine solche Fuse.
>
> --> EESAVE

Was glaubst du, dass hier Märchenstunde ist? ;-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Ausserdem sollte man auf das Ende des Schreibzyklusses warten

>Macht die Lib doch schon.

Hab ich auch gerade gelesen. Man lernt nie aus ;)
Sonst würde das mit den eeprom_block_write()
ja auch nicht funktionieren.

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.