Robert Musulin / SPI_MJERENJE
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPI_MJERENJE.cpp Source File

SPI_MJERENJE.cpp

00001 
00002 
00003 #include "mbed.h"
00004 #include "SPI_MJERENJE.h"
00005  
00006 SPI_mjeri::SPI_mjeri(PinName MOSI, PinName MISO, PinName SCL, PinName SS)  // definiranje konstruktora
00007     :
00008     spi(MOSI, MISO, SCL),
00009     ss(SS)  
00010        
00011 
00012  { inicijalizacija(); // opoziv funkcije za inicijaliziranje
00013 }
00014 
00015 void SPI_mjeri::inicijalizacija()       // konstruktor za inicijalizaciju
00016 {
00017     
00018     spi.format(8, 0); // 8-bitni podatak, mod 0
00019     
00020     spi.frequency(100000); // 100 khhz frekvencija rada
00021     ss=0;
00022     spi.write(0xF5); // Registar „config“ postavlja brzinu, filtar i opcije sučelja uređaja.
00023     spi.write(0b11000000); // Standby 2000ms, bez filtra, 4-zicni SPI sučelje
00024     spi.write(0xF4); //Registar „ctrl_meas“ postavlja mogućnosti prikupljanja podataka uređaja
00025      spi.write(0b01100011); // Temparature oversampling x4, Normal mode
00026     spi.write(0xF3); //Registar „status“ postavlja bitove za indikaciju
00027      spi.write(0b0);
00028     ss = 1;
00029     
00030     }
00031  
00032 float SPI_mjeri::izmjeri() //funkcija sa kompenzacijskom formulom iz datasheeta sa stranice 22
00033 {
00034     
00035     int32_t temp_raw, var1, var2, temp,t_fine;
00036     float tempf;
00037     char dat[3];
00038     char reg[6];
00039     
00040      ss = 0;
00041     spi.write(0x88); // citanje dig_T registara temperetare 0x88 je adresa LSBa
00042     for(int i = 0; i < 6; i++)
00043         reg[i] = spi.write(0); // slanje dummy podataka
00044     ss = 1;
00045  
00046  
00047     dig_T1 = (reg[1] << 8) | reg[0]; //zapisivanje 8 bitnog podatka u 16 bitova
00048      dig_T2 = (reg[3] << 8) | reg[2];
00049       dig_T3 = (reg[5] << 8) | reg[4];
00050     
00051     
00052     
00053     ss = 0;
00054     spi.write(0xFA); // adresa registra MSB raw dijela podatka
00055     for(int i = 0; i < 3; i++)
00056         dat[i] = spi.write(0);
00057     ss = 1;
00058     temp_raw = (dat[0] << 12) | (dat[1] << 4) | (dat[2] >> 4);
00059     var1 = ((((temp_raw >> 3) - (dig_T1 << 1))) * dig_T2) >> 11;
00060     var2 = (((((temp_raw >> 4) - dig_T1) * ((temp_raw >> 4) - dig_T1)) >> 12) * dig_T3) >> 14;
00061     t_fine = var1 + var2;
00062     temp = (t_fine * 5 + 128) >> 8;
00063     tempf = (float)temp;
00064     return (tempf/100.0f);
00065 }
00066  
00067  
00068 
00069