Forum: Mikrocontroller und Digitale Elektronik I2C-Bus, Probleme mit SDA


von Markus (Gast)


Lesenswert?

Hallo zusammen!

Derzeit versuche ich einen Smart-Sensor (Feuchte-Sensor mit
integrierter Elektronik) an einen ATMega128 (2 Pins des Port A) mit
einem 2-wire Bus (Sensor/sehr I2C-Bus ähnlich) anzubinden.

Die SCL-Leitung(clock) funktioniert problemlos, d.h. der Takt wird
übertragen (Pin A0 ist als normaler Ausgang definiert). Jedoch gibts
mit der SDA-Leitung(data) Probleme. Die Data-Leitung soll bidirektional
betrieben werden, d.h. Daten werden vom MC an den Sensor übermittelt
(jeweils 1 Byte) und der Sensor antwortet auf der gleichen Leitung
(9.Bit) bei jedem übertragenen Byte mit Acknowledge (ACK = 1) oder
Not-Acknowledge(NAK = 0) und überträgt dann Daten mit 2 x 1 Byte an den
MC.

Wie muss ich den Data-Pin des Ports A von meinem Atmega konfigurieren?
Jedesmal umschalten von Ein- auf Ausgang?

Extern sind 2 Pull-up Widerstände (5,6k) vorgesehn.
Bisher ist der Datenpin immer auf high und wenn auf low geschaltet
geschaltet werden soll, bricht die spannung nur auf etwa 4 V zusammen.


Was könnte eurer Meinung nach nicht stimmen?

Vielen Dank schon mal für eure Hilfe!
Grüße,

Markus

von Dirk D. (dirkd)


Lesenswert?

Hi,

Normalerweise schreibst Du auf das PORT-Bit eine 0 und togglest die
Bits mit dem DDR Bit.

Also

PORTA = 0x00;

DDRA &= ~0x01; Bit 0 auf Eingang => externer Pull-Up zieht Leitung auf
1

DDRA |= 0x01; Bit 0 auf Ausgang => Leitung sollte auf low getrieben
werden.

Lesen:

DDRA &= 0x01; Eingang

Bit = (PINA & 0x01); Bit einlesen

Dann ist noch wichtig bei welcher Clock-Flanke die Daten übernommen
werden.


Gruß

      Dirk

von Markus (Gast)


Lesenswert?

Vielen Dank!
Das war die Lösung des Problems!!
Grüße,
Markus

von Dirk D. (dirkd)


Lesenswert?

Freut mich,  auch wenn ich beim Einlesen ein ~ unterschlagen habe ;-)

Dirk

von Markus (Gast)


Lesenswert?

Das hab ich zum Glück bemerkt.
Also nochmals vielen Dank!

Markus

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.