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
Includiere <avr/eeprom.h> Eine Beschreibung gibt's hier: http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html
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
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
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.