Hallo,
ich habe ein zusätzliches Display (TWI Basiert) an meinem Board.
Nun möchte ich dieses im Betrieb abziehen und wieder anstecken können
ohne den Atmega 16 in einen deadlock zu befördern.
Ist meine folgende Abänderung der Lib eine vernünftige Lösung, oder
sollte man das anders lösen?
1 | void I2C_WriteByte(uint8_t busAddr, uint8_t data) {
|
2 | uint8_t error = i2c_start(busAddr); // send bus address
|
3 | if (error) {//Own snipped
|
4 | scanForDevicesOnBus();
|
5 | return;
|
6 | }
|
7 | i2c_write(data); // then send the data byte
|
8 | i2c_stop();
|
9 | }
|
10 | void I2C_WriteRegister(uint8_t busAddr, uint8_t deviceRegister, uint8_t data) {
|
11 | uint8_t error = i2c_start(busAddr); // send bus address
|
12 | if (error) {//Own snipped
|
13 | scanForDevicesOnBus();
|
14 | return;
|
15 | }
|
16 | i2c_write(deviceRegister); // first byte = device register address
|
17 | i2c_write(data); // second byte = data for device register
|
18 | i2c_stop();
|
19 | }
|
20 | uint8_t I2C_ReadRegister(uint8_t busAddr, uint8_t deviceRegister) {
|
21 | uint8_t data = 0;
|
22 | uint8_t error = i2c_start(busAddr); // send device address
|
23 | if (error) {//Own snipped
|
24 | scanForDevicesOnBus();
|
25 | return data;
|
26 | }
|
27 | i2c_write(deviceRegister); // set register pointer
|
28 | i2c_start(busAddr + I2C_READ); // restart as a read operation
|
29 | data = i2c_readNak(); // read the register data
|
30 | i2c_stop(); // stop
|
31 | return data;
|
32 | }
|
Grüße Oekel