Guten morgen,

ich versuche nun schon seit Wochen meine Daten in den speicher zu schreiben, mitlerweile funktioniert das auch so weit. Nur leider habe ich immernoch ein großes problem und ich kann den fehler einfach nciht finden..

Der verwendete Controller ist ein AT-Mega 32 @ 16MHz

Ich schreibe in den Speicher pro Minute 18 Byte, aber machmal scheint er etnweder die Werte an die falsche speicherstelle zu schreiben, oder sie falsch aus zu lesen, hier das ergebinss:

Code:
20.5 8:33 21,0 21,5 1
20.5 8:34 21.5 8:38 21,0 22,0 1 21,5 22,0 1
20.5 8:36 21,0 22,0 1
20.5 8:37 21,5 22,0 1
20 22,0 1,0 22,5 1 22
20.5 8:39 21,5 22,0 1
20.5 8:40 21,5 22,0 1
20.5 8:41 21,5 8:45 21,5 22,0 1 21,5 22,0 1
20.5 8:43 21,5 22,0 1
20.5 8:44 21,5 22,0 1
20.5,0 1,0 22,5 1 22
20.5 8:46 21,5 22,0 1
20.5 8:47 21,5 22,0 1
20.5 8:48 21,5 22 10,
20.5 8:49 21,5 22,0 1
20.5 8:50 21,5 22,0 1
20.5 8:51 21,5 22,0 1
Eigendlich sollten die Daten immer im Format :
[Darum Zeit Temp1 Temp2 1] geschrieben werden.

Aber wenn ihr auf die Uhrzeit achtet werdet ihr sehen das die Zeilen durcheinander geraten. Aber ich kann mit ncioht vorstellen das dass beim Auslesen geschiet, da ich da nur 1 mal die Adresse übertrage und dann einen "sequential read" ausführe.

Hier einaml der code zum lesen und schreiben:

Code:
Writelog:
   Dim Ah As Byte
   Dim Al As Byte
   If E_adress < 32000 Then
      Ah = High(e_adress)
      Al = Low(e_adress)
      I2cstart
      I2cwbyte &B1010_1110
      I2cwbyte Ah
      I2cwbyte Al
      I2cwbyte Ff
      I2cwbyte G_dated
      I2cwbyte Pu
      I2cwbyte G_datem
      I2cwbyte Le
      I2cwbyte G_timeh
      I2cwbyte Dp
      I2cwbyte G_timem
      I2cwbyte Le
      I2cwbyte T1_t
      I2cwbyte Ko
      I2cwbyte T1_n
      I2cwbyte Le
      I2cwbyte T2_t
      I2cwbyte Ko
      I2cwbyte T2_n
      I2cwbyte Le
      I2cwbyte 1
      I2cstop
      I2cstop
      Waitms 10
      E_adress = E_adress + 18
      'Print "Daten Geschrieben bis " ; E_adress
   End If
Return

Readlog:
   Dim Ih As Byte
   Dim Il As Byte
   Dim Logcom As Byte
   Print "Lese Eeprom"
   E_adress = E_adress - 1

      G_i2 = 100
      Ih = High(g_i2)
      Il = Low(g_i2)
      I2cstart                                              'generate start
      I2cwbyte &B1010_1110                                  'slave adsress
      I2cwbyte Ih                                           'address of EEPROM
      I2cwbyte Il
      I2cstart                                              'repeated start
      I2cwbyte &B1010_1111

   For G_i = 100 To E_adress
      If G_i = E_adress Then
         I2crbyte Logcom , Nack
      Else
         I2crbyte Logcom , Ack
      End If

      Select Case Logcom
            Case 112 : Print
            Case 146 : Print ".";
            Case 132 : Print " ";
            Case 144 : Print ",";
            Case 158 : Print ":";
            Case Is < 100 : Print Logcom;
            Case Else : Print Logcom;
      End Select

   Next G_i
      I2cstop

   E_adress = E_adress + 1
   Print
   Print "Eeprom Gelesen"
Return
Ich hoffe sehr das mir einer von euch helfen kann,
ich selbst hatte schon vermutet das eventuell bei schreiben die adresse nicht fehlerfrei übermitelt wird, aber ich weiß nicht wie ich das beheben könnte, oder überprüfen könnte.

Danke für eure Hilfe
Michael