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

From Free Pascal wiki
Jump to navigationJump to search
Line 28: Line 28:
 
== Daten lesen ==
 
== Daten lesen ==
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
   function EEPROM_read(uiAddress: int16): byte;
+
   function EEPROM_read(Address: int16): byte;
 
   begin
 
   begin
  
Line 35: Line 35:
 
     end;
 
     end;
  
     EEAR := uiAddress;
+
     EEAR := Address;
 
     EECR := EECR or (1 shl EERE);
 
     EECR := EECR or (1 shl EERE);
     Result := EEDR;
+
     Result := EEDR; // Zeichen auslesen
 
   end;
 
   end;
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 21:33, 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

Die zwei Zeilen mit EECR müssen getrennt sein, ansonsten wird nicht geschrieben.

  procedure EEPROM_write(Address: int16; Data: byte);
  begin
    
    // Prüfen, ob bereit zum schreiben.
    while (EECR and (1 shl EEPE)) <> 0 do begin
    end;

    EEAR := Address;
    EEDR := Data;
    EECR := EECR or (1 shl EEMPE); // Es müssen 2 Zeilen sein !
    EECR := EECR or (1 shl EEPE);
  end;
Light bulb  Hinweis: Die zwei Zeilen mit EECR müssen getrennt sein, ansonsten wird nichts geschrieben !

Daten lesen

  function EEPROM_read(Address: int16): byte;
  begin

    // Prüfen, ob bereit zum Lesen.
    while (EECR and (1 shl EEPE)) <> 0 do begin
    end;

    EEAR := Address;
    EECR := EECR or (1 shl EERE);
    Result := EEDR; // Zeichen auslesen
  end;

Beispiel

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

const
  sc = 'Hello World !';

var
  i: integer;
  s: shortstring; 

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: shortstring;

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