Skip to content
isdnetworks
Go back

์‚ฌ์–‘์„œ๋ฅผ ์•ˆ ๋ณด๊ณ  ์ฝ”๋“œ๋ถ€ํ„ฐ ์งฐ๋‹ค

์ƒˆ I2C ์„ผ์„œ๋ฅผ ๋ถ™์ด๋Š”๋ฐ ๊ฐ’์ด ๊ณ„์† ์ด์ƒํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ช‡ ๋ฒˆ ๊ณ ์ณค๋Š”๋ฐ ๋‚˜์•„์ง€์ง€ ์•Š์•˜๊ณ  ์‚ฌ์–‘์„œ๋ฅผ ๋ณด๋‹ˆ ์ฝ”๋“œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค.

Table of contents

Open Table of contents

๋ณ€ํ™˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ–ˆ๋‹ค

์ฝ๋Š” ํ๋ฆ„์€ ์ด๋žฌ๋‹ค.

i2c_write(ADDR, REG_CTRL, CMD_START);   /* ์ธก์ • ์‹œ์ž‘ */
i2c_read(ADDR, REG_DATA, buf, 2);       /* ๊ฐ’ ์ฝ๊ธฐ */

CMD_START ๋ฅผ ๋ณด๋‚ด๊ณ  ๊ณง๋ฐ”๋กœ i2c_read ๋ฅผ ๊ฑด๋‹ค. ์‚ฌ์–‘์„œ์—๋Š” ์ด๋ ‡๊ฒŒ ์ ํ˜€ ์žˆ์—ˆ๋‹ค.

Measurement time: typ. 65ms, max. 85ms (14-bit resolution)

์ธก์ •์— 65๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ๊ทธ ์ „์— ์ฝ์œผ๋ฉด ์ด์ „ ๊ฐ’์ด๋‚˜ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋‚˜์˜จ๋‹ค.

i2c_write(ADDR, REG_CTRL, CMD_START);
delay_ms(90);                            /* ์ตœ๋Œ€์น˜๋ณด๋‹ค ์—ฌ์œ  */
i2c_read(ADDR, REG_DATA, buf, 2);

90๋ฐ€๋ฆฌ์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ–ˆ๊ณ  ์ตœ๋Œ€์น˜๊ฐ€ 85๋‹ˆ๊นŒ ์—ฌ์œ ๋ฅผ ๋’€๋‹ค. ์ด ์‹œ๊ฐ„์€ ์„ผ์„œ๊ฐ€ ์ •ํ•œ ๊ฒƒ์ด๋ผ ์ฝ”๋“œ๋กœ ์ค„์ผ ์ˆ˜ ์—†๋‹ค.

์ค€๋น„ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค

๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์—ˆ๋‹ค.

i2c_write(ADDR, REG_CTRL, CMD_START);

int wait = 0;
uint8_t st;
do {
    delay_ms(5);
    i2c_read(ADDR, REG_STATUS, &st, 1);
    wait += 5;
} while (!(st & STATUS_READY) && wait < 200);

if (!(st & STATUS_READY)) return -1;    /* ์ƒํ•œ ์ดˆ๊ณผ */
i2c_read(ADDR, REG_DATA, buf, 2);

STATUS_READY ๊ฐ€ ์„œ๋ฉด ๋ฐ”๋กœ ์ฝ์œผ๋‹ˆ ํ‰๊ท  ๋Œ€๊ธฐ๊ฐ€ ์งง์•„์ง„๋‹ค. ๋Œ€์‹  ํ†ต์‹ ์ด ๋Š˜์–ด๋‚˜๊ณ  5๋ฐ€๋ฆฌ์ดˆ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ๋ฌป๋Š”๋‹ค.

์ด ์žฅ์น˜๋Š” 1์ดˆ์— ํ•œ ๋ฒˆ ์ฝ์œผ๋ฉด ๋˜๋‹ˆ ๊ณ ์ • ๋Œ€๊ธฐ๋กœ ํ–ˆ๊ณ  ์ž์ฃผ ์ฝ์–ด์•ผ ํ•˜๋Š” ์ž๋ฆฌ๋ผ๋ฉด ์ƒํƒœ ํ™•์ธ์ด ๋‚ซ๋‹ค.

ํ•ด์ƒ๋„ ์„ค์ •์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ๋‹ฌ๋ผ์กŒ๋‹ค

์‚ฌ์–‘์„œ๋ฅผ ๋” ์ฝ์–ด ๋ณด๋‹ˆ ํ•ด์ƒ๋„ ์„ค์ •์ด ์žˆ์—ˆ๋‹ค.

