Hi,
das verstehe ich nicht so ganz - weil ich doch schon hier das high und das lowByte zusammen bringe:
Lesen = Makeint(lesenhigh , Lesenlow)
Mein Fehler lag wo anders:
Ich habe das auslesen falsch gemacht - wenn mehrmals in einer Schleife abgefragt wird, muss mit "ACK" angezeigt werden, das es weitergeht und nach der letzten Abfrage mit "NACK" das keine weitere Bytes mehr kommen.
Mein Code funktioniert nun!! \
/
für alle die sich da auch so schwer tun wie ich:
Code:
$regfile = "m8def.dat" 'MEGA8-Deklarationen
$hwstack = 32
$swstack = 8
$framesize = 24
$crystal = 8000000 'intern 8MHz
$baud = 9600 'Baudrate definieren
'-------------------------------------------------------------------------------
'Ein / Ausgänge definieren:
'Ddrb = &B00111100 '0=Eingang
'Ddrc = &B1111111
Ddrd = &B01100011 '0=Eingang
'PullUps setzen:
'Portb = &B00000000 '1 = PullUp AKTIV
'Portc = &B0000000 '1 = PullUp AKTIV
'Portd = &B00000000 '1 = PullUp AKTIV
'-------------------------------------------------------------------------------
'Alias
Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
Led1 Alias Portd.5
Led2 Alias Portd.6
'-------------------------------------------------------------------------------
'Variablen
'-------------------------------------------------------------------------------
'Timer
'Timer1 = 2x / sec bei 8MHz
'Config Timer1 = Timer , Prescale = 256 'Teiler
'Const Timervorgabe = 49910
'Enable Timer1
'Enable Interrupts
'-------------------------------------------------------------------------------
Dim Wert As Word 'eigendlicher Wert
Dim Wert1 As Byte 'Hilfswert1
Dim Wert2 As Byte 'Hilfswert2
Dim Lesen As Word 'Auslesen
Dim Lesenlow As Byte 'Hilfswert1
Dim Lesenhigh As Byte 'Hilfswert2
Dim Adresse As Word At $160 'Die Adresse als Word-Variable
Dim Low_adresse As Byte At $160 Overlay 'Zeiger auf das erste Byte
Dim High_adresse As Byte At $161 Overlay 'Zeiger auf das zweite Byte
'SDA und SCL definieren
Config Sda = Portc.4 ' I2C-Port festlegen
Config Scl = Portc.5 ' I2C-Port festlegen
Const Ext_eeprom = 162 'I2C Geräteadresse ggf. anpassen
Wert = 64998
'-------------------------------------------------------------------------------
'Für RS232:
'On Urxc Onrxd 'Interrupt-Routine setzen
'Enable Urxc 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen
'---------------------------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------------------------------
Do
If Taster1 = 1 Then
'----schreiben----
For Adresse = 250 To 260 'Adresse geht über die Byte-Grenze
Incr Wert '1 bis Überlauf
Gosub Eeprom_schreiben
Print "schreiben ->Adres.=" ; Adresse ; "Wert=" ; Wert ; " " 'Anzeige vom schreiben
Waitms 500
Adresse = Adresse + 1 'weil ja immer 2 Bytes abgefragt werden
Next Adresse
End If
If Taster2 = 1 Then
'---lesen----
For Adresse = 250 To 260
Gosub Eeprom_lesen
Lesen = Makeint(lesenhigh , Lesenlow)
Print "lesen <-Adres.=" ; Adresse ; "Wert= " ; Lesen 'Anzeige vom lesen
Waitms 500
Adresse = Adresse + 1 'weil ja immer 2 Bytes abgefragt werden
Next Adresse
End If
Loop
'------------------------------------------------------
'- Byte (wert) auf EEprom Adresse (address) speichern -
'------------------------------------------------------
Eeprom_schreiben:
Wert1 = High(wert)
Print Wert1 ; " W1 "
Wert2 = Low(wert)
Print Wert2 ; " W2 "
I2cstart 'Start
I2cwbyte &HA0 'Sende Slavadresse
I2cwbyte High_adresse 'Sende Speicheradresse High
I2cwbyte Low_adresse 'Sende Speicheradresse LOW
I2cwbyte Wert2 'Sende Wert
I2cwbyte Wert1 'Sende Wert
I2cstop 'stop
Waitms 10
Return
'-----------------------------------------------------------------
'--- Byte (wert) von EEprom Adresse (address) lesen ---
'-----------------------------------------------------------------
Eeprom_lesen:
I2cstart 'Start
I2cwbyte &HA0 'Sende Slavadresse +1 für Schreiben
I2cwbyte High_adresse 'Sende Speicheradresse High
I2cwbyte Low_adresse 'Sende Speicheradresse Low
I2cstart 'Start
I2cwbyte &HA1 'Sende Slavadresse +1 für Lesen
I2crbyte Lesenhigh , Ack 'Lese Adresse vom EEprom
I2crbyte Lesenlow , Nack 'Lese Adresse vom EEprom
I2cstop 'Stop
Return
Lesezeichen