You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.6 KiB
119 lines
2.6 KiB
#include "Arduino.h" |
|
#include <Wire.h> |
|
|
|
uint8_t _i2caddr; |
|
|
|
//----------------------------------- |
|
void Set_I2C_Adresse(uint8_t I2C_Adr) |
|
{ |
|
_i2caddr = I2C_Adr; |
|
//Wire.setClock(10000); |
|
} |
|
|
|
|
|
//-------------------------------------------------- |
|
uint8_t I2C_read8(byte reg) |
|
{ |
|
uint8_t value; |
|
|
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.write((uint8_t)reg); |
|
Wire.endTransmission(); |
|
Wire.requestFrom((uint8_t)_i2caddr, (byte)1); |
|
value = Wire.read(); |
|
|
|
return value; |
|
} |
|
//---------------------------------------------- |
|
void I2C_write8(byte reg, byte value) |
|
{ |
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.write((uint8_t)reg); |
|
Wire.write((uint8_t)value); |
|
Wire.endTransmission(); |
|
} |
|
//--------------------------------------------- |
|
|
|
// 8bit ohne Register schreiben |
|
void I2C_write8A(byte value) |
|
{ |
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.write((uint8_t)value); |
|
Wire.endTransmission(); |
|
} |
|
//--------------------------------------------- |
|
uint16_t I2C_read16(byte reg) |
|
{ |
|
uint16_t value; |
|
|
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.write((uint8_t)reg); |
|
Wire.endTransmission(); |
|
Wire.requestFrom((uint8_t)_i2caddr, (byte)2); |
|
value = (Wire.read() << 8) | Wire.read(); |
|
|
|
return value; |
|
} |
|
//------------------------------------------ |
|
// 16 bit lesen ohne Register |
|
uint16_t I2C_read16A(void) |
|
{ |
|
uint16_t value; |
|
|
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.requestFrom((uint8_t)_i2caddr, (byte)2); |
|
value = (Wire.read() << 8) | Wire.read(); |
|
|
|
return value; |
|
} |
|
//------------------------------------------ |
|
|
|
int16_t I2C_readS16(byte reg) |
|
{ |
|
return (int16_t)I2C_read16(reg); |
|
} |
|
//--------------------------------------------- |
|
uint16_t I2C_read16_LE(byte reg) |
|
{ |
|
uint16_t temp = I2C_read16(reg); |
|
return (temp >> 8) | (temp << 8); |
|
|
|
} |
|
//------------------------------------------ |
|
int16_t I2C_readS16_LE(byte reg) |
|
{ |
|
return (int16_t)I2C_read16_LE(reg); |
|
|
|
} |
|
//---------------------------------------------- |
|
uint32_t I2C_Read24(byte reg) |
|
{ |
|
uint32_t value; |
|
|
|
Wire.beginTransmission((uint8_t)_i2caddr); |
|
Wire.write((uint8_t)reg); |
|
Wire.endTransmission(); |
|
Wire.requestFrom((uint8_t)_i2caddr, (byte)3); |
|
|
|
value = Wire.read(); |
|
value <<= 8; |
|
value |= Wire.read(); |
|
value <<= 8; |
|
value |= Wire.read(); |
|
|
|
return value; |
|
} |
|
//-------------------------- |
|
uint8_t I2C_Test(byte adr) |
|
{ |
|
uint8_t value; |
|
|
|
Wire.beginTransmission((uint8_t)adr); |
|
Wire.write((uint8_t)0); |
|
Wire.endTransmission(); |
|
Wire.requestFrom((uint8_t)adr, (byte)1); |
|
value = Wire.read(); |
|
|
|
return value; |
|
} |
|
//----------------------------------------------
|
|
|