14-bit  65ms
12-bit  17ms
11-bit   9ms

์šฐ๋ฆฌ๋Š” 0.1๋„ ๋‹จ์œ„๋ฉด ์ถฉ๋ถ„ํ•ด์„œ ํ•ด์ƒ๋„๋ฅผ 12๋น„ํŠธ๋กœ ๋‚ฎ์ท„๊ณ  ๋Œ€๊ธฐ๊ฐ€ 17๋ฐ€๋ฆฌ์ดˆ๋กœ ์ค„์—ˆ๋‹ค.

ํ•„์š”ํ•œ ์ •๋ฐ€๋„๋ฅผ ๋จผ์ € ์ •ํ•˜๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ ์ •ํ•ด์ง„๋‹ค. ๋ฌด์กฐ๊ฑด ์ตœ๊ณ  ํ•ด์ƒ๋„๋ฅผ ์“ธ ์ด์œ ๊ฐ€ ์—†์—ˆ๊ณ  ๊ทธ ์„ค์ •๋„ I2C ๋กœ ๋ ˆ์ง€์Šคํ„ฐ์— ์จ ๋„ฃ๋Š” ๊ฐ’์ด๋‹ค.

๋ณ€ํ™˜์‹๊ณผ ์ „๊ธฐ ํŠน์„ฑ

๊ฐ’์„ ๋ณ€ํ™˜ํ•˜๋Š” ์‹๋„ ํ™•์ธํ–ˆ๋‹ค.

Temperature = -46.85 + 175.72 * (raw / 65536)

๋‚ด๊ฐ€ ์“ฐ๋˜ ์‹์€ raw / 256.0 ์ด์—ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์„ผ์„œ์˜ ์‹์ด์—ˆ๋‹ค.

float temp = -46.85f + 175.72f * ((float)raw / 65536.0f);

๊ณ„์ˆ˜๊ฐ€ ์„ผ์„œ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ˆ ๋น„์Šทํ•œ ์„ผ์„œ๋ผ๊ณ  ๊ฐ™์€ ์‹์„ ์“ฐ๋ฉด ์•ˆ ๋œ๋‹ค. ๊ณ„์ˆ˜๋ฅผ #define ์œผ๋กœ ๋นผ ๋‘๋ฉด ๋‹ค์Œ์— ์„ผ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๊ทธ ์ค„๋งŒ ๊ณ ์น˜๋ฉด ๋œ๋‹ค.

๊ฐ’์ด ๊ฐ€๋” ํŠ€๋Š” ๋ฌธ์ œ๋„ ๋‚จ์•„ ์žˆ์–ด์„œ ์‚ฌ์–‘์„œ์˜ ์ „๊ธฐ ํŠน์„ฑ์„ ๋ดค๋‹ค.

Supply voltage: 2.1 ~ 3.6V
I2C pull-up: 10kฮฉ typ.

ํšŒ๋กœ๋ฅผ ํ™•์ธํ•˜๋‹ˆ ํ’€์—… ์ €ํ•ญ์ด 4.7k์˜€๊ณ  ๋ฒ”์œ„ ์•ˆ์ด๊ธด ํ•œ๋ฐ ์„ ์ด ๊ธธ์–ด์„œ ์‹ ํ˜ธ๊ฐ€ ํ”๋“ค๋ ธ๋‹ค.

I2C ๋Š” SDA ์™€ SCL ๋‘ ์‹ ํ˜ธ์„ ์„ ์—ฌ๋Ÿฟ์ด ๋‚˜๋ˆ  ์“ฐ๋Š” ๊ตฌ์กฐ๋ผ ํ’€์—…์ด ์—†์œผ๋ฉด ์‹ ํ˜ธ๊ฐ€ ๋†’์€ ์ชฝ์œผ๋กœ ์•ˆ ์˜ฌ๋ผ๊ฐ„๋‹ค. ์ด๊ฒƒ์€ ์ฝ”๋“œ๋กœ ๋ชป ๊ณ ์ณ์„œ ํ•˜๋“œ์›จ์–ด ๋‹ด๋‹น์ž์—๊ฒŒ ๋„˜๊ฒผ๋‹ค.

์ฆ์ƒ์ด ์ฝ”๋“œ์—์„œ ์•ˆ ์žกํžˆ๋ฉด ๊ทธ ์•„๋ž˜๋ฅผ ๋ด์•ผ ํ•œ๋‹ค.

