Spi protokol za senzor bmp280

Files at this revision

API Documentation at this revision

Comitter:
robert_musulin
Date:
Mon Jan 18 20:30:07 2021 +0000
Commit message:
qq

Changed in this revision

SPI_MJERENJE.cpp Show annotated file Show diff for this revision Revisions of this file
SPI_MJERENJE.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 37ca398d1b7f SPI_MJERENJE.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPI_MJERENJE.cpp	Mon Jan 18 20:30:07 2021 +0000
@@ -0,0 +1,69 @@
+
+
+#include "mbed.h"
+#include "SPI_MJERENJE.h"
+ 
+SPI_mjeri::SPI_mjeri(PinName MOSI, PinName MISO, PinName SCL, PinName SS)  // definiranje konstruktora
+    :
+    spi(MOSI, MISO, SCL),
+    ss(SS)  
+       
+
+ { inicijalizacija(); // opoziv funkcije za inicijaliziranje
+}
+
+void SPI_mjeri::inicijalizacija()       // konstruktor za inicijalizaciju
+{
+    
+    spi.format(8, 0); // 8-bitni podatak, mod 0
+    
+    spi.frequency(100000); // 100 khhz frekvencija rada
+    ss=0;
+    spi.write(0xF5); // Registar „config“ postavlja brzinu, filtar i opcije sučelja uređaja.
+    spi.write(0b11000000); // Standby 2000ms, bez filtra, 4-zicni SPI sučelje
+    spi.write(0xF4); //Registar „ctrl_meas“ postavlja mogućnosti prikupljanja podataka uređaja
+     spi.write(0b01100011); // Temparature oversampling x4, Normal mode
+    spi.write(0xF3); //Registar „status“ postavlja bitove za indikaciju
+     spi.write(0b0);
+    ss = 1;
+    
+    }
+ 
+float SPI_mjeri::izmjeri() //funkcija sa kompenzacijskom formulom iz datasheeta sa stranice 22
+{
+    
+    int32_t temp_raw, var1, var2, temp,t_fine;
+    float tempf;
+    char dat[3];
+    char reg[6];
+    
+     ss = 0;
+    spi.write(0x88); // citanje dig_T registara temperetare 0x88 je adresa LSBa
+    for(int i = 0; i < 6; i++)
+        reg[i] = spi.write(0); // slanje dummy podataka
+    ss = 1;
+ 
+ 
+    dig_T1 = (reg[1] << 8) | reg[0]; //zapisivanje 8 bitnog podatka u 16 bitova
+     dig_T2 = (reg[3] << 8) | reg[2];
+      dig_T3 = (reg[5] << 8) | reg[4];
+    
+    
+    
+    ss = 0;
+    spi.write(0xFA); // adresa registra MSB raw dijela podatka
+    for(int i = 0; i < 3; i++)
+        dat[i] = spi.write(0);
+    ss = 1;
+    temp_raw = (dat[0] << 12) | (dat[1] << 4) | (dat[2] >> 4);
+    var1 = ((((temp_raw >> 3) - (dig_T1 << 1))) * dig_T2) >> 11;
+    var2 = (((((temp_raw >> 4) - dig_T1) * ((temp_raw >> 4) - dig_T1)) >> 12) * dig_T3) >> 14;
+    t_fine = var1 + var2;
+    temp = (t_fine * 5 + 128) >> 8;
+    tempf = (float)temp;
+    return (tempf/100.0f);
+}
+ 
+ 
+
+ 
diff -r 000000000000 -r 37ca398d1b7f SPI_MJERENJE.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPI_MJERENJE.h	Mon Jan 18 20:30:07 2021 +0000
@@ -0,0 +1,26 @@
+#ifndef SPI_MJERENJEH
+#define SPI_MJERENJEH
+
+class SPI_mjeri
+{
+public:
+ 
+    SPI_mjeri(PinName MOSI, PinName MISO, PinName SCL, PinName SS);   //deklaracija klase
+    
+    void inicijalizacija(void);    // deklaracija funkcije za incijaliziranje
+    float izmjeri(void);            // deklaracija funkcije za mjerenje temperature
+ 
+   
+   
+ 
+private:
+ 
+    SPI         spi;   // objekti vezani za spi komunikaciju
+    DigitalOut  ss;
+    uint16_t    dig_T1;    //registri za temperaturu iz datasheeta str.21
+    int16_t     dig_T2, dig_T3;
+    
+    
+ 
+};
+#endif
\ No newline at end of file