Forum: Mikrocontroller und Digitale Elektronik I2C-Problem


von Sebastian Wille (Gast)


Angehängte Dateien:

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

von Peter D. (peda)


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

von Sebastian Wille (Gast)


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

von Sebastian Wille (Gast)


Angehängte Dateien:

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

von Dirk (Gast)


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

von Sebastian Wille (Gast)


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

von Sebastian Wille (Gast)


Angehängte Dateien:

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)

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.