IOW56 und Bosch BMP085

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW56 und Bosch BMP085

Post by Christoph Jung »

int _tmain(int argc, _TCHAR* argv[])
{

IOWKIT_HANDLE iowHandle;
iowHandle = IowKitOpenDevice();

if (iowHandle != NULL)
{
printf("Device Open Successful\n"); //OPEN DEVICE
}
else
{
printf("Device Open Failed\n");
}

IOWKIT56_SPECIAL_REPORT report;

memset(&report, 0, IOWKIT56_SPECIAL_REPORT_SIZE);
report.ReportID = 0x01; // Choose IIC-Mode
report.Bytes[0] = 0x01; // Enable IIC-Mode
report.Bytes[1] = 0x02; // IIC Speed 50kHz
IowKitWrite(iowHandle,IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT56_SPECIAL_REPORT_SIZE);


memset(&report, 0, IOWKIT56_SPECIAL_REPORT_SIZE);
report.ReportID = 0x02; // Write-Mode
report.Bytes[0] = 0x82; // Start OHNE Stop = 1, 2 Bytes will be sent
report.Bytes[1] = 0xEE; // Device-Address of bmp085 write
report.Bytes[2] = 0xAA; // calibrationdata register AAh
IowKitWrite(iowHandle,IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT56_SPECIAL_REPORT_SIZE);
IowKitRead(iowHandle, IOW_PIPE_SPECIAL_MODE, (char*) &report, IOWKIT56_SPECIAL_REPORT_SIZE); //Die Requestantowrt lesen und auswerten wenn gewünscht

memset(&report, 0, IOWKIT56_SPECIAL_REPORT_SIZE);
report.ReportID = 0x03; // Read-Mode
report.Bytes[0] = 0x02; // Start & Stopbit = 1, 2 Bytes will be read //REPEATED START, da bei ReportID 2 das Stopbit nicht gesetzt.
report.Bytes[1] = 0xEF; // Device-Address of BMP085 read
IowKitWrite(iowHandle,IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT56_SPECIAL_REPORT_SIZE);
IowKitRead(iowHandle, IOW_PIPE_SPECIAL_MODE, (char*) &report, IOWKIT56_SPECIAL_REPORT_SIZE);

short AC1, AC2, AC3;

AC1 = ( report.Bytes[1] << 8 ) | report.Bytes[2];


IowKitCloseDevice(iowHandle);

return 0;
}

Ansonsten sieht der Code korrekt aus. Evtl. ist die Hardware falsch verdrahtet?
Hat das All-In-One Tool denn irgendwas brauchbares geliefert?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 und Bosch BMP085

Post by Guido Körber »

I2C Read hat beim IO-Warrior keine Flags für Start und Stop Condition, die werden in jedem Falle erzeugt, also wurde in diesem Fall versucht $C2 Bytes (=194 dec) zu lesen.
fstfrs11
Posts: 23
Joined: Mon Sep 27, 2010 11:31 am

Re: IOW56 und Bosch BMP085

Post by fstfrs11 »

Also hardwaretechnisch müsste alles stimmen. Mit ALL-In-ONE bekomme ich Werte zurück.
Beim Lesen habe ich C2 durch 02 ersetzt, war mein Fehler. Leider passiert immer noch nichts?
Was könnte sonst noch sein? Ich bin absolut ratlos. Müssen vielleicht in Visual Studio irgendwelche Einstellungen vorgenommen werden? (Multibyte Zeichensatz verwende ich bereits). Ich habe auch zusätzlich iowkit.lib hinzugefügt.

Grüße
fstfrs11
Posts: 23
Joined: Mon Sep 27, 2010 11:31 am

Re: IOW56 und Bosch BMP085

Post by fstfrs11 »

Oh, ich glaube jetzt funktioniert was!

Vielen Dank Euch! Ist echt n super Forum hier :-)
fstfrs11
Posts: 23
Joined: Mon Sep 27, 2010 11:31 am

Re: IOW56 und Bosch BMP085

Post by fstfrs11 »

Hallo, da Christoph Jung sich schon mit dem Sensor beschäftigt hat mit dem auch ich arbeite, richtet sich diese Frage speziell an Ihn:

Sie schreiben bei der Berechnung des Drucks folgendes:

//calc true pressure
B6 = B5 - 4000;
X1 = (B2 * (B6 * B6 / pow(2.0,12))) / pow(2.0,11);
X2 = AC2 * B6 / pow(2.0,11);
X3 = X1 + X2;
//B3 = ((AC1 * 4 + X3) << oss + 2) / 4;
B3 = ((AC1 * 4 + X3)) / 4;


Die vorletzte Zeile (die auskommentiert ist) ist die Zeile die laut Datenblatt des Sensors stimmen müsste. Aber mit dieser
kommen falsche Werte heraus. Mit der letzten Zeile stimmen die Werte. Woher kommt das? Wieso muss der LinksShift weggelassen werden?

Grüße
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW56 und Bosch BMP085

Post by Christoph Jung »

Ich hatte auch große Probleme mit der im Datenblatt aufgeführten Berechnung. Ich habe mit Google einen Beitrag gefunden wo jemand die Formel so angepasst hat und die Werte danach plausibel waren. Darum hab ich das angepasst. Leider hab ich diesen Link nicht mehr...

Wenn ich die Berechnung genau nach der Formel im Datenblatt mache, dann bekomme ich immer einen recht hohen Wert beim Druck heraus (über 2000 hPa) und das ist etwas abwägig finde ich.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
fstfrs11
Posts: 23
Joined: Mon Sep 27, 2010 11:31 am

Re: IOW56 und Bosch BMP085

Post by fstfrs11 »

Hallo,

ich habe bezüglich der Berechnung für den BMP085 herausgefunden wo der Fehler im Datenblatt liegt:
Es fehlt eine Klammer! Die Zeile muss heißen:

B3 = (((AC1 * 4 + X3) << oss) + 2) / 4;

Dann funktionierts...

Vielleicht hilfts ja jemandem weiter!

Viele Grüße
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 und Bosch BMP085

Post by Guido Körber »

Ist das Problem in einer aktuellen Version des Datenblattes korrigiert, oder sollten wir das mal als Fehlermeldung an Bosch schicken?
fstfrs11
Posts: 23
Joined: Mon Sep 27, 2010 11:31 am

Re: IOW56 und Bosch BMP085

Post by fstfrs11 »

In dem Datenblatt das auf der Bosch Sensortec Seite angeboten wird ist bislang nichts korrigiert.

MfG
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 und Bosch BMP085

Post by Guido Körber »

OK, dann werden wir das mal als Fehlerreport einreichen.
Post Reply