mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-Problem


Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe Probleme mit meinem I2C-Bus. Ursprünglich wollte ich einen 
Uhr-Chip (PCF8583) ansteuern. Nachdem das nicht geklappt hat, habe ich 
mich nun an einem I2C-ROM "24C32" (von Atmel) herangewagt. Wieder 
nichts.

Also habe ich mein Programm auf das Minimalste beschränkt (siehe 
Anhang!). Es wird eine Startbedingung gesendet und dann die Adresse des 
I2C-ROM (1/0/1/0/A1/A2/A3/RW und A1=A2=A3=0 (GND)). Dann sollte der Chip 
eigentlich ein Ack.-Bit senden (SDA auf GND). Genau das tut er aber 
nicht!!! Ich überprüfe das, indem ich für kein Ack. ein "B" über das 
UART an den PC sende, und für ein Ack. ein "A". Lege ich von Hand das 
Bit auf GND, zeigt mein PC auch "A" an.

Ich denke, daß meine Schaltung richtig aufgebaut ist. Die Adressierung 
(A1/A2/A3) stimmt auch. Der SDA- und der SCL-Bus ist jeweils über einen 
470-Ohm-Widerstand an VCC angeschlossen.

Ich sehe es doch auch richtig, daß High beim I2C VCC und LOW eben GND 
bedeutet, oder?!?

Für Tips bin ich echt dankbar, weil ich nun schon ewig rumprobier! :-)

Danke!!!

   Sebastian

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst den SDA nur ändern, wenn SCL = 0 ist, sonst wird es je nach 
Richtung ein neues Start bzw. ein Stop.
Beim ACK hältst Du dich aber nicht daran.


Außerdem sind 470R recht heftig, die meisten I2C-Chips sind nur für 3mA 
spezifiziert. Nimm besser 1,8k ... 10k.


Peter

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

schonmal vorab: Es klappt! :-))

Es lag wirklich an Deiner Vermutung. Ich habe den SCL schon auf LOW 
gezogen, allerdings erst, nachdem (!) ich SDA als Eingang konfiguriert 
hatte. Nun setze ich erst (!) SCL auf LOW und dann konfiguriere ich SDA 
als Eingang.

Nun weite ich das Programm wieder etwas aus ("Proceduren" für Start, 
Lesen usw.) und melde mich dann nochmal, ob immer noch alles klappt.

Die Widerstände habe ich auf 10-kOhm erhöht, danke auch für diesen Tip! 
:-)

Viele Grüße,

   Sebastian

Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nun habe ich das ganze mal schön unterteilt in Senden, Empfangen, 
Start-Bedingung usw.

Das Senden klappt immer noch, das Ack.-Bit wird vom Slave gesetzt.

Nur mit dem Lesen klappt's noch nicht so recht. Ich möchte an die 
allererste Adresse ein "S" (ASCII 83) senden und dann wieder lesen. Beim 
Lesen bekomme ich aber nur eine "0" (ASCII).

Ein Fehler kann ich leider nicht finden... Hat noch jemand (Peter!?!) 
ein Tip für mich?

Vielen Dank schonmal!!! :-)

Sebastian

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hm ich glaube das erste Bit ist reserviert erst ab den zweiten Bit kann 
man daten schreiben und wieder lesen. Ich kann ´mich aber auch irren bin 
nub.

Dirk

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Dirk,

davon hab' ich in der Doku nichts gelesen. Vielleicht meinst Du das 
Ack.-Bit?

Hat sonst noch jemand einen Tip? Wäre echt super!!!

Danke! :-)

   Sebastian

Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich hab' die Fehler (zum Glück!) alle selber gefunden und nun klappt 
alles!

Ich hänge hiermit meine I2C-Software-Lösung in Assembler als 
Include-Datei an.

Wer Fragen hat, kann hier posten oder mir mailen.

Viel Spaß damit!

Grüße und danke nochmal an die Helfer,

   Sebastian (mailto:s_wille@t-online.de)

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.