Hallo fredred,
Zitat Zitat von fredred Beitrag anzeigen
Guten Tag Herr Searcher,
Komisch so angesprochen zu werden. Ich duze jeden außer er verlangt explizit das siezen. Ist allgemeiner Gebrauch im Roboternetz. Also einfach Searcher und das Du, oder?

Dumm war nur das "Const 24c64r", da fehlt das letzte Bit. War nur ein Copyfehler.
Bitte um Entschuldigung. Natürlich muss da noch eine 1 dran sein.
Brauchst Dich nicht entschuldigen; passiert doch jedem mal. Aber die CODE Tags könntest Du mal nutzen

Lasse die Variable einfach hoch zählen. Nach Erfolgreichen Test und Beendigung meiner Freudensprünge gleich mal versucht den Adressbereich für die nächsten Single-Variablen anzuhängen. Oh Oh Oh schon wieder Erfolglos.
Vermute die vielen Sprünge haben nicht nur meine Knochen belastet sonder auch mein Gehirn noch mehr geschädigt
Habe versucht Deinen Code hinzubiegen und ihn in CODETAGS unten eingefügt. Besser lesbar als Deiner, oder? Hoffe die Kommentare sagen genug, sonst nachfragen.

‚??? Dies kann ich nicht nachvollziehen ???
Mem_addr = Mem_addr_first_store_loc 'Speicheradresse für ext. EEPROM initialisieren
Mem_addr ist "overlayed" von Mem_addr_low_byte und Mem_addr_high_byte, die beim Schreiben und Lesen immer auf die aktuelle Speicheradresse im EEPROM zeigen müssen. Mem_addr wird also ständig verändert und muß deshalb vor dem Schreiben bzw vor dem Lesen einer Single auf einen sinnvollen Wert gebracht werden. War das die Frage

Config Base = 0 'Array Indexe beginnen mit 0
‚???????????????????????????????????????
Defaultmäßig beginnen die Arrayindexe mit 1. Wenn sie mit 0 beginnen erleichtert es einige Dinge besonders bei Adressrechnungen, da zB EEPROM Speicheradressen bei 0 beginnen.
DIM AR(2) as Byte hat MIT dem Kommando 3 Elemente: AR(0), AR(1), AR(2)
DIM AR(2) as Byte hat OHNE dem Kommando 2 Elemente: AR(1), AR(2)

HIER MEIN VERSUCH (erst mal schreiben)
6 Single pro Aktion hintereinander schreiben und nach nächster Aktion die 6 Single anhängen bis Eeprom voll.
Code sollte nun die 6 Singles schreiben - jedoch nicht getestet. Die Variable "Aktionen" wird zur Berechnung der Speicheradresse weiterverwendet aber nun erst zum Ende der Hauptschleife erhöht. Abbruchbedingung habe ich keine gefunden. EEPROMS sind nicht unendlich beschreibbar. Zu oft in einer schnellen Schleife zerstört sie.

‘??? Weis auch hier nicht warum ???
Four_byte_var_read = 0 'Zurückgelesene Single "löschen"
Diente einer Kontrolle. Wenn im Programm beim Print eine 0 rauskam, wußte ich, das nicht vom EEPROM gelesen wurde. Nicht wichtig für die Funktion.

Wie geschrieben habe ist schon ein Erfolgserlebnis. Dumm für mich ist nur, dass die Vermutung aufkommen könnte ich möchte ein fertigen Code. Aber nach 525 Test- .BAS und 1889 Progmmed
(nur für diesen I²C Eeprom), ohne Endergebnis, benötigt man schon Hilfe.
Kein Problem solange man merkt, daß sich jemand Mühe gibt und das meine ich bei Dir zu erkennen. Ich selbst bin auch kein Profi und lerne auch gleich mit.

Code:
'HIER MEIN VERSUCH (erst mal schreiben)
'6 Single pro Aktion hintereinander schreiben und nach nächster Aktion die 6 Single anhängen bis Eeprom voll.

'!!! Als Array geändert Number_from_rs232 !!!

Dim Mem_addr_first_store_loc As Word    'nicht mehr als Const sondern Variable, ist defaultmäßig auf 0

Dim Number_from_rs232(7) As Single
Dim Aktionen As Byte
Aktionen = 0                            'ist sowieso defaultmäßig auf 0
Do
  Wait 2

                                  'If Mem_addr = 4 Then Mem_addr = Mem_addr_low_byte * Aktionen
  Mem_addr_first_store_loc = Aktionen * 24       '24 = 6 Singles * 4 Byte (ein Single belegt 4 Byte)

  For Z = 0 To 5                        'for-next mit 0 beginnen lassen
    If Z = 0 Then Number_from_rs232(0) = 100.10
    If Z = 1 Then Number_from_rs232(1) = 200.20
    If Z = 2 Then Number_from_rs232(2) = 300.30
    If Z = 3 Then Number_from_rs232(3) = 400.40
    If Z = 4 Then Number_from_rs232(4) = 500.60
    If Z = 5 Then Number_from_rs232(5) = 600.60

    Four_byte_var_write = Number_from_rs232(z)       'Single Variable mit irgendeiner Zahl belegen
                                                   'habe ich mit [Number_from_rs232(7) As Single] gemacht

    '??? Weis auch hier nicht warum ???
    'Four_byte_var_read = 0              'Zurückgelesene Single "löschen"

    '### BEGINN ext. EEPROM schreiben (byte write method) ###
    Mem_addr = Mem_addr_first_store_loc 'Speicheradresse für ext. EEPROM initialisieren
    For J = 0 To 3                      'Laufschleife um 4 Bytes zu schreiben
      I2cstart
      I2cwbyte Dev_addr_write           'Sendet ext. EEPROM Adresse zum Schreiben
      I2cwbyte Mem_addr_high_byte       'Sendet Speicher-Schreibadresse
      I2cwbyte Mem_addr_low_byte        'Sendet Speicher-Schreibadresse
      I2cwbyte Byte_var_write(j)        'Sendet Datenbyte
      I2cstop
      Mem_addr = Mem_addr + 1           'Schreibadresse mit jedem Schleifendurchlauf erhöhen
      Waitms 10                         'Warten auf ext. EEPROM
    Next J
  Next Z
  '### ENDE ext. EEPROM schreiben (byte write method) ###
  Print "Number written to ext. EEPROM: " ; Four_byte_var_write

  Incr Aktionen                         'Aktionen erst am Ende der Loop erhöhen

Loop
Gruß
Searcher