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:
Eigendlich sollten die Daten immer im Format :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
[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:
Ich hoffe sehr das mir einer von euch helfen kann,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 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







Zitieren

Lesezeichen