Hallo
Ich habe einen Mega8 als Master, und ebenfalls einige Mega8 als Slave
mit dem I²C Bus verbunden. Mein Problem/Aufgabenstellung ist, dass die
Slaves (bis maximal 10 Stück) vom Master getrennt werden können. Da Die
Slaves auch an anderen Systemen laufen sollen, sind die Adressen über
Jumper einstellbar.
Ich möchte daher den I2C Bus, beim Start des Masters nach vorhandenen
Teilnehmern absuchen.
Ich dachte nun, ich könnte lösen, indem ich in einer Schleife an jede
Adresse etwas versuche zu senden, und dann die Variable ERR abfrage.
Also etwa so:
(Programmiere mit BASCOM)
1 | 'Scan im Bus nach Slaves
|
2 | For I = 1 To 10 'Initialisiere Variable
|
3 | Slaveadress(i) = 0
|
4 | Next
|
5 | Slaves = 0
|
6 | For I = &H40 To &HFF 'Suche nach Slaves
|
7 | I2csend I , 0
|
8 | If Err = 0 Then
|
9 | Incr Slaves
|
10 | Slaveadress(slaves) = I
|
11 | End If
|
12 | If Slaves = 10 Then Exit For
|
13 | Next
|
14 |
|
15 | If Slaves = 0 Then
|
16 | Cls
|
17 | Upperline
|
18 | Lcd "No Slaves found"
|
19 | End If
|
Das Problem ist nun, dass die Abarbeitung schon an der Zeile
hängenbleibt, da die Adresse &H40 nicht auffindbar ist.
Hat vielleicht jemand eine Idee, wie ich das lösen kann?
Vielen Dank und viele Grüße
Mike