Hallo
Hier mal der Minimalcode:
Code:
$regfile = "m8def.dat"
$crystal = 10000000
$hwstack = 250
$swstack = 250
$framesize = 250
'################## Config Port's ##############################################
'-----config Port D
Config Portd = 255
'##################### Config für LCD ####################################################
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , Rs = Portb.4 , E = Portb.5
Config Lcdbus = 4
Config Lcdmode = Port
Cursor On
Cls
'############################ Config ADC #######################################
Config Adc = Single , Prescaler = Auto
Start Adc
'############################ Config I2C Bus ###################################
Config Scl = Portd.6 ' I2C-Port festlegen
Config Sda = Portd.7 ' I2C-Port festlegen
'################## Variablen ################################################## '
Dim I As Word ' zum rechnen
Dim X As Word
Dim Koordinate As Long At $113
Dim Koordinate_teil1 As Byte At $113 Overlay
Dim Koordinate_teil2 As Byte At $114 Overlay
Dim Koordinate_teil3 As Byte At $115 Overlay
Dim Koordinate_teil4 As Byte At $116 Overlay
Dim Adresse As Word At $100
Dim Low_adresse As Byte At $100 Overlay
Dim High_adresse As Byte At $101 Overlay
'---------------------------------------------
Do
For I = 1 To 10
Adresse = I
Koordinate = Koordinate + 10
Gosub Eeprom_schreiben
Locate 1 , 1
Lcd "I=" ; Adresse ; " "
Locate 1 , 5
Lcd "K=" ; Koordinate ; " "
Locate 1 , 14
Lcd "A=" ; Koordinate_teil1 ; " "
Locate 1 , 21
Lcd "B=" ; Koordinate_teil2 ; " "
Locate 1 , 28
Lcd "C=" ; Koordinate_teil3 ; " "
Locate 1 , 35
Lcd "D=" ; Koordinate_teil4 ; " "
Waitms 500
Next I
For I = 1 To 10
Adresse = I
Gosub Eeprom_lesen
Locate 2 , 1
Lcd "I=" ; Adresse ; " "
Locate 2 , 5
Lcd "K=" ; Koordinate ; " "
Locate 2 , 14
Lcd "A=" ; Koordinate_teil1 ; " "
Locate 2 , 21
Lcd "B=" ; Koordinate_teil2 ; " "
Locate 2 , 28
Lcd "C=" ; Koordinate_teil3 ; " "
Locate 2 , 35
Lcd "D=" ; Koordinate_teil4 ; " "
Waitms 500
Do
X = Getadc(3)
Waitms 100
Loop Until X > 600
Next I
Wait 2
Loop
End
Eeprom_schreiben:
'----schreiben----
I2cstart 'Start
I2cwbyte &B10100010 'Sende Slavadresse
I2cwbyte High_adresse 'Sende Speicheradresse High
I2cwbyte Low_adresse 'Sende Speicheradresse LOW
I2cwbyte Koordinate_teil1 'Sende Wert
I2cwbyte Koordinate_teil2 'Sende Wert
I2cwbyte Koordinate_teil3 'Sende Wert
I2cwbyte Koordinate_teil4 'Sende Wert
I2cstop 'stop
Waitms 10
Return
'--------------------------------
Eeprom_lesen:
'---lesen----
I2cstart 'Start
I2cwbyte &B10100010 'Sende Slavadresse
I2cwbyte High_adresse 'Sende Speicheradresse High
I2cwbyte Low_adresse 'Sende Speicheradresse Low
I2cstart 'Start
I2cwbyte &B10100011 'Sende Slavadresse +1 für Schreiben
I2crbyte Koordinate_teil1 , Ack 'Lese Adresse vom EEprom
I2crbyte Koordinate_teil2 , Ack 'Lese Adresse vom EEprom
I2crbyte Koordinate_teil3 , Ack 'Lese Adresse vom EEprom
I2crbyte Koordinate_teil4 , Nack 'Lese Adresse vom EEprom
I2cstop 'Stop
Return
'----------------------------------
Beim Auslesen kommt dann:
I=1 K=67305985.. A=10 B=20 C=30 D=40
I=2 K=84148994.. A=20 B=30 C=40 D=50
I=3 K=10099200... A=30 B=40 C=50 D=60
.
u.s.w.
Ps.:
Wenn ich bis 12 lese, kommen dann Bei B-D die Nullen nach.
Es scheint so, als würde er da nur immer ein Byte reinschreiben?!
(Statt 4 Byte hintereinader)
l.G.
Lesezeichen