Hallo wenn man einen slave im Bus hat und diesen adressiert, sendet er ein ACK zurück. Wenn er falsch adressiert wirt, was macht er dann? sendet er ein NACK oder garnichts zurück? Gruss Robert
Gast
#3745580
Der I2C ist ein Bus. Stell dir vor, du hast einige Teilnehmer daran hängen und jeder quasselt auf ein Kommando das nicht an ihn ging. Nö, der IC bleibt ruhig.
Gast
#3745582
R. Freitag schrieb: > was passiert bei fehlerhafter Adresse im I2C-Bus? Nichts. Es antwortet niemand.
Testtest schrub: >Stell dir vor, du hast einige Teilnehmer daran >hängen und jeder quasselt auf ein Kommando das nicht an ihn ging. Das wäre dann praktisch so wie hier.... ;-) MfG Paul
Aha. Es besteht folgendes Problem: Ein Display mit unbekannter Adresse soll angesteuert werden. Es werde eine Startcondition und dann eine Adresse gesendet. Ein Nack würde Klarheit schaffen. Wenn nichts gesendet wird, kann ich bis zum St.Nimmerleinstag warten. Ich will aber alle max. 128 Adressen testen. Die erkannte Adresse antwortet also mir ACK. Wie lange muss ich denn warten, bis ich den nächsten Adressenwert senden kann und der slave diesen auch prüft? Grüsse Robert
Paul Baumann schrieb: > Das wäre dann praktisch so wie hier.... > ;-) > MfG Paul LOL
R. Freitag schrieb: > Aha. > > Es besteht folgendes Problem: Ein Display mit unbekannter Adresse soll > angesteuert werden. Es werde eine Startcondition und dann eine Adresse > gesendet. Ein Nack würde Klarheit schaffen. Dann sieh dir doch einfach mal an, wie die Sache mit NACK bzw. ACK am I2C Bus technisch funktioniert. Dann sollte dir die Antwort auf deine Frage eigentlich unmittelbar ins Auge springen. > Wenn nichts gesendet wird, > kann ich bis zum St.Nimmerleinstag warten. Ich will aber alle max. 128 > Adressen testen. Die erkannte Adresse antwortet also mir ACK. Wie lange > muss ich denn warten, bis ich den nächsten Adressenwert senden kann und > der slave diesen auch prüft? Weniger als eine halbe Stunde :-)
R. Freitag schrieb: > kann ich bis zum St.Nimmerleinstag warten. Ich will aber alle max. 128 > Adressen testen. Die erkannte Adresse antwortet also mir ACK. Wie lange > muss ich denn warten, bis ich den nächsten Adressenwert senden kann und > der slave diesen auch prüft? Auweia. Erst schreiben, dann nachdenken (bezieht sich auf mich und meinen geloschten Beitrag). Selbst mit Clock stretching muss ACK oder NACK in max. 10 CLK kommen, Wenn du mit 100KHz arbeitest ist das genau ?
Wenn kein Baustein antwortet entsteht durch den pullup Widerstand an SDA automatisch ein NACK. Versuche mal testweise die Adresse 0, einige Bausteine akzeptieren die als general call. Dann kann man zumindest schon mal sehen ob überhaupt eine Antwort kommt. Durchprobieren der Adressen kann man ohne großartige Pausen. Nach einem "Stop" mal 5 Takte (50µs) warten und dann wieder "Start"en.
i2cdetect -y 0 macht an jedem Rechner ziemlich genau das: einfach alle
Adressen durchprobieren und schauen wo was antwortet:
# time i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- 5c 5d 5e 5f
60: -- 61 -- -- -- -- -- -- -- 69 -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0.00user 0.00system 0:00.02elapsed
Besonders lang dauert es auch nicht, du kannst die Adressen direkt
nacheinander durchprobieren. Ich finde so immer die Adressen von
i2c-Clients, geht schneller als das Datenblatt lesen ;)
i2cdetect ist wo verfügbar?
Gast
#3746697
R. Freitag schrieb: > i2cdetect ist wo verfügbar? Linux. Wobei das für einen µC auch schnell selbst geschrieben ist. Meins sieht so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
und
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
für einen AVR.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.