The BME280 uses a fixed I2C address so you can't have more than one on a bus.
If you look at the I2C.bas module you'll see that the pins used for SCL/SDA are fixed at compile time using '#option'
statements... you can't change them at runtime.
- Code: Select all
module I2C
' default pin settings
#if defined(_A5) and defined(_A4)
#warning "system A5 A4 definitions used"
#option I2C_SCL = _A5
#option I2C_SDA = _A4
#else
#option I2C_SCL = PORTB.8
#option I2C_SDA = PORTB.9
#endif
Probably the easiest way to do this is to use multiple copies of the I2C.bas module, one for each of the
BME280's. That way each BME will have its own bus and you can assign different pins to each device.
The steps to do this are as follows:
1) copy I2C.bas to I2C1.bas
2) edit I2C1.bas and replace all occurences of "I2C" with "I2C1"
3) save the file
4) repeat 1-3 for each new bus, incrementing the number... I2C2, I2C3, I2C4, etc
In your main program add 'imports' for each of the I2Cx.bas modules you've created.
Be sure to set the two "#option I2Cx_SCL = PORTx.0" and "#option I2Cx_SDA = PORTx.0" settings with the
appropriate bus number 'x' and port pin definitions before including the files.
To use them, reference the module name and the function:
- Code: Select all
#option I2C1_SCL = PORTB.0
#option I2C1_SDA = PORTB.1
imports I2C1
#option I2C2_SCL = PORTB.2
#option I2C2_SDA = PORTB.3
imports I2C2
#option I2C3_SCL = PORTB.4
#option I2C3_SDA = PORTB.5
imports I2C3
sub main()
I2C1.Start()
I2C1.Stop()
I2C2.Start()
I2C2.Stop()
I2C3.Start()
I2C3.Stop()
end sub