Moin,
ich befürchte die Frage wurde hier schon oft gestellt:
Atmega16, ich schreibe etwas ins EEPROM und lese es direkt danach wieder
aus, von mehreren Adressen: funktoniert.
Wenn ich dann aber nach einem Neustart nur lesen will bekomm ich lauter
FF ausgegeben.
Ich habe die gegebenen Funktionen und eigene probiert - bei beiden das
gleiche Problem.
Der relevante Code sieht so aus (lcd_set_line ist meine eigene Funktion
zur Ausgabe auf dem LCD Display):
1 | unsigned char x;
|
2 | unsigned int addr;
|
3 |
|
4 | static inline void write_byte(unsigned int *addr,unsigned char byte){
|
5 | loop_until_bit_is_clear(EECR,EEWE);
|
6 | loop_until_bit_is_clear(SPMCR,SPMEN);
|
7 | EEAR = *addr;
|
8 | EEDR = byte;
|
9 | EECR |= (1<<EEMWE);
|
10 | EECR |= (1<<EEWE);
|
11 | _delay_ms(1);
|
12 | EECR |= (1<<EEWE);
|
13 | }
|
14 |
|
15 | static inline unsigned char read_byte(unsigned int *addr){
|
16 | EEAR = *addr;
|
17 | EECR |= (1<<EERE);
|
18 | _delay_ms(1);
|
19 | return EEDR;
|
20 | }
|
21 |
|
22 | addr = 0;
|
23 | for(x=0;x<10;x++){
|
24 | write_byte(&addr, x);
|
25 | addr++;
|
26 | _delay_ms(1);
|
27 | }
|
28 | addr = 0;
|
29 | for(x = 0;x<10;x++){
|
30 | sprintf(lcd,"%d",read_byte(&addr));
|
31 | lcd_set_line(lcd,1);
|
32 | addr++;
|
33 | _delay_ms(500);
|
34 | }
|
mfg
Nils