Forum: Mikrocontroller und Digitale Elektronik Daten zur Laufzeit sichern


von Dd D. (neo120484)


Lesenswert?

Guten Tag miteinander..

Ich hab da ein kleines prombelm wo ich nicht wirklich weiß wie ich das
angehen soll..

Und zwar möchte ich zur Laufzeit meines programms daten im EEPROM oder
FLASH sichern so das bei erneutem einschalten des uC diese werte wieder
aus dem speicher geladen werden können und der uC sozusagen auf den
zustand vor dem ausschalten gesetzte werden kann..

jetzt kann ich das nicht statisch machen also die werte zb fest ins
EEPROM schreiben da sich die werte auch wärend der Laufzeit ändern
können.. wäre nett wenn mir jemand eine anhaltspunkt oder lösungsansatz
geben könnte..

gruß Dominik

von Hein (Gast)


Lesenswert?

Includiere <avr/eeprom.h>

Eine Beschreibung gibt's hier:

http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

von Patrick (Gast)


Lesenswert?

DD DD,

wie wäre es, deinen uC zusätzlich zur Stromversorgung noch zu puffern.
Wenn die Stromversorgung wegfällt wird dann noch die Routine
abgearbeitet, die die Daten ins EEPROM schreibt und dann macht auch der
Controller die Augen zu

von Dd D. (neo120484)


Lesenswert?

zu Hein:
link geht nicht..
bzw ich hatte das schon ausprobiert.. sicher das das zu laufzeit
geht..

hier mal mein Code..

Funktionen zum schreiben und lesen
1
void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
2
{
3
  //wait for completion of previos write
4
  while(EECR & (1<<EEPE));
5
6
  //Set up adress and Data Registers
7
  EEAR = uiAddress;
8
  EEDR = ucData;
9
  
10
  //Write logical one to EEMPE
11
  EECR |= (1<<EEMPE);
12
13
  //Start writing
14
  EECR |= (1<<EEPE);
15
}
16
17
18
unsigned char EEPROM_read(unsigned int uiAddress)
19
{
20
  //Wait for completion of privious write
21
  while(EECR & (1<<EEPE));
22
23
  //Set up adress register
24
  EEAR = uiAddress;
25
26
  //Start eeprom read
27
  EECR |= (1<<EERE);
28
29
  //retunr data from Data Register
30
  return EEDR;
31
}

Main
1
    //initialisirung
2
    OCR0A = EEPROM_read(0);
3
    OCR1A = EEPROM_read(1);
4
    OCR2A = EEPROM_read(2);
5
6
.
7
.
8
.
9
    //Speichern der aktuellen einstellungen?????
10
    if(receive =='s')
11
    {
12
        EEPROM_write(0x00,OCR0A);
13
  EEPROM_write(0x01,OCR1A);
14
  EEPROM_write(0x02,OCR2A);
15
    }



zu Patrick..
Den beitrag mit dem sichern von Daten wenn die Stromversorgung abbricht
hab ich schon gelesen ist aber vorerst nicht nötig bei mir da
ich den speicherbefehl von meinem rechner aus schicken möchte..


gruß Dominik

von Marx (Gast)


Lesenswert?


von Marx (Gast)


Lesenswert?

Folgende Funktionen sind dort bereits implementiert:


uint8_t   eeprom_read_byte (const uint8_t *addr)
uint16_t   eeprom_read_word (const uint16_t *addr)
void   eeprom_read_block (void *pointer_ram, const void *pointer_eeprom,
size_t n)
void   eeprom_write_byte (uint8_t *addr, uint8_t value)
void   eeprom_write_word (uint16_t *addr, uint16_t value)
void   eeprom_write_block (const void *pointer_ram, void
*pointer_eeprom, size_t n)

von Dd D. (neo120484)


Lesenswert?

wunderbar es geht ich danke recht herzlich für die hilfen..
mein problem war das ich die Adressen nicht gecastet hatte das hat ihm
nich so gepasst jetzt gehts aber..

gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.