Liste der Anhänge anzeigen (Anzahl: 1)
I2C Kommunikation zwischen Nucleo STM32F103RBT6 und Sensor Honeywell HIH9120
Hallo zusammen,
ich versuche ein Temperatur- und Feuchtigkeitssensor mit dem Entwicklungsboard Nucleo STM32 zu verbinden. Dieser Sensor lässt sich mit I2C ansprechen und die Adresse ist laut Datenblatt 0x27. Nun arbeite ich mit dem mbed Compiler und habe folgendes Programm zur Kommunikation.
Mein Programmcode sieht wie folgt aus:
#include "mbed.h"
I2C i2c(PB_11, PB_10);
const int addr = 0x27;
int main() {
char cmd[2];
while (1) {
cmd[0] = 0x01;
cmd[1] = 0x00;
i2c.write(addr, cmd, 1);
wait_ms(10);
}
}
Mit einem Logic Analyzer nehme ich die Kommunikation auf um mein Problem zu beheben und stelle folgendes fest:
- Bei einer eingegebenen Adresse addr=0x26 spricht der Mikrocontroller eine Adresse 0x26 an
- Bei einer eingegebenen Adresse addr=0x27 spricht der Mikrocontroller eine Adresse 0x28 an
- Bei einer eingegebenen Adresse addr=0x28 spricht der Mikrocontroller eine Adresse 0x28 an
Das ist in meinen Augen extrem merkwürdig und ich kann mir da nicht weiterhelfen. Hat jemand Erfahrung mit dem Entwicklungsboard und kann mir bei dem Fehler auf die Sprünge helfen?
Danke für Hilfestellungen im voraus!
Angehangen das Screenshot des Logic Analyzers bei addr=0x27
Anhang 30223
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
danke erstmal für die Antwort und entschuldigung dass ich eine Woche darauf nicht reagiert habe, war aber durch andere Baustellen leider völlig eingenommen. Also deine Antwort erklärt das Problem sehr gut. Nun habe ich mir gedacht ich mache es ganz simpel, indem erstmal beginne den Sensor lediglich einen write befehl zu geben. Der Code ist recht simpel und wie folgt:
#include"mbed.h"
I2C i2c(PB_11, PB_10); //sda, scl
const int addr = 0x4E; //Adresse 0x27 um ein Bit nach links geschoben
double result=0;
int main() {
while(1){
i2c.start();
i2c.write(addr);
i2c.stop();
}
}
Das Ergebnis mit dem Logic Analyzer gemessen ist angehangen. Meiner Meinung nach sieht die I2C Kommunikation des Mikrocontrollers richtig aus, jedoch bleibt das Acknowledge des Sensors aus. Ich habe die Beschaltung gefühlt 100 mal kontrolliert und ich kann mir nicht vorstellen dass der Sensor kaputt ist. Kann mir jemand mit Erfahrung in der Kommunikation weiterhelfen und erkennt da einen Fehler?
Danke