ATMega32 mit I2C

Gast #156857
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
Gast #156858
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
Gast #156859
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
Gast #156860
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
Gast #156861
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
Gast #156862
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.
Gast #156864
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren