Wiki-KopieMirror

Dies ist ein Mirror des Wikis von pascal.chat. Bearbeiten, Verlauf und Anmeldung finden dort statt.

AVR Embedded Tutorial - I²C EEPROM/de

Deutsch · English

I²C EEPROM (24LC256)

Vorwort

Dieser Code ist für einen Atmega328/Arduino mit 16MHz und 24LC256.
Es können auch andere 24LCxx angesteuert werden.

Die folgende Funktionen, sind in folgenden Tutorials beschrieben:

Beschreibung

Dieses Beispiel zeigt, wie man einen externen EEPROM (24LC256) ansteuert, welcher am I²C-Bus hängt.

PulUp-Widerstände sind nötig, der EEPROM enthält keine.

Funktionen für die EEPROM (24LC256) Ansteuerung.

Konstanten

pascal
const
  TWI_Write = 0;
  TWI_Read  = 1;

Funktionen

Hinweis: Bei einem ShortString ist ist das Längen-Byte in ShortString**[0]**.

Aufrufparameter:

Funktionen zum schreiben und lesen eines Bytes:

pascal
// Schreibt ein Zeichen
procedure I2C_EEPROM_Write(addr, pos: Int16; value: Byte);
begin
  TWIStart((addr shl 1) or TWI_Write);
  TWIWrite(pos shr 8);
  TWIWrite(pos and $FF);
  TWIWrite(value);
  TWIStop;
  delay_ms(10);
end;

// Liest ein Zeichen
function I2C_EEPROM_Read(addr, pos: Int16):Byte;
begin
  TWIStart((addr shl 1) or TWI_Write);
  TWIWrite(pos shr 8);
  TWIWrite(pos and $FF);
  TWIStop;

  TWIStart((addr shl 1) or TWI_Read);
  Result := TWIReadNACK;
  TWIStop;
end;

Bei einem String, oder sonstigen Puffer, wird Zeichen für Zeichen geschrieben/gelesen.

pascal
// Schreibt einen String, inklusive LängenByte.
procedure I2C_EEPROM_WriteString(addr, pos: Int16; s: ShortString);
var
  i:Byte;
begin
  for i := 0 to Length(s) do begin
    I2C_EEPROM_Write(addr, pos + i, Byte(s[i]));
  end;
end;

// Liest eine String aus, inklusive LängenByte.
function I2C_EEPROM_ReadString(addr, pos: Int16):ShortString;
var
  i, l:Byte;
begin
  l := I2C_EEPROM_Read(addr, pos); // Länge des Strings auslesen.
  SetLength(Result, l);
  for i := 1 to l do begin
    Result[i] := Char(I2C_EEPROM_Read(addr, pos + i));
  end;
end;

Beispiel

Konstanten und Variablen

pascal
const
  I2Caddr = $54; // Adresse des 24LC256 am I²C-Bus
  s1      = 'Hello World !';
  s2      = 'AVR mit Lazarus ist so schön';

var
  s: ShortString;

Hauptprogramm

Da ein ShortString 256Byte lang ist, wird der zweite String an der Adresse $100(256) im EEPROM gespeichert.

pascal
begin
  UARTInit;     // UART inizialisieren
  TWIInit;      // I²C  inizialisieren
  asm Sei END;

  // Die beiden Strings speichern
  I2C_EEPROM_WriteString(I2Caddr, 0,    s1); // Erster String
  I2C_EEPROM_WriteString(I2Caddr, $100, s2); // Zweiter String

  // Die Strings zur Überprüfung wieder laden.
  repeat
    s := I2C_EEPROM_ReadString(I2Caddr, 0);
    UARTSendString('s1: ');
    UARTSendString(s);
    UARTSendString(#13#10);

    s := I2C_EEPROM_ReadString(I2Caddr, $100);
    UARTSendString('s2: ');
    UARTSendString(s);
    UARTSendString(#13#10);
  until 1 = 2;
end.

Wen man es nicht glaubt, das der String im EEPROM ist, der kann die zwei Zeilen mit WriteString(... ausklammern und so nochmals testen.

Siehe auch

Autor: Mathias


From the Free Pascal wiki, page "AVR Embedded Tutorial - I²C EEPROM/de", as it stood on 2020-03-08 after a change by Trev, 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.

Version 1, zuletzt geändert von WikiArchive .