Spi protokol za senzor bmp280
SPI_MJERENJE.cpp@0:37ca398d1b7f, 2021-01-18 (annotated)
- Committer:
- robert_musulin
- Date:
- Mon Jan 18 20:30:07 2021 +0000
- Revision:
- 0:37ca398d1b7f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
robert_musulin | 0:37ca398d1b7f | 1 | |
robert_musulin | 0:37ca398d1b7f | 2 | |
robert_musulin | 0:37ca398d1b7f | 3 | #include "mbed.h" |
robert_musulin | 0:37ca398d1b7f | 4 | #include "SPI_MJERENJE.h" |
robert_musulin | 0:37ca398d1b7f | 5 | |
robert_musulin | 0:37ca398d1b7f | 6 | SPI_mjeri::SPI_mjeri(PinName MOSI, PinName MISO, PinName SCL, PinName SS) // definiranje konstruktora |
robert_musulin | 0:37ca398d1b7f | 7 | : |
robert_musulin | 0:37ca398d1b7f | 8 | spi(MOSI, MISO, SCL), |
robert_musulin | 0:37ca398d1b7f | 9 | ss(SS) |
robert_musulin | 0:37ca398d1b7f | 10 | |
robert_musulin | 0:37ca398d1b7f | 11 | |
robert_musulin | 0:37ca398d1b7f | 12 | { inicijalizacija(); // opoziv funkcije za inicijaliziranje |
robert_musulin | 0:37ca398d1b7f | 13 | } |
robert_musulin | 0:37ca398d1b7f | 14 | |
robert_musulin | 0:37ca398d1b7f | 15 | void SPI_mjeri::inicijalizacija() // konstruktor za inicijalizaciju |
robert_musulin | 0:37ca398d1b7f | 16 | { |
robert_musulin | 0:37ca398d1b7f | 17 | |
robert_musulin | 0:37ca398d1b7f | 18 | spi.format(8, 0); // 8-bitni podatak, mod 0 |
robert_musulin | 0:37ca398d1b7f | 19 | |
robert_musulin | 0:37ca398d1b7f | 20 | spi.frequency(100000); // 100 khhz frekvencija rada |
robert_musulin | 0:37ca398d1b7f | 21 | ss=0; |
robert_musulin | 0:37ca398d1b7f | 22 | spi.write(0xF5); // Registar „config“ postavlja brzinu, filtar i opcije sučelja uređaja. |
robert_musulin | 0:37ca398d1b7f | 23 | spi.write(0b11000000); // Standby 2000ms, bez filtra, 4-zicni SPI sučelje |
robert_musulin | 0:37ca398d1b7f | 24 | spi.write(0xF4); //Registar „ctrl_meas“ postavlja mogućnosti prikupljanja podataka uređaja |
robert_musulin | 0:37ca398d1b7f | 25 | spi.write(0b01100011); // Temparature oversampling x4, Normal mode |
robert_musulin | 0:37ca398d1b7f | 26 | spi.write(0xF3); //Registar „status“ postavlja bitove za indikaciju |
robert_musulin | 0:37ca398d1b7f | 27 | spi.write(0b0); |
robert_musulin | 0:37ca398d1b7f | 28 | ss = 1; |
robert_musulin | 0:37ca398d1b7f | 29 | |
robert_musulin | 0:37ca398d1b7f | 30 | } |
robert_musulin | 0:37ca398d1b7f | 31 | |
robert_musulin | 0:37ca398d1b7f | 32 | float SPI_mjeri::izmjeri() //funkcija sa kompenzacijskom formulom iz datasheeta sa stranice 22 |
robert_musulin | 0:37ca398d1b7f | 33 | { |
robert_musulin | 0:37ca398d1b7f | 34 | |
robert_musulin | 0:37ca398d1b7f | 35 | int32_t temp_raw, var1, var2, temp,t_fine; |
robert_musulin | 0:37ca398d1b7f | 36 | float tempf; |
robert_musulin | 0:37ca398d1b7f | 37 | char dat[3]; |
robert_musulin | 0:37ca398d1b7f | 38 | char reg[6]; |
robert_musulin | 0:37ca398d1b7f | 39 | |
robert_musulin | 0:37ca398d1b7f | 40 | ss = 0; |
robert_musulin | 0:37ca398d1b7f | 41 | spi.write(0x88); // citanje dig_T registara temperetare 0x88 je adresa LSBa |
robert_musulin | 0:37ca398d1b7f | 42 | for(int i = 0; i < 6; i++) |
robert_musulin | 0:37ca398d1b7f | 43 | reg[i] = spi.write(0); // slanje dummy podataka |
robert_musulin | 0:37ca398d1b7f | 44 | ss = 1; |
robert_musulin | 0:37ca398d1b7f | 45 | |
robert_musulin | 0:37ca398d1b7f | 46 | |
robert_musulin | 0:37ca398d1b7f | 47 | dig_T1 = (reg[1] << 8) | reg[0]; //zapisivanje 8 bitnog podatka u 16 bitova |
robert_musulin | 0:37ca398d1b7f | 48 | dig_T2 = (reg[3] << 8) | reg[2]; |
robert_musulin | 0:37ca398d1b7f | 49 | dig_T3 = (reg[5] << 8) | reg[4]; |
robert_musulin | 0:37ca398d1b7f | 50 | |
robert_musulin | 0:37ca398d1b7f | 51 | |
robert_musulin | 0:37ca398d1b7f | 52 | |
robert_musulin | 0:37ca398d1b7f | 53 | ss = 0; |
robert_musulin | 0:37ca398d1b7f | 54 | spi.write(0xFA); // adresa registra MSB raw dijela podatka |
robert_musulin | 0:37ca398d1b7f | 55 | for(int i = 0; i < 3; i++) |
robert_musulin | 0:37ca398d1b7f | 56 | dat[i] = spi.write(0); |
robert_musulin | 0:37ca398d1b7f | 57 | ss = 1; |
robert_musulin | 0:37ca398d1b7f | 58 | temp_raw = (dat[0] << 12) | (dat[1] << 4) | (dat[2] >> 4); |
robert_musulin | 0:37ca398d1b7f | 59 | var1 = ((((temp_raw >> 3) - (dig_T1 << 1))) * dig_T2) >> 11; |
robert_musulin | 0:37ca398d1b7f | 60 | var2 = (((((temp_raw >> 4) - dig_T1) * ((temp_raw >> 4) - dig_T1)) >> 12) * dig_T3) >> 14; |
robert_musulin | 0:37ca398d1b7f | 61 | t_fine = var1 + var2; |
robert_musulin | 0:37ca398d1b7f | 62 | temp = (t_fine * 5 + 128) >> 8; |
robert_musulin | 0:37ca398d1b7f | 63 | tempf = (float)temp; |
robert_musulin | 0:37ca398d1b7f | 64 | return (tempf/100.0f); |
robert_musulin | 0:37ca398d1b7f | 65 | } |
robert_musulin | 0:37ca398d1b7f | 66 | |
robert_musulin | 0:37ca398d1b7f | 67 | |
robert_musulin | 0:37ca398d1b7f | 68 | |
robert_musulin | 0:37ca398d1b7f | 69 |