---
jupytext:
  formats: md:myst
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
    jupytext_version: 1.11.5
kernelspec:
  display_name: Python 3
  language: python
  name: python3
---


% #   <font color='#4B9DA9'> level 1 </font>
% ##  <font color='#547792'> level 2 </font>
% ### <font color='#E37434'> level 3 </font>
% {dropdown} <font color='#84B179'> Text </font>

#   <font color='#4B9DA9'> Teplomer LM92 </font>

[LM92](./doc/lm92.pdf) je 12-bitový teplotný senzor pre teplotný rozsah -25 ... +150°C s rozlíšením 0.0625°C. Komunikácia s teplomerom je po zbernici I2C. Teplomer má možnosť nastavenie kritických teplôt a výstup pre vyvolanie prerušenia pri prekročení stanovených teplôt.

```{figure} ./img/lm92_block.png
:width: 550px
:name: mp_156a

Blokové zapojenie digitálneho teplomera LM92.
```

Vývody A1 a A0 sú určené pre nastavenie adresy teplomera na zbernici. Kódovanie adresy je 7-bitové podľa obrázku 

```{figure} ./img/lm92_addr.png
:width: 750px
:name: mp_156b

Adresácia teplomera LM92 na zbernici.
```

Rozsah adries

    01001000
    01001001
    01001010
    01001011
    


:::{dropdown} <font color='#84B179'> Pripojenie teplomera LM92 k Nucleo-64  </font>
 
    MICROPY_HW_I2C1_SCL         -> pin_PB8  (STM)
    MICROPY_HW_I2C1_SDA         -> pin_PB9  (STM)
    +5V
    GND

```{figure} ./img/stm32_i2c1.png
:width: 350px
:name: mp_0205f

Pripojenie teplomera LM92
```

:::

##  <font color='#547792'> Programovanie </font>

Funkcia pre načítanie dát z teplomera:


```Python
def read_LM92(i2c, addr):
    raw = i2c.mem_read(2, addr, 0)      # nacitanie 2 byte z registra 0 
    data = (raw[0] << 8) + raw[1]      # konverzia 16 bit format
    td = data >> 3                     # 2'compl b15-b3 temperature
    TEMP = (-(td & 0x1000) | (td & 0xFFF))* 0.0625       
    L = data & 0x01                    # T_LOW  -> H, TEMP < 10 deg
    H = (data & 0x02) >> 1             # T_HIGH -> H  TEMP > 64 deg
    C = (data & 0x04) >> 2             # T_CRIT -> H  TEMP > 80 deg
    return TEMP, C, H, L
```

:::{dropdown} <font color='#84B179'> Príklad 1. Načítanie a zobrazenie teploty </font>

```Python
# inicializacia rozhrania
from pyb import I2C
import time 

i2c = I2C(1, I2C.CONTROLLER, baudrate=100000)

# Spustenie merania

def temp(n):
    for i in range(n):
        print(read_LM92(i2c, 75))
        time.sleep(0.5)

temp(10)
```
:::
