Nach Rücksprache mit dem Hersteller nun der geänderte Code um auf das RAM-Device zuzugreifen
Code:
$regfile = "m2560def.dat"
$hwstack = 128
$framesize = 128
$swstack = 128

$crystal = 16000000
$baud = 9600

Config Sda = Portd.1                                        'SDA und SCL definiere
Config Scl = Portd.0                                        'für TWI-Bus-Konfiguration

Config Twi = 100000                                         ' wanted clock frequency
I2cinit                                                     ' nur bei SoftwareTWI ??

Declare Sub Write_ccramdevice(byval Adres As Word , Byval W1 As Byte)
Declare Sub Read_ccramdevice(byval Adres As Word )

Dim Temp As Byte
Dim Templ As Byte

Const Saa1064w = &H70
Const Saa1064r = &H71
Const Datenpcfw = &H4E
Const Datenpcfr = &H4F
Const Controlpcfw = &H4C

'Sonstiges
Dim X As Word
Dim Y As Word
Dim Wert As Byte
Dim Adres16 As Word

Print Chr(12);

Do

  For X = 1 To 10
    Wert = Low(x)
    Print Chr(12);
    Print Chr(27) ; Chr(79) ; Chr(1) ; Chr(1);
    Print "AdresseW " ; X ; " " ; Wert ;

    Call Write_ccramdevice(x , Wert)
  Next X

  For Y = 1 To 10
    Print Chr(12);
    Print Chr(27) ; Chr(79) ; Chr(1) ; Chr(1);
    Print "AdresseR " ; Y ;

    Call Read_ccramdevice(y )
  Next Y

Loop

End

Sub Write_ccramdevice(byval Adres As Word , Byval W1 As Byte)
  Dim A As Byte

  Disable Interrupts

  'das Byte an DatenPCF senden
  I2cstart                                                'start condition
  A = W1 * 2
  I2cwbyte Datenpcfw                                      'slave address
  I2cwbyte A
  I2cstop

  // ersten 16 BIT der Adresse invertiert an SA1064 senden
  I2cstart
  I2cwbyte Saa1064w
  Adres16 = Not Adres
  Templ = Low(adres16)
  I2cwbyte Templ
  Waitms 100

  Temp = High(adres16)
  I2cwbyte Temp
  Waitms 100
  I2cstop

  'an ControlPCF das 17.BIt der Adresse, der selektierte RAM-Baustein und das WE-high senden
  'anschließend pulsen
  I2cstart
  I2cwbyte Controlpcfw
  I2cwbyte &B11111010
  Waitms 100
  I2cwbyte &B11011010
  Waitms 100
  I2cwbyte &B11111010
  Waitms 100
  I2cstop

  Enable Interrupts
  Waitms 100

End Sub

Sub Read_ccramdevice(byval Adres Word)
  Dim Value As Byte
  Disable Interrupts

  'die 255 and DatenPCF senden
  I2cstart
  I2cwbyte Datenpcfw
  I2cwbyte &B11111111
  Waitms 100
  I2cstop

  'die ersten 16 BIT der Adresse invertiert an SA1064 senden
  I2cstart
  I2cwbyte Saa1064w
  Adres16 = Not Adres
  Templ = Low(adres16)
  I2cwbyte Templ
  Waitms 100
  Temp = High(adres16)
  I2cwbyte Temp
  Waitms 100
  I2cstop

  'an ControlPCF das 17.BIt der Adresse, der selektierte RAM-Baustein und das WE-high senden
  I2cstart
  I2cwbyte Controlpcfw
  I2cwbyte &B11111010
  I2cstop

  'Wert am DatenPCF auslesen
  I2cstart
  I2cwbyte Datenpcfr
  I2crbyte Value , Nack                                    'read byte
  I2cstop

  ' es wird immer der zuletzt geschriebene Wert (die 20) ausgelesen/angezeigt
  Print Chr(27) ; Chr(79) ; Chr(1) ; Chr(2);
  Print "Wert " ; Value ;

  Waitms 500
  Enable Interrupts
End Sub
Das Problem nun: es wird scheinbar immer nur auf eine Adressen geschrieben. Inder ersten Schleife werden an Adresse 1 bis 10 die Werte 2 bis 20 geschrieben. Beim Auslesen in der zweiten Schleife von 1 bis 10 wird aber immer nur der Wert 20 (der zuletzt geschriebene) zurückgegeben. Kann das Adressieren "fehlschlagen" (ERR ist immer 0, wird im Test nach jeder Aktion abgefragt und ausgegebn, ist wegen der Übersichtlichkeit hier weg gelassen), weil die entsprechende Hardware nur mit 4,5 V versorgt wird?