-
        

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
    36
    Beiträge
    16

    Daten ins EEPROM des ATmega128 schreiben/lesen

    Anzeige

    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.801
    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
  •