Sign in Join
Wiki copytemporary

AVR Embedded Tutorial - EEPROM/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: AVR Embedded Tutorial - EEPROM/de

OldNewLine
1+# Daten in den EEPROM speichern und lesen.
2+
3+## Vorwort
4+
5+Dieser Code ist für einen Atmega328/Arduino mit 16MHz. Wie man die UART ansteuert, steht hier:
6+
7+- [[AVR Embedded Tutorial - UART/de|UART]] *UARTInit* und *UARTSendString(...*
8+
9+## Auf das EEPROM zugreifen
10+
11+Über Address kann man auf jedes einzelne Byte im EEPROM zugreifen. Somit hat man die Möglichkeit jedes Zeichen einzeln zu lesen und schreiben.
12+
13+### Daten speichern
14+
15+Die zwei Zeilen mit **EECR** müssen getrennt sein, ansonsten wird nicht geschrieben.
16+
17+``` pascal
18+ procedure EEPROM_write(Address: int16; Data: byte);
19+ begin
20+
21+ // Prüfen, ob bereit zum schreiben.
22+ while (EECR and (1 shl EEPE)) <> 0 do begin
23+ end;
24+
25+ EEAR := Address;
26+ EEDR := Data;
27+ EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein !
28+ EECR := EECR or (1 shl EEPE);
29+ end;
30+```
31+
32+> **Note:** Die zwei Zeilen mit **EECR** müssen getrennt sein, ansonsten wird nichts geschrieben !
33+
34+### Daten lesen
35+
36+``` pascal
37+ function EEPROM_read(Address: int16): byte;
38+ begin
39+
40+ // Prüfen, ob bereit zum Lesen.
41+ while (EECR and (1 shl EEPE)) <> 0 do begin
42+ end;
43+
44+ EEAR := Address;
45+ EECR := EECR or (1 shl EERE);
46+ Result := EEDR; // Zeichen auslesen
47+ end;
48+```
49+
50+## Beispiel
51+
52+Beispielcode, der zeigt, wie man Daten schreibt und lest.
53+
54+``` pascal
55+const
56+ sc = 'Hello World !';
57+
58+var
59+ i: integer;
60+ s: shortstring;
61+
62+begin
63+ UARTInit;
64+
65+ // String schreiben, inklusive Längenbyte.
66+ for i := 0 to Length(sc) do begin
67+ EEPROM_write(i, byte(sc[i]));
68+ end;
69+
70+ // String lesen, inklusive Längenbyte.
71+ SetLength(s, EEPROM_read(0)); // Länge auslesen.
72+ for i := 1 to Length(s) do begin
73+ s[i] := char(EEPROM_read(i));
74+ end;
75+
76+ repeat
77+ UARTSendString(s);
78+ UARTSendString(#13#10);
79+ until 1 = 2;
80+end.
81+```
82+
83+Wen der erste Code einmal ausgeführt wurde, kann man mit dem zweiten Code gut sehen, das das **Hello World !** im EEPROM gespeichert ist, auch wen man den ATmega in der Zwischenzeit vom Strom getrennt wurde.
84+
85+``` pascal
86+var
87+ i: integer;
88+ s: shortstring;
89+
90+begin
91+ UARTInit;
92+
93+ // String lesen, inklusive Längenbyte.
94+ SetLength(s, EEPROM_read(0)); // Länge auslesen.
95+ for i := 1 to Length(s) do begin
96+ s[i] := char(EEPROM_read(i));
97+ end;
98+
99+ repeat
100+ UARTSendString(s);
101+ UARTSendString(#13#10);
102+ until 1 = 2;
103+end.
104+```
105+
106+## Überprüfen mit AVRDude
107+
108+Die geschriebenen Daten können auch mit AVRDude überprüft werden.\
109+Da sieht man das geschrieben **Hello World !**.\
110+Bei mir funktioniert dies nicht über den USB vom Arduino, ich konnte es nur mit einem USBasp testen.
111+
112+```text
113+$ avrdude -patmega328p -cusbasp -t
114+
115+avrdude: warning: cannot set sck period. please check for usbasp firmware update.
116+avrdude: AVR device initialized and ready to accept instructions
117+
118+Reading | ################################################## | 100% 0.00s
119+
120+avrdude: Device signature = 0x1e950f (probably m328p)
121+avrdude> d ee
122+>>> d ee
123+0000 0d 48 65 6c 6c 6f 20 57 6f 72 6c 64 20 21 ff ff | Hello World !..|
124+0010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
125+0020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
126+0030 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
127+
128+avrdude>
129+```
130+
131+## Siehe auch
132+
133+- Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]]
134+
135+Autor: Mathias
136+
137+---
138+*From the Free Pascal wiki, page "AVR Embedded Tutorial - EEPROM/de", as it stood on 2020-06-10 after a change by Mathias, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
139+Category: AVR
140+Category: Arduino
141+Category: Deutsch
142+Category: Embedded
143+Category: Tutorials

Back to history