MS5534A
Mein neues kleines Projekt!!
Breakoutboard für den Drucksensor MS5534A
#include "mbed.h" SPI sensor(p5, p6, p7); PwmOut clk(p21); Serial pc(USBTX, USBRX); uint16_t word1 = 0; uint16_t word2 = 0; uint16_t word3 = 0; uint16_t word4 = 0; uint16_t c1 = 0; uint16_t c2 = 0; uint16_t c3 = 0; uint16_t c4 = 0; uint16_t c5 = 0; uint16_t c6 = 0; uint16_t d1 = 0; uint16_t d2 = 0; uint16_t ut1 = 0; int dT = 0; int temp = 0; int off = 0; uint16_t sens = 0; uint16_t x = 0; uint32_t p = 0; uint8_t i = 0; int main() { clk.write(0.5f); clk.period_us(30.517); sensor.frequency(500000); sensor.format(8,1); //reset pc.printf("%x ",sensor.write(0x15)); pc.printf("%x ",sensor.write(0x55)); pc.printf("%x\r\n\n",sensor.write(0x40)); //word1 pc.printf("%x ",sensor.write(0x1D)); pc.printf("%x \r\n\n",sensor.write(0x50)); word1 = sensor.write(0x00)<<8; word1 = word1 | sensor.write(0x00); pc.printf("Word1: %x\r\n\n",word1); //word2 pc.printf("%x ",sensor.write(0x1D)); pc.printf("%x\r\n",sensor.write(0x60)); word2 = sensor.write(0x00)<<8; word2 = word2 | sensor.write(0x00); pc.printf("Word2: %x\r\n",word2); //word3 pc.printf("%x ",sensor.write(0x1D)); pc.printf("%x\r\n\n",sensor.write(0x90)); word3 = sensor.write(0x00)<<8; word3 = word3 | sensor.write(0x00); pc.printf("Word3: %x\r\n\n",word3); //word4 pc.printf("%x ",sensor.write(0x1D)); pc.printf("%x\r\n\n",sensor.write(0xA0)); word4 = sensor.write(0x00)<<8; word4 = word4 | sensor.write(0x00); pc.printf("Word4: %x\r\n\n",word4); c1 = word1 >> 1; pc.printf("C1: %x\r\n\n",c1); c2 = (word3 & 0x3F) << 6; c2 = c2 | (word4 & 0x3F); pc.printf("C2: %x\r\n\n",c2); c3 = (word4 & 0xFFC0) >> 6; pc.printf("C3: %x\r\n\n",c3); c4 = (word3 & 0xFFC0) >> 6; pc.printf("C4: %x\r\n\n",c4); c5 = (word1 & 0x0001) << 10; c5 = ((word2 & 0xFFC0) >> 6) | c5; pc.printf("C5: %x\r\n\n",c5); c6 = word2 & 0x3F; pc.printf("C6: %x\r\n\n",c6); while (1) { //Read digital pressure value from MS5534A sensor.write(0x0F); sensor.write(0x40); wait_ms(36); d1 = (sensor.write(0x00)<<8); d1 = d1 | sensor.write(0x00); //pc.printf("d1: %x\r\n\n",d1); //Read digital temperature value from MS5534A sensor.write(0x0F); sensor.write(0x20); wait_ms(36); d2 = (sensor.write(0x00)<<8); d2 = d2 | sensor.write(0x00); //pc.printf("d2: %i\r\n\n",d2); //Calculate calibration temperature ut1 = 8*c5+20224; //pc.printf("UT1: %i\r\n\n", ut1); dT = d2 - ut1; //pc.printf("dT: %i\r\n\n",dT); //Actual temperature: temp += 200 + dT *(c6+50)/1024; off = c2*4 + ((c4-512)*dT)/4096; sens = c1 + (c3*dT)/1024 + 24576; x = (sens * (d1-7168))/16384 - off; p += x*100/32 + 250*100; i++; if(i == 25) { pc.printf("Temperatur: %i\r\n\n",temp/25); pc.printf("Druck: %i\r\n\n",p/25); i = 0; p = 0; temp = 0; //wait_ms(500); } } }
1 comment on MS5534A:
Please log in to post comments.
Hi Markus , I need full Schematic + Software of ms5534A, for measuring of temperature with 16bit. please help me.
husoasil@mynet.com