PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C und 24CL256 problem mit software



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

CityJumper
20.05.2005, 10:57
Hi,

ich habe jetzt noch einmal eine logfile über einen längeren Zeitraum geschrieben... und mir sind gewisse Regelmäßigkeiten aufgefallen:



20.5 9:22 22,0 22,5 1
20.5 9:23 22,0 22,5 1
20.5 9:24 22,0 22,5 1,0 22,5 1 22,0 22,5 1
20.5 9:26 22,0 22,5 1
20.5 9:27 22,0 22,5 1
20.5 9:28 22.5 9:32 22,0 22,5 1 22,0 22,5 1
20.5 9:30 22,0 22,5 1
20.5 9:31 22,0 22,5 1
20 22,5 121,0 21,5 0
20.5 9:33 22,0 22,5 1
20.5 9:34 22,0 22,5 1
20.5 9:35 22,0 9:39 22,0 22,5 1 22,0 22,5 1
20.5 9:37 22,0 22,5 1
20.5 9:38 22,0 22,5 1
20.5,5 121,0 21,5 0
20.5 9:40 22,0 22,5 1
20.5 9:41 22,0 22,5 1
20.5 9:42 22,0 22:12 22,0 22,5 1 22,0 22,5 1
20.5 9:44 22,0 22,5 1
20.5 10:11 22,0 22,5 1
20.5 10 10000000000
20.5 10:13 22,0 22,5 1
20.5 10:14 22,0 22,5 1
20.5 10:15 22,0 22,5 22,0 22,5 1 22,0 22,5 1
20.5 10:17 22,0 22,5 1
20.5 10:18 22,0 22,5 1
20.5 10:190000000000
20.5 10:20 22,0 22,5 1
20.5 10:21 22,0 22,5 1
20.5 10:22 22,0 22,5 1,5 17,5 1 22,0 22,5 1
20.5 10:24 22,0 23,0 1
20.5 10:25 14,5 12,0 1
20.5 10:26 18.5 10:30 21,0 21,5 1 19,5 19,5 1
20.5 10:28 20,5 20,5 1
20.5 10:29 21,0 21,0 1
20 22,0 10000000000
20.5 10:31 21,5 22,0 1
20.5 10:32 21,5 22,0 1
20.5 10:33 21,5 10:37 22,0 22,5 1 21,5 22,5 1
20.5 10:35 21,5 22,5 1
20.5 10:36 22,0 22,5 1
20.5,5 10000000000
20.5 10:38 22,0 22,5 1
20.5 10:39 22,0 22,5 1
20.5 10:40 22,0 22:44 22,0 22,5 1 22,0 22,5 1
20.5 10:42 22,0 22,5 1
20.5 10:43 22,0 22,5 1
20.5 10 10000000000
20.5 10:45 22,0 22,5 1
20.5 10:46 22,0 23,0 1
20.5 10:47 22,0 23,0 22,0 23,0 1 22,0 23,0 1
20.5 10:49 22,0 23,0 1
20.5 10:50 22,0 23,0 1
20.5 10:510000000000


könnte es vieleicht sein das ein berechnungs fehler in high(x) und oder low(x) dafür verantwortlich ist?

es macht den anschein als würde er beim schreiben speicherzellen überspringen => fehler in der adressierung?!
was anderes könnte ich mir nicht mehr vorstellen,

hat einer von euch noch eine andere möglichkeit die low und high bytes zu erzeugen?

mfg
michael

PicNick
20.05.2005, 16:54
Hi, ich hab kein Datenblatt, aber kannst du mal checken, ob die reichenfolge der addresse-> memory stimmt ?
die schickst erst high und dann low. Is das so richtig ?

CityJumper
24.05.2005, 17:21
Danke...

habe den fehler schon selber gefunden :-)


mfg
michael