1 | #include <avr/io.h> //Library für die AVR-Register
|
2 | #include <util/delay.h> //Warteschleifen für die Wartezeit von 50ms
|
3 | //zwischen den Schreibzyklen
|
4 | #include "i2cmaster.h" //I²C-Master Library aus dem Projektordner
|
5 |
|
6 |
|
7 | #define F_CPU 16000000UL //16Mhz Quarzfrequenz
|
8 |
|
9 | #define SCL_CLOCK 100000L //I²C-Takt festlegen
|
10 |
|
11 | #define SRF02_1 0xE0 //Standard Slave-ID des SRF02
|
12 | #define SRF02_2 0xE2 //Neue Slave-ID
|
13 |
|
14 | int main () //Hauptprogramm
|
15 | {
|
16 | unsigned char ret; //Return-Variable
|
17 |
|
18 | DDRB=0xff; //PortB als Output definieren
|
19 | PORTB=0xff; //LEDs sind Low-Aktiv, sollen zu Beginn nicht leuchten
|
20 |
|
21 | i2c_init(); //I²C initialisieren
|
22 | ret=i2c_start(SRF02_1+I2C_WRITE); //Slave-ID und Schreibmodus setzen
|
23 | if (ret) //Startbedingung fehlgeschlagen
|
24 | { //(Eventuell kein Teilnehmer am I²C-Bus) =>
|
25 | i2c_stop(); //I²C-Bus wieder freigeben
|
26 | PORTB=0x00; //und alle LEDs aktivieren => Fehler
|
27 | }
|
28 | else
|
29 | { //Startbedingung OK
|
30 | i2c_write(0x00); //Register0
|
31 | i2c_write(0xA0); //erster Wert zum ändern der Slave-ID
|
32 | i2c_stop(); //Bus freigeben
|
33 |
|
34 | _delay_ms(50); //50ms warten, wie im DB angegeben
|
35 |
|
36 | i2c_start(SRF02_1+I2C_WRITE); //Slave-ID und Schreibmodus
|
37 | i2c_write(0x00); //Register0
|
38 | i2c_write(0xAA); //zweiter Wert zum ändern der Slave-ID
|
39 | i2c_stop(); //Bus freigeben
|
40 |
|
41 | _delay_ms(50); //wieder 50ms warten, wie im DB angegeben
|
42 |
|
43 | i2c_start(SRF02_1+I2C_WRITE); //Slave-ID und Schreibmodus
|
44 | i2c_write(0x00); //Register0
|
45 | i2c_write(0xA5); //dritter Wert zum ändern der Slave-ID
|
46 | i2c_stop(); //Bus freigeben
|
47 |
|
48 | _delay_ms(50); //wieder 50ms warten, wie im DB angegeben
|
49 |
|
50 | i2c_start(SRF02_1+I2C_WRITE); //Slave-ID und Schreibmodus
|
51 | i2c_write(0x00); //Register0
|
52 | i2c_write(SRF02_2); //neue Slave-ID des SRF02
|
53 | i2c_stop(); //Bus freigeben
|
54 | }
|
55 | }
|