Guten Tag,
wie der Titel schon sagt, versuche ich den BME280 als OneWire Sensor zu
betreiben. Da ich kein Breakout Board finden konnte, habe ich mir das
mal selbst zusammengebraten. Der DS28E17 antwortet auch schonmal. Mit
dem weiteren Auslesen hab ich aber noch so ein paar Verständnisprobleme.
Ich stelle das Auslesen mal statisch als Arduino Code dar.
1 | BME.reset();
|
2 | BME.select(BME280); // ROM command: Match ROM [55h]
|
3 | BME.write(0x2D); // Device command: Write, Read Data with Stop(2Dh)
|
4 | BME.write(0xEC); // I2C Slave Address
|
5 | BME.write(0x01); // Number of data bytes to be written
|
6 | BME.write(0xFD); // I2C Register to read
|
7 | BME.write(0x02); // Number of data bytes to be read
|
8 | BME.write(crc); // CRC 16
|
1. Der BME280 hat mit SDO auf GND eine 7bit Adresse von 0x76. Der
DS28E17 erwartet eine 7bit Adresse und schaltet das R/W bit selbständig.
Ist es dann korrekt 0xEC zu senden?
2. Der DS28E17 erwartet einen CRC16 auf die gesendeten Bytes. In der
OneWire Library sind ja CRC16 Routinen enthalten. Dort muss aber ein crc
Wert übergeben werden. Wie hab ich das zu verstehen?
1 | uint16_t OneWire::crc16(const uint8_t* input, uint16_t len, uint16_t crc) {
|
2 | ...
|