Difference between revisions of "AVR Embedded Tutorial - EEPROM/de"

From Free Pascal wiki
Jump to navigationJump to search
Line 36: Line 36:
  
 
== Beispiel ==
 
== Beispiel ==
Als Versuch kann man nach dem ersten Hochladen und Start, die Zeile mit '''EEPROM_write(...''' ausklammern.
+
Beispielcode, der zeigt, wie man Daten schreibt und lest.
Anschliessend nochmals hochladen.
 
Wen man dann den Atmega vom Strom trennt und ihn wieder anschliesst, und in einem Terminal-Programm guckt, wird man sehen, das das '''Hello World''' im EEPROM gespeichert ist.
 
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
const
 
const
   sz = 'Hello World';
+
   sc = 'Hello World !';
  
 
var
 
var
 
   i: integer;
 
   i: integer;
  l: byte;
 
 
   s: string;
 
   s: string;
  
 
begin
 
begin
 
   UARTInit;
 
   UARTInit;
  l := Length(sz);
 
  
   // Daten ins EEPROM schreiben.
+
   // String schreiben, inklusive Längenbyte.
   for i := 1 to l do begin
+
   for i := 0 to Length(sc) do begin
     EEPROM_write(i, byte(sz[i])); // Als Versuch ausklammern.
+
     EEPROM_write(i, byte(sc[i]));
 
   end;
 
   end;
  
   SetLength(s, l + 2);
+
  // String lesen, inklusive Längenbyte.
   // Daten aus dem EEPROM schreiben.
+
   SetLength(s, EEPROM_read(0)); // Länge auslesen.
   for i := 1 to l do begin
+
  for i := 1 to Length(s) do begin
 +
    s[i] := char(EEPROM_read(i));
 +
  end;
 +
 
 +
  repeat
 +
    UARTSendString(s);
 +
    UARTSendString(#13#10);
 +
   until 1 = 2;
 +
end.
 +
</syntaxhighlight>
 +
 
 +
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.
 +
 
 +
<syntaxhighlight lang="pascal">
 +
var
 +
  i: integer;
 +
  s: string;
 +
 
 +
begin
 +
  UARTInit;
 +
 
 +
  // String lesen, inklusive Längenbyte.
 +
  SetLength(s, EEPROM_read(0)); // Länge auslesen.
 +
   for i := 1 to Length(s) do begin
 
     s[i] := char(EEPROM_read(i));
 
     s[i] := char(EEPROM_read(i));
 
   end;
 
   end;

Revision as of 21:55, 15 December 2017

Template:Translate

Daten in den EEPROM speichern und lesen.

Vorwort

Dieser Code ist für einen Atmega328/Arduino mit 16MHz. Wie man die UART ansteuert, steht hier:

  • UART UARTInit und UARTSendString(...

Daten speichern

  procedure EEPROM_write(uiAddress: int16; ucData: byte);
  begin
    while (EECR and (1 shl EEPE)) <> 0 do begin
    end;
    EEAR := uiAddress;
    EEDR := ucData;
    EECR := EECR or (1 shl EEMPE);
    EECR := EECR or (1 shl EEPE);
  end;


Daten lesen

  function EEPROM_read(uiAddress: int16): byte;
  begin
    while (EECR and (1 shl EEPE)) <> 0 do begin
    end;
    EEAR := uiAddress;
    EECR := EECR or (1 shl EERE);
    Result := EEDR;
  end;


Beispiel

Beispielcode, der zeigt, wie man Daten schreibt und lest.

const
  sc = 'Hello World !';

var
  i: integer;
  s: string;

begin
  UARTInit;

  // String schreiben, inklusive Längenbyte.
  for i := 0 to Length(sc) do begin
    EEPROM_write(i, byte(sc[i]));
  end;

  // String lesen, inklusive Längenbyte.
  SetLength(s, EEPROM_read(0)); // Länge auslesen.
  for i := 1 to Length(s) do begin
    s[i] := char(EEPROM_read(i));
  end;

  repeat
    UARTSendString(s);
    UARTSendString(#13#10);
  until 1 = 2;
end.

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.

var
  i: integer;
  s: string;

begin
  UARTInit;

  // String lesen, inklusive Längenbyte.
  SetLength(s, EEPROM_read(0)); // Länge auslesen.
  for i := 1 to Length(s) do begin
    s[i] := char(EEPROM_read(i));
  end;

  repeat
    UARTSendString(s);
    UARTSendString(#13#10);
  until 1 = 2;
end.

Siehe auch