Hallo Zum schalten einer LED über den I2C Bus verwende ich diesen Code:
1 | int main(void) |
2 | { // Hauptprogramm |
3 | i2c_init (); |
4 | i2c_start(adr1_w); // Schreibbefehl adr 1 |
5 | // 1.Zahl LED 5-8, 2.Zahl LED 1-4
|
6 | i2c_write(0xff); // Alle Pins des PCF auf 0 0xff |
7 | //i2c_stop();
|
8 | |
9 | while(1) |
10 | { // Hauptschleife |
11 | i2c_write(0xff); // Alle Pins des PCF auf 0 |
12 | i2c_start(adr1_r); // Starte Lesezugriff |
13 | d=i2c_readNak(); // Schreib Leseergebnis in d |
14 | //i2c_stop();
|
15 | |
16 | if (~d & 0x04) // Abfrage T3 0x04 |
17 | { // Wenn T3 gedrückt ist... |
18 | i2c_start(adr1_w); // Schreibbefehl |
19 | e = 0xaf; // Angabe LED Ausgänge 1.Zahl |
20 | i2c_write(e); // Schreibe e |
21 | //i2c_stop();
|
22 | _delay_ms(100); // 100ms warten |
23 | }
|
24 | else
|
25 | {
|
26 | e = 0xff; // alle LED aus |
27 | i2c_start(adr1_w); // Schreibbefehl |
28 | i2c_write(e); // Schreibe e |
29 | //i2c_stop();
|
30 | }
|
31 | }
|
32 | _delay_ms(100); |
33 | //i2c_stop();
|
34 | }
|
Die Befehle i2C_stop() habe ich auskommentiert. Wenn ich diese wieder freigebe läuft der Code nicht mehr. Dachte bisher. das nach jedem Aufruf des Slave ein Stop folgen muss. Denkfehler? LG KL