Forum: Mikrocontroller und Digitale Elektronik I2C ACK wann wieder zurück setzen


von Treiber (Gast)


Lesenswert?

Hallo

Ein ACK beruht laut µC Artikel auf setzen SDA auf Low im 9.Zyk
Wann wird/muss dieses Bit vom ACK Versender (8bit Daten-Empfänger) 
wieder zurück gesetzt werden damit der SDA Pin als Eingang "open-drain" 
wieder fungiert?

Bei mehrfachen Slaves mit gleicher Adresse steht aber auch, dass alle 
auf SDA auf LOW gezogen halten, beeinflusst dass nicht das Lesen jeden 
Slaves an diesem PIN, sind ja dann immer LOW?

Antworten wären sehr hilfreich um das Szenario besser zu verstehen, txs.

von Stefan F. (Gast)


Lesenswert?

> Wann wird/muss dieses Bit vom ACK Versender wieder zurück gesetzt werden

Unmittelbar nach dem Ende des Taktimpulses.

Wenn mehrere Slaves auf die selbe Adresse reagieren, kannst du nicht 
mehr unterscheiden, welcher und wie viele Slaves acknowledged haben.

Deswegen macht man das normalerweise nicht. In der regel hat jeder Slave 
eine eindeutige Adresse.

von Treiber (Gast)


Lesenswert?

Stefan U. schrieb:
>> Wann wird/muss dieses Bit vom ACK Versender wieder zurück
> gesetzt werden
>
> Unmittelbar nach dem Ende des Taktimpulses.

Also so in etwa?
1
SendACK (void)
2
{
3
while (!SCL); // Takt ist noch LOW, bit wird gesetzt 
4
SDA = 0;      // SDA PIN bekommt output(0)
5
delay_us(1);  // sollte man sowas einbauen oder eher weglassen?
6
SDA = 1;      // SDA PIN bekommt inputstatus ( pulluped = high )
7
}
8
9
SendNACK (void)
10
{
11
// _do_nothing
12
}


txs!

von Stefan F. (Gast)


Lesenswert?

Du ziehst die Leitung auf Low, sobald der Taktimpuls beginnt. Und du 
lässt sie wieder los, sobald der Takt endet. Also eher so:

// Warte auf Takt
while (SCL==High);
SDA=Output_und_Low;
// Warte auf Ende des Taktimpulses
while (SCL==Low);
SDA=Input;

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.