Vaša IP adresa: 3.144.230.82
Počet návštev: 30476

Meranie teploty s BMP280 (SPI)

Meranie teploty pomocou senzora s rozhraním SPI

1. Teoretický úvod

Činnosti senzora, elektrickej schéma zapojenia, popis vývodov a opis jednotlivých registrov senzora bol uvedený v časti Meranie teploty s BMP280 (I2C). V teoretickom úvode sa budeme preto zaoberať hlavne komunikáciou senzora cez rozhranie SPI.

Rozhranie SPI

Rozhranie SPI aktivujeme tak, že uzemníme (pripojíme na GND) vývod CSB. Podľa schémy na Obr. 3 je na tento vývod pripojený pull-up rezistor. Vývod CSB pripojíme na jeden výstup MCU (v našom prípade PB2), ktorý nastavíme na logickú nulu hneď na začiatku behu programu. Takýmto spôsobom zabezpečíme aktivovanie SPI rozhrania. Ak sa hodnota na vývode CSB neskôr zmení na logickú 1, tak už nedochádza k zmene komunikačného rozhrania a zostáva aktivované rozhranie SPI. Je podporované SPI rozhranie v režimoch ‘00’ (CPOL=0, CPHA=0) a ‘11’ (CPOL=1, CPHA=1). Ďalej je možné použiť 4-vodičovú alebo 3-vodičovú komunikáciu cez SPI rozhranie. 3-vodičové rozhranie musí byť aktivované v registri config (bit spi3w_en=1). Maximálna dosiahnuteľná frekvenciu pri prenose údajov cez SPI je 10 MHz. V našom prípade budeme používať typické 4-vodičové rozhranie a frekvenciu hodinového signálu 1 MHz.

Ak senzor používa rozhranie SPI, tak sa používajú iba 7-bitové adresy registrov. Najviac významný bit (MSB) adresy je nahradený bitom RW, ktorý indikuje čítanie/zápis: RW=1 pre čítanie a RW=0 pre zápis.

Napríklad adresa 0xF7 z mapy registrov je cez SPI prístupná ako 0x77. Ak chceme na túto adresu zapísať (RW=MSB=0), tak cez SPI posielame hodnotu 0x77. Ak chceme z tejto adresy čítať (RW=MSB=1), tak posielame hodnotu 0xF7.

Zápis cez SPI

Zápis sa začína nastavením vývodu CSB do logickej 0 (CSB=0) a zaslaním páru bajtov: adresa registra (Control byte), do ktorého chceme dáta zapísať a následne samotné dáta (Data byte). Control byte pozostáva zo 7-bitovej adresy registra (adresa bez bit7) a príznaku zápisu (bit7=RW=0). Môžeme zapísať viacero registrov naraz bez toho, aby sme museli zmeniť úroveň na vývode CSB. Zápis je ukončený nastavením logickej 1 na vývode CSB. Protokol pre zápis prostredníctvom SPI je uvedený na Obr. 1.

Obr. 1   Zápis viacerých bajtov cez SPI. Adresa registra nie je inkrementovaná automaticky.
Obr. 1 Zápis viacerých bajtov cez SPI. Adresa registra nie je inkrementovaná automaticky.

Čítanie cez SPI

Čítanie sa začína nastavením vývodu CSB do logickej 0 (CSB=0) a zaslaním jedného Control byte (adresa registra). Control byte pozostáva zo 7-bit adresy registra (adresa bez bit7) a príznaku čítania (bit7=RW=1). Po zápise kontrolného bajtu sú požadované dáta vysielané po linke SDO (MISO) od MCU. Adresa registra je pri čítaní automaticky inkrementovaná, to znamená, že môžeme čítať dáta z nasledujúcej adresy bez toho, aby sme museli znova posielať adresu senzora (Control byte). Protokol pre čítanie prostredníctvom SPI je uvedený na Obr. 1.

Obr. 2   Čítanie viacerých bajtov cez rozhranie SPI. Adresa registra je inkrementovaná automaticky.
Obr. 2 Čítanie viacerých bajtov cez rozhranie SPI. Adresa registra je inkrementovaná automaticky.

2. Použité vybavenie

  1. Hardvér
    • Vývojová doska Mega Development Board 2 (MDB2)
    • Teplotný senzor BMP280 na rozširujúcej DPS
    • PC
  2. Softvér
    • MATLAB
    • Microchip Studio

3. Schéma zapojenia

Obr. 3   Pripojenie teplotného senzora BMP280 k vývojovej doske MDB2.
Obr. 3 Pripojenie teplotného senzora BMP280 k vývojovej doske MDB2.

4. Úlohy

  1. Podľa schémy zapojenia (Obr. 3) pripojte senzor BMP280 k vývojovej doske MDB2. Použite napájanie z adaptéra. Pozície prepojok na MDB2 sú vyznačené červenou – napájanie senzora musí byť 3,3 V! Pri voľbe napájania 5 V môže dôjsť k poškodeniu senzora!
  2. 2. V jazyku C vytvorte program pre MCU, ktorý bude získavať údaje zo senzora BMP280 cez štvorvodičové SPI rozhranie a posielať získané údaje o teplote do PC cez rozhranie UART. V kóde implementujte nasledujúce parametre a funkcionality:
    • Frekvencia SPI: 1 MHz,
    • Údaje o teplote získavajte zo senzora a posielajte do PC každých 100 ms,
    • Rýchlosť prenosu cez UART nastavte na 19 200 Baud,
    • Vzorky začnite posielať do PC až po prijatí znaku 'S', posielanie zastavte po prijatí znaku 'X'. Na detekciu prijatia znaku využite prerušenie od UART
    • Pri tvorbe programu postupujte podľa nasledujúceho vývojového diagramu:
    Obr. 4   Vývojový diagram programu pre MCU.
    Obr. 4 Vývojový diagram programu pre MCU.
  3. V jazyku MATLAB pomocou prostredia AppDesigner vytvorte aplikáciu s grafickým užívateľským rozhraním, ktorá bude zobrazovať aktuálnu hodnotu teploty v °C a jej priebeh v čase podľa Obr. 5. Aplikácia musí obsahovať nasledujúce prvky:
    • Graf pre vykresľovanie priebehu teploty v čase,
    • Textové pole pre zobrazenie aktuálnej teploty,
    • Tlačidlá: 'Otvor port', 'Štart' a 'Stop'.
    Obr. 11   Aplikácia pre zobrazenie aktuálnej hodnoty teploty a jej priebehu v čase.
    Obr. 11 Aplikácia pre zobrazenie aktuálnej hodnoty teploty a jej priebehu v čase.
  4. Zhodnoťte priebeh laboratórneho cvičenia. Zamerajte sa na nasledujúce body:
    • Písanie kódu pre MCU, problematické časti,
    • Písanie kódu pre aplikáciu v MATLABe.