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.
> 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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.