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.