- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 2 von 2

Thema: Daten ins EEPROM des ATmega128 schreiben/lesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2005
    Ort
    Fürth
    Alter
    43
    Beiträge
    16

    Daten ins EEPROM des ATmega128 schreiben/lesen

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    Hab im moment vor während meiner Programmlaufzeit, Daten in das EEPROM des ATmega 128 zu schreiben und wieder herauszulesen.

    Dazu habe ich mir folgendes angelegt:
    Code:
    unsigned char EEPROM config1, config2, config3, checksum;
    Folgende Funktionen hab ich mir überlegt um die Daten zu speichern und wieder zu lesen. Nur leider geht das nicht so wie ich mir das vorstelle

    Code:
    /**********************************************************************\
    * Funktionsname:loadconfig
    *
    * Kurzbeschreibung: 
    * Funktion vom Einlesen der letzten Konfiguration aus dem EEPROM
    *
    \**********************************************************************/
    void loadconfig(void)
    {
    	if (!((config1 + config2 + checksum) & 0xFF))
    	{
    		SPCR = config1;			// laden der Einstellungen des SPCR Registers
    		SPSR = config2;			// laden der Einstellungen des SPSR Registers
    	//	flags = config3;			// laden der Einstellungen der globalen Flag variablen
    		
    		USART0_TransmitStrin_p(config);
    	}
    	else USART0_TransmitStrin_p(noconfig);
    }
    
    /**********************************************************************\
    * Funktionsname:writeconfig
    *
    * Kurzbeschreibung: 
    * Funktion vom Einlesen der letzten Konfiguration aus dem EEPROM
    *
    \**********************************************************************/
    void writeconfig(void)
    {
    	cli();		// Abschalten aller Interrupts während des EEPROM schreibens
    	config1 = SPCR;	// Schreiben der SPCR Daten in das EEPROM
    	config2 = SPSR;	// Schreiben der SPSR Daten in das EEPROM
    	//config3 = flags;// Schreiben der globalen Flags in das EEPROM
    	checksum = 0-(config1 + config2); // erstellen und speichern der Checksumme
    	sei();			// Aktivieren der Interrupts
    	USART0_TransmitStrin_p(cfgwrite);	
    }
    Schon mal tausend Dank für euere Hilfe

    Holger

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    So wird config1 etc als SRAM-Adresse interpretiert. Zum Schreiben/Lesen ins EEPROM gibt's Routinen wie eeprom_read_byte(), Zugriff ähnlich wie in PGMSPACE.
    Doku in avr-libc-Doku und header avr/eeprom.h
    Daten ins EEPROM lokatieren:
    #define EEPROM __attribute__((section(".eeprom")))

    const char c EEPROM = 'A';

    Code:
    #define eeprom_is_ready() ...
    extern uint8_t eeprom_read_byte (const uint8_t *addr);
    extern uint16_t eeprom_read_word (const uint16_t *addr);
    extern void eeprom_read_block (void *buf, const void *addr, size_t n);
    extern void eeprom_write_byte (uint8_t *addr, uint8_t val);
    extern void eeprom_write_word (uint16_t *addr, uint16_t val);
    extern void eeprom_write_block (const void *buf, void *addr, size_t n);
    Disclaimer: none. Sue me.

Berechtigungen

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

Solar Speicher und Akkus Tests