mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-Protokoll Problem


Autor: Frederic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde,
ich kämpfe mich so langsam durch das Protokoll des I2C-Busses und es 
funktioniert schon eine ganze Menge.
Leider treten beim Schreiben der Daten hin und wieder Probleme auf.
Nach dem Schreiben des Device Select Codes, der Speicheradresse und des 
ersten Datums wird dies nicht mit dem erwarteten Ack des Speicherchips 
quittiert.
Erstaunicherweise hängt der Erfolg vom Inhalt des Datums ab!

Wenn das niederwertigste Datenbit nicht gesetzt ist, funktioniert das 
Schreiben immer.

Fehler, also das nicht Quittieren, erzeugt meist ein Datum, bei dem das 
niederwertigste Bit gesetzt ist; ist aber leider nicht immer so.

0000 0001: n.i.O.
1111 1111:   i.O.
0000 1001: n.i.O.
0000 1011: n.i.O.
0000 0010:   i.O.
0000 1010:   i.O.
1111 0111:   i.O.
1110 1111:   i.O.
0110 1111: n.i.O.
0110 1110:   i.O.

Sieht jemand ein Muster darin?


Der Zugriff erfolgt auf ein serielles EEPROM: Atmel AT24C64A

Bitte um Hilfe

Danke im Voraus,
Frederic

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt auf den ersten Blick ;-) wie eine Verschiebung deiner Ansteuerung 
um ein Bit. Denk dran, dass nach jedem geschriebenen Byte ein ACK bit 
kommt, welches der EEPROM steurt. D.H. dein Master muss in dem Fall eine 
1 ausgeben, sprich den SDA Ausgang hochohmig schalten.

MfG
Falk

Autor: CSpecker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hatte mal ein ähnliches Problem. In dem Datenblatt des Herstellers war 
leider nicht vermerkt, daß der Chip eine latenzzeit zum schreiben 
benötigt, die aber unbedingt eingehalten werden muß.
Vielleicht löst das Dein Problem?

Autor: Frederic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk:
Gebe immer nach einem Byte eine 1 für das ACK-Bit aus. Funktioniert 
bereits beim Device Select Code und den zwei Bytes für die 
Speicheradresse, sowie bei vielen Datentelegrammen (im ersten Posting 
mit i.O. gekennzeichnet).


@CSpecker:
Denke nicht das es daran liegt, da ich einen langsamen Clock (50Hz) 
benutze. Habe die Möglichkeit auch in Betracht gezogen, dabei würde aber 
der Chip den Clock auf 0V ziehen (Clock-Stretching) und das würde ich am 
Oszilloskop sehen.
Ein-Zeit = Aus-Zeit = 10ms


Gibt es eine maximale Zeit bzw. Minimalfrequenz für den Clock? In dem 
Datenblatt 
(http://pdf1.alldatasheet.com/datasheet-pdf/view/83...) 
ist dazu keine Angabe zu finden.
Puls-Pause vom Clock ist gleich (je 10ms), ist das erlaubt?
Kommt bei diesen Zeiten bereits das "Clock-Stretching" zum Zuge?

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Puls-Pause vom Clock ist gleich (je 10ms), ist das erlaubt?
> Kommt bei diesen Zeiten bereits das "Clock-Stretching" zum Zuge?

Das glaube ich kaum. Sooo schnarchlangsam ist der EEPROM nicht.

MfG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.