Hi Leute !!!
Ich versuche gerade, einen 24LC64 EEPROM an einem ATTiny13A zu
betreiben. Das Auslesen von Werten funktioniert, das Schreiben jedoch
nicht. Der nachfolgende Code, der testweise die ersten 10 Byte des
24LC64 ausließt und anschließend in den internen EEPROM des ATTiny13A
schreibt, den ich dann wiederum zur Kontrolle mit dem PC auslese, läuft
also problemlos, zumindest, wenn ich davon ausgehe, daß ein neuer
(unbenutzter) 24LC64 komplett mit 0xFF beschrieben ist.
--------------------------
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 26
$swstack = 5
$framesize = 20
Dim Eeprom_adress As Byte
Dim Eeprom_byte As Byte
Dim Dummy As Eram Byte
Dim Eeprom_array(10) As Eram Byte
Config Portb.0 = Output ' Kontroll-LED
Config Sda = Portb.4
Config Scl = Portb.3
Portb.0 = 1
Waitms 500
Portb.0 = 0
For Eeprom_adress = 1 To 10
I2cstart ' Start I2C
I2cwbyte &HA0 ' sende Slave Adresse
I2cwbyte Eeprom_adress ' sende Speicheradresse
I2cstart ' Start I2C
I2cwbyte &HA1 ' Lesebefehl
I2crbyte Eeprom_byte , Nack ' Adresse auslesen
I2cstop ' Stop I2C
Waitms 30
Eeprom_array(eeprom_adress) = Eeprom_byte
Waitms 50
Next Eeprom_adress
Portb.0 = 1
Waitms 500
Portb.0 = 0
End
--------------------------
Was wie gesagt nicht funktioniert, ist das Schreiben in den EEPROM. Mit
dem nachfolgenden Code soll eigentlich in die EEPROM-Adressen 2 bis 7
der Wert 4 geschrieben werden. Beim anschließenden Prüfvorgang, d. h.
dem Auslesen von Adresse 2 bis 7, wird aber wieder nur 0xFF ausgelesen.
Ich bekomme also ein Fehlersignal, da die Werte nicht 4 entsprechen.
--------------------------
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 26
$swstack = 5
$framesize = 20
Dim Eeprom_adress As Byte
Dim Eeprom_byte As Byte
Config Portb.0 = Output ' Kontroll-LED
Config Sda = Portb.4
Config Scl = Portb.3
Portb.0 = 1
Waitms 500
Portb.0 = 0
For Eeprom_adress = 2 To 7
I2cstart ' Start I2C
I2cwbyte &HA0 ' Sende Slave Adresse
I2cwbyte Eeprom_adress ' Sende Speicheradresse
I2cwbyte 4 ' Sende Wert
If Err <> 0 Then ' Fehler beim Schreiben
Portb.0 = 1
Wait 1
Portb.0 = 0
Wait 1 ' Fehlersignal
Portb.0 = 1
Wait 1
Portb.0 = 0
End
End If
I2cstop ' Stop I2C
Waitms 20
Next Eeprom_adress
Portb.0 = 1
Waitms 500
Portb.0 = 0
For Eeprom_adress = 2 To 7 ' Auslesen der geschrieben Werte
I2cstart ' Start I2C
I2cwbyte &HA0 ' sende Slave Adresse
I2cwbyte Eeprom_adress ' sende Speicheradresse
I2cstart ' Start I2C
I2cwbyte &HA1 ' Lesebefehl
I2crbyte Eeprom_byte , Nack ' Adresse auslesen
I2cstop ' Stop I2C
If Eeprom_byte <> 4 Then ' Schreibvorgang nicht erfolgreich
Portb.0 = 1
Wait 1
Portb.0 = 0
Wait 1 ' Fehlersignal
Portb.0 = 1
Wait 1
Portb.0 = 0
End
End If
Waitms 50
Next Eeprom_adress
Portb.0 = 1
Waitms 500
Portb.0 = 0
End
--------------------------
Tja, wo liegt hier der Fehler? Die Schaltung wird mit 5 V gespeist, und
der I2C-Bus läuft mit 100 kHz. Pull-Up Widerstände sind 2 x 4k7 Ohm.
Grüße,
The SphereX
Hat sich erledigt! Ich habe die Lese- bzw. Schreibadresse nicht als High- u. Low-Byte übertragen. Das war der Fehler. Grüße, The SphereX
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.