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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten