Forum: Mikrocontroller und Digitale Elektronik ATMega32 mit I2C


von Peter Kutsch (Gast)


Lesenswert?

Hi
ich habe da ein Problem mit den AT24C256 EEproms. Das TWI Testprogramm
des WINAVR Compilers liefert folgendes Ergebnis:
0x00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xb0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xe0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xf0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
Calling ee24xx_write_page(55, 44, 0xcb) => 9
Calling ee24xx_write_page(64, 35, 0xd4) => 35
Wrote 44 bytes.
0x00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xb0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xe0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0xf0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
done.
An dem I2C-Bus hängen neben dem AT24C256 noch ein PCF8574AP und eine
PCF8583 RTC. Die RTC und die Porterweiterung funktionieren einwandfrei.
Nur das AT24C256 macht Probleme. Weder beim Lesen noch beim Schreiben
treten Fehler auf, aber es steht beim Lesen immer nur =xFF drin. Kann
mir da jemand weiterhelfen? Ich habe jetzt bereits mehr als eine Woche
verbraten, aber das Teil will einfach nicht. Der WP Pin des AT24C256
hängt auf GND. Die SCL und SDA sind mit 4,7K Pullups bestückt.
Hat jemand eine Idee, was da falsch sein könnte?
Gruß
Peter

von Sebastian (Gast)


Lesenswert?

Hast du schon mal probiert "manuel" was zu schreiben/lesen...
also
start->adresse->epromadresse(high)->epromadresse(low)->daten->stop
??
vielleicht das high/low anderesrum.. keine ahnung steht aber im
datenblatt

von Peter Kutsch (Gast)


Lesenswert?

Hallo Sebastian
ich habe das Testprogramm des WINAVR als letzten Schritt probiert.
Vorher schon alles manuell gemacht. Das Status Register steht immer auf
dem erwarteten Wert, also Start, Stop, Data ACK etc. Aber beim Lesen
bekomme ich immer 0xff. Die anderen I2C Bausteine am Bus arbeiten ohne
Beanstandung. Das ist ja was mich so verwundert. Ich weis mir so
langsam keinen Rat mehr. Es kann doch nicht so schwierg sein, ein
AT24C256 EEPROM zu lesen und zu schreiben.
Gruß
Peter

von Sebastian (Gast)


Lesenswert?

hast du schon mal andere widerstände getestet??
ich werd wohl bald vor dem gleichen problem stehen.
habe identische teile außer dem 32iger
in manchen tutorials sind die widerstände vom i2c bus 10K, also ich
benutze auch 10k und der PCF8574AP funzt (weiter bin ich noch nicht)
vielleicht schaft es das eprom nicht die sda leitung auf low zu ziehen

von Peter Kutsch (Gast)


Lesenswert?

Hallo Sebastian
ich hatte vorher 10K PullUps und habe diese gegen 4,7k Widerstände
getauscht. Am Ergebnis hat das leider nichts geändert. RTC und
Porterweiterung arbeitet sowohl mit 4,7k als auch 10k, der AT24C256
weder noch.
Gruß
Peter

von mthomas (Gast)


Lesenswert?

Das avr-libc-Beispiel (winavr) ist fuer "kleine" Eeproms, zumindest
war das in den aelteren Versionen so, bei den groesseren Typen (ab
128?) wird die Speicheradresse anders uebertragen (2 bytes nur fuer
speicheradr.) Die Codeteile zum Senden der Adresse muessen/mussten also
etwas angepasst werden.

von Peter Kutsch (Gast)


Lesenswert?

Hallo mthomas
es ist richtig, dass bei dem AT24C256 2 Adressbyte geschickt werden.
Eine entsprechende Anpassung habe ich gemacht. Leider ohne Erfolg.
Gruß
Peter

von Peter Kutsch (Gast)


Lesenswert?

Hallo mthomas
dein Tip mit den zweii Byte Adresse war Gold wert. Ich hatte in dieser
Adressierung einen Fehler eingebaut. Nun klappt alles wunderbar.
Herzlichsten Dank.
Liebe Grüße
Peter

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.