bastian07
31.12.2007, 14:26
Guten morgen.
Bin gerade dabei einen Temperaturlogger zu bauen mit oben gennanten bausteinen (plus atmega8 und max232). Das ding soll temperaturen speichern und dann vom computer aus mittels einem Programm in VBA direkt in Excel eingetragen werden.
Mein Problem ist nur, so leid es mir tut, die addressierung des eeproms. Schreiben und lesen ist alles kein problem nur wenn ich mit dem unten gennanten Code arbeite, sollten ja alle werte von 1 bis 300 ins eeprom geschrieben werden und danach wieder die gleichen werte ausgelesen werden.
Nur krieg ich werte bis 255 also wenn ein byte zuende ist und dann wieder von null angefangend(siehe 24CL64.LOG)
Muss man das mit diesem overlay machen, weil ich da noch nciht so recht durchsteige oder geht das auch einfacher. Hab nämlich im Forum viele Beiträge gesehen wo es ähnlich gemacht wurde wie bei mir.
Vielleicht kann mir jemand helfen.
Dank im Vorraus und nen guten Rutsch
Bastian 07
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
Dim Lesen As Byte
Dim Wert As Integer
Dim Address As Word
Dim Speicher_addresse_high As Byte
Dim Speicher_addresse_low As Byte
Declare Sub Eeprom_write(address As Word , Wert As Integer)
Declare Sub Eeprom_read(address As Word)
For Address = 1 To 300
Incr Wert
Call Eeprom_write(address , Wert)
Waitms 10
Next Address
For Address = 1 To 300
Call Eeprom_read(address)
Print "Lese EEprom= " ; Lesen ; " Bei Adresse: " ; Address
Waitms 10
Next Address
End
Sub Eeprom_write(byval Address As Word , Wert As Integer)
Speicher_addresse_high = High(address)
Speicher_addresse_low = Low(address)
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte Speicher_addresse_high 'Sende Speicheradresse High
I2cwbyte Speicher_addresse_low 'Sende Speicheradresse LOw
I2cwbyte Wert 'Sende Wert
If Err = 0 Then
Print "ins EEprom = " ; Wert ; " Bei Adresse: " ; Address
Else
Print "Fehler beim schreiben"
End If
I2cstop
End Sub
Sub Eeprom_read(byval Address As Word)
Speicher_addresse_high = High(address)
Speicher_addresse_low = Low(address)
I2cstart 'Start I2C
I2cwbyte &B10100000 'sende Slave Adresse
I2cwbyte Speicher_addresse_high 'Sende Speicheradresse High
I2cwbyte Speicher_addresse_low 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &B10100001 'sende Slave Adresse +1 für Lesen
I2crbyte Lesen , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
End Sub
Bin gerade dabei einen Temperaturlogger zu bauen mit oben gennanten bausteinen (plus atmega8 und max232). Das ding soll temperaturen speichern und dann vom computer aus mittels einem Programm in VBA direkt in Excel eingetragen werden.
Mein Problem ist nur, so leid es mir tut, die addressierung des eeproms. Schreiben und lesen ist alles kein problem nur wenn ich mit dem unten gennanten Code arbeite, sollten ja alle werte von 1 bis 300 ins eeprom geschrieben werden und danach wieder die gleichen werte ausgelesen werden.
Nur krieg ich werte bis 255 also wenn ein byte zuende ist und dann wieder von null angefangend(siehe 24CL64.LOG)
Muss man das mit diesem overlay machen, weil ich da noch nciht so recht durchsteige oder geht das auch einfacher. Hab nämlich im Forum viele Beiträge gesehen wo es ähnlich gemacht wurde wie bei mir.
Vielleicht kann mir jemand helfen.
Dank im Vorraus und nen guten Rutsch
Bastian 07
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
Dim Lesen As Byte
Dim Wert As Integer
Dim Address As Word
Dim Speicher_addresse_high As Byte
Dim Speicher_addresse_low As Byte
Declare Sub Eeprom_write(address As Word , Wert As Integer)
Declare Sub Eeprom_read(address As Word)
For Address = 1 To 300
Incr Wert
Call Eeprom_write(address , Wert)
Waitms 10
Next Address
For Address = 1 To 300
Call Eeprom_read(address)
Print "Lese EEprom= " ; Lesen ; " Bei Adresse: " ; Address
Waitms 10
Next Address
End
Sub Eeprom_write(byval Address As Word , Wert As Integer)
Speicher_addresse_high = High(address)
Speicher_addresse_low = Low(address)
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte Speicher_addresse_high 'Sende Speicheradresse High
I2cwbyte Speicher_addresse_low 'Sende Speicheradresse LOw
I2cwbyte Wert 'Sende Wert
If Err = 0 Then
Print "ins EEprom = " ; Wert ; " Bei Adresse: " ; Address
Else
Print "Fehler beim schreiben"
End If
I2cstop
End Sub
Sub Eeprom_read(byval Address As Word)
Speicher_addresse_high = High(address)
Speicher_addresse_low = Low(address)
I2cstart 'Start I2C
I2cwbyte &B10100000 'sende Slave Adresse
I2cwbyte Speicher_addresse_high 'Sende Speicheradresse High
I2cwbyte Speicher_addresse_low 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &B10100001 'sende Slave Adresse +1 für Lesen
I2crbyte Lesen , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
End Sub