CityJumper
20.05.2005, 08:57
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:
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:
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
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:
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:
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 "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