๊ฒ€์ฆ โ€” ํ™•์ธ ์ˆœ์„œ์™€ ์‹๋ณ„ ๋ ˆ์ง€์Šคํ„ฐ

์ƒˆ ์žฅ์น˜๋ฅผ ๋ถ™์ผ ๋•Œ ๋ณผ ์ˆœ์„œ๋ฅผ ์ ์—ˆ๋‹ค.

1. ์‚ฌ์–‘์„œ์—์„œ ํ™•์ธ
   - ์ฃผ์†Œ, ๋ ˆ์ง€์Šคํ„ฐ ๋งต
   - ์ธก์ • ์‹œ๊ฐ„, ์ค€๋น„ ํ™•์ธ ๋ฐฉ๋ฒ•
   - ๊ฐ’ ๋ณ€ํ™˜์‹
   - ๋™์ž‘ ๋ฒ”์œ„ (์˜จ๋„, ์ „์••)
   - ํ†ต์‹  ์†๋„ ์ƒํ•œ

2. ํ†ต์‹  ํ™•์ธ
   - ์ฃผ์†Œ๋กœ ์‘๋‹ตํ•˜๋Š”๊ฐ€ (์Šค์บ”)
   - ์‹๋ณ„ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์ด ๋งž๋Š”๊ฐ€

3. ๊ฐ’ ํ™•์ธ
   - ์•Œ๋ ค์ง„ ์กฐ๊ฑด์—์„œ ๊ฐ’์ด ๋งž๋Š”๊ฐ€ (์ƒ์˜จ์—์„œ 25๋„ ๊ทผ์ฒ˜)
   - ๋ฒ”์œ„ ์•ˆ์ธ๊ฐ€
   - ๋ฐ˜๋ณต ์ฝ์—ˆ์„ ๋•Œ ํ”๋“ค๋ฆผ์ด ์–ผ๋งˆ์ธ๊ฐ€

2๋ฒˆ์˜ ์‹๋ณ„ ๋ ˆ์ง€์Šคํ„ฐ ํ™•์ธ์ด ์œ ์šฉํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์„ผ์„œ๊ฐ€ ๊ณ ์ • ๊ฐ’์„ ์ฃผ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

uint8_t id;
i2c_read(ADDR, REG_ID, &id, 1);
if (id != EXPECTED_ID) {
    log_error("์„ผ์„œ ์‹๋ณ„ ๋ถˆ์ผ์น˜: 0x%02X (๊ธฐ๋Œ€ 0x%02X)", id, EXPECTED_ID);
    return -1;
}

REG_ID ๊ฐ€ ๋งž์œผ๋ฉด ํ†ต์‹ ์€ ๋˜๋Š” ๊ฒƒ์ด๊ณ  ๊ฐ’์ด ์ด์ƒํ•˜๋ฉด ํ†ต์‹ ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฌธ์ œ๋‹ค. ํ†ต์‹  ์ž์ฒด๊ฐ€ ์•ˆ ๋˜๋Š”๋ฐ ๊ฐ’ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋Š” ๊ฒƒ์€ ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€ ๊ฒƒ์ด๋‹ค.

๊ฐ’๋“ค์ด ์–ด๋””์„œ ์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ฃผ์„๋„ ๋‹ฌ์•˜๋‹ค.

#define MEAS_TIME_MS   90    /* ์‚ฌ์–‘์„œ 5.2์ ˆ: 14bit max 85ms */
#define TEMP_MIN      (-40.0f)  /* ์‚ฌ์–‘์„œ 2.1์ ˆ ๋™์ž‘ ๋ฒ”์œ„ */
#define EXPECTED_ID    0xBE     /* ์‚ฌ์–‘์„œ 6.4์ ˆ */

์ˆซ์ž๋งŒ ์žˆ์œผ๋ฉด ์™œ ๊ทธ ๊ฐ’์ธ์ง€ ๋ชจ๋ฅด๋Š”๋ฐ ์‚ฌ์–‘์„œ ์ ˆ ๋ฒˆํ˜ธ๋ฅผ ์ ์–ด ๋‘๋‹ˆ ํ™•์ธ์ด ๋นจ๋ผ์กŒ๋‹ค.

์ •๋ฆฌ


Share this post on:

Previous Post
๋‘ DB๋ฅผ ํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๊ณ  ์‹ถ์„ ๋•Œ
Next Post
ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ตฌ์กฐ๋ฅผ ์ •ํ•ด ์ค„ ๋•Œ