Forum: Mikrocontroller und Digitale Elektronik Probleme beim Beschreiben eines 24LC64 EEPROM


von The SphereX (Gast)


Lesenswert?

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

von The SphereX (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.