Hallo,

Zitat Zitat von pebisoft
hallo, es läuft nicht. werde mir jetzt den 24c16 kaufen und dann noch einmal probieren. wenn ich die beiden steuerleitungen an den c-control schliesse, kann ich unter der adresse 162/163 schreiben und lesen.
meine pinbelegung des 24c65 : a0,vcc an +5volt, a1,a2,gnd an masse
scl, sda an die angegebenen pins. ein pin ist frei ,der wp.
im anhang mein programm.
mfg pebisoft
ich hatte auch große Probleme einen 24C16 anzusprechen.
Es hat alles ewig lange gedauert, das Schreiben und Lesen.
Zwischen 2 Anzeigen beim Lesen vergingen rund 20 Sekunden und der gelesene Wert war immer 255.
Geholfen hat bei mir für SLC und SDA andere Pins zu nehmen.
Ich hatte zuerst portc.5 für SCL und portc.4 für SDA.
(ist im Datenblatt des mega8 in der Pinbelegung so vorgegegeben, Hardware?)
Habe dann mal portb.1 und portb.0 genommen und alle geht.
Warum weiß ich aber nun auch nicht.
Pin WP muß auf GND, zumindest beim 24c16, sonst ist eine Hälfte schreibgeschützt.
Ich versuche mal das Bascom Programm hier zu posten,
hoffentlich geht das hier.

Code:
' Test den 24C16 über I2C anzusprechen

$crystal = 8000000
$regfile = "m8def.dat"
$baud = 19200

Config Scl = Portb.1
Config Sda = Portb.0

Const Addressw = 160                                        'write addresse
Const Addressr = 161                                        'read addresse
Dim I As Byte
Dim Adres As Byte
Dim Wert As Byte

' zum Test Adressen 1 bis 3 schreiben
Print "3 Werte Schreiben"
For I = 1 To 3
   Print I;
   Input " Gib Wert  ein: " , Wert
   Adres = I
   ' Wert = 100 + I
   Gosub Write_eeprom
Next
Print

Print "Lesen "
Print

Do
For I = 1 To 3
   Adres = I
   Gosub Read_eeprom
   Print I ; "=" ; Wert ; " ";
Next
Print
Wait 1
Loop
End

'sample of writing a byte to EEPROM AT2404
Write_eeprom:
    I2cstart                                                'start condition
    I2cwbyte Addressw                                       'slave address
    I2cwbyte Adres                                          'asdress of EEPROM
    I2cwbyte Wert                                           'value to write
    I2cstop                                                 'stop condition
    Waitms 10                                               'wait for 10 milliseconds
Return


'sample of reading a byte from EEPROM AT2404
Read_eeprom:
   I2cstart                                                 'generate start
   I2cwbyte Addressw                                        'slave adsress
   I2cwbyte Adres                                           'address of EEPROM
   I2cstart                                                 'repeated start
   I2cwbyte Addressr                                        'slave address (read)
   I2crbyte Wert , Nack                                     'read byte
   I2cstop                                                  'generate stop
Return
Vielleicht hilft es ja.