Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки.doc
Скачиваний:
12
Добавлен:
09.11.2019
Размер:
6.91 Mб
Скачать

Давач температури ds1621.

Ця мікросхема випускається фірмою „Dallas Semiconductors”. До її складу входить давач температури, який дозволяє вимірювати температуру в діапазоні від -55 до 125 ºС із стандартним кроком 0,5 ºС або в діапазоні від -67 до 257 ºF. Крім того вона містить вбудовану схему термостата, що дозволяє розробляти системи для підтримання певної температури. Середній час перетворення сигналу дорівнює 1с.

Розміщення виводів мікросхеми наведено на рис.18, а їх призначення в табл.4.

Рис.18. Виводи DS1621.

Табл.4. Призначення виводів мікросхеми.

Позначення

Вивід

Опис

SDA

1

Лінія SDA шини І2С

SCL

2

Лінія SCL шини І2С

TOUT

3

Сигнал термостатування

GND

4

Загальний вивід

A2

5

Адресний вхід 2

A1

6

Адресний вхід 1

A0

7

Адресний вхід 0

VDD

8

Живлення

До складу мікросхеми входить два генератори: один з високою температурною стабілізацією, другий – із сильною залежністю частоти від температури, лічильник, який вмикається при температурі 55 ºС, а також суматор фронтів сигналу, що компенсує нелінійну залежність частоти від температури.

Значення температури отримується в 9-ти розрядному двійковому коді, дані передаються по шині двома байтами. Спочатку передається старший байт (починаючи з біта MSB), наступним є молодший байт. Старший біт молодшого байту відповідає градації 0,5ºС. Сім наступних бітів молодшого байта завжди читаються як нульові.

Значення байтів DATA для температур -55÷125 ºС приведені в табл.5.

Таблиця 5. Приклади байтів DATA.

Температура, ºС

Код

+125

01111101 00000000

+25

00011001 00000000

+0,5

00011001 00000000

0

00000000 00000000

-0,5

11111111 10000000

-25

11100111 00000000

-55

11001001 00000000

Мікросхема може працювати в режимі термостатування з програмованим гістерезисом, як зображено на рис.19. Для цього необхідно задати верхнє (TH) і нижнє (TL) значення температури у двійковому коді.

Рис.19. Режим термостатування.

Коли температура мікросхеми перевищує величину уставки TH виробляється високий рівень на виході TOUT і залишається таким доки температура не стане нижча за уставку TL.

На рис.20 наведений вигляд регістра конфігурації.

DONE

THF

TLF

NVB

1

0

POL

1SHOT

Рис.20. Регістр конфігурації.

Біт

Пояснення

DONE

Біт завершення перетворення температури. Коли “1” перетворення завершене.

THL

Temperature High Flag – цей біт встановлюється в “1”, коли температура стає більше або рівна уставки TH. Цей біт залишається в положенні „1” поки не буде скинутий програмно або не буде вимкнено живлення мікросхеми.

TLF

Temperature Low Flag – цей флаг встановлюється в “1”, коли температура стає рівною або меншою уставки TL. Цей біт залишається в положенні „1” поки не буде скинутий програмно або не буде вимкнено живлення мікросхеми.

NVB

Nonvolatile Memory Busy – біт запису даних в енергонезалежну пам’ять. Встановлення в “1” свідчить про незавершеність запису комірки пам’яті, після закінчення запису апаратно скидається. Запис може складати до 10 мс.

POL

Output Polarity Bit:

“1” – активний рівень високий;

„0” – активний рівень низький

Цей біт енергонезалежний.

1SHOT

One Shot Mode – біт керування циклом вимірювання. При встановленні в “1” перетворення відбувається одноразово; при встановленні в „0” перетворення виконується безперервно. Цей біт енергонезалежний.

Зазвичай, мікросхема функціонує в режимі безперервного перетворення. Але, в режимі зниженого енергоспоживання, можливе використання одноразових перетворень. Також в режимі одноразового перетворення сигнал на виході TOUT збереже своє значення на момент закінчення останнього перетворення незалежно від поточної температури навколишнього середовища.

Конфігурування і отримання даних від мікросхеми відбувається по за стандартним І2С протоколом, за допомогою передачі керуючих команд. Спочатку master-пристрій передає slave-адресу, старші 4 біти якої містять комбінацію 1001, а молодші 3 – біти вибору пристрою (А2, А1, А0). Умова „ ” встановлюється в стан “0”. Після отримання АСК передається 8 бітів командного слова і slave-приймач знову підтверджує отримання видачею АСК. Потім master-пристрій може передавати дані до DS1621, а якщо необхідно виконувати зчитування, то після командного слова необхідно передати умову „повторний START” і адресу slave-пристрою з бітом “ ” встановленим в „1”.

DS1621 використовує наступні команди:

Команда

Пояснення

AAh

Ця команда зчитує останнє значення перетворення температури. Мікросхема формує 2 інформаційних байта даних.

A1h

Команда дозволяє встановити значення верхнього рівня температури TH. Після видачі цієї команди повинні бути видані два байти, що визначають значення температури (умова „ ” – „0”). Значення ТН може бути зчитане при умові “ ” – “1”.

A2h

Команда дозволяє встановити значення нижньої температури TL. Працює аналогічно попередній команді.

ACh

Команда доступу до регістра конфігурації. Якщо умова „ ” встановлена в „0”, то дані будуть записуватися в регістр; умова „ ” встановлена в „1”, то відбувається зчитування.

A8h

Команда, за допомогою якої зчитується значення з лічильника. Можливе використання команди тільки в режимі зчитування.

A9h

Команда, за допомогою якої зчитується значення з лічильника, який пов’язаний з температурно залежним генератором. Можливе використання команди тільки в режимі зчитування.

EEh

Команда початку перетворення температури.

22h

Команда закінчення перетворення температури.

Залежність величини абсолютної похибки від температури зображено на рис.21

Рис.21. Залежність похибки мікросхеми від температури.

Приклад програми: циклічне зчитування температури з давача DS1631 і відображення її значення на статичний індикатор.

P1 DATA 090H ;Порт 1

SDA BIT P1.0 ;називаємо біти, що використовуються

SCL BIT P1.1 ;

ORG 0000H

;гасимо старші розряди індикатора

MOV A,#011b

MOV DPTR,#0A004h

MOVX @DPTR,A

MOV R6,#0000H ;для збереження старшого байта температури

;================================================================

; ОПИС ОСНОВНОЇ ПРОГРАМИ ;

;================================================================

INIT_DS1621: ; --> ініціалізація DS1621

; --> запускаємо перетворення температури

CALL STOP ;для виходу із всіх попередніх режимів

CALL DELAY

CALL START

CALL DELAY

CALL ADDR_WRITE

CALL DELAY

CALL COMMAND_START

CALL DELAY ;|

CALL DELAY ;|

CALL DELAY ;|

CALL DELAY ;} ==> затримка для перетворення

CALL DELAY ;|

CALL DELAY ;|

CALL DELAY ;|

CALL STOP

GET_TEMP: ; --> отримуємо значення температури

CALL START

CALL ADDR_WRITE

CALL DELAY

CALL COMMAND_READ

CALL DELAY

CALL START

CALL DELAY

CALL ADDR_READ

CALL DELAY

CALL READ_TEMP

CALL DELAY

CALL STOP

CALL CONVERT

CALL DELAY

JMP DISP

;================================================================

; ОПИС ПІДПРОГРАМИ ПЕРЕТВОРЕННЯ ДВІЙКОВОГО ЧИСЛА В ;

; ДВІЙКОВО-ДЕСЯТКОВЕ ;

;================================================================

CONVERT:

MOV R0,#0008H

MOV R1,A

MOV R2,#0000H

MOV R3,#0000H

MOV R4,#0000H

MOV R5,#0000H

CONV_1:

MOV A,R2

RL A

MOV R2,A

MOV A,R1

RLC A

MOV R1,A

MOV A,#0000H

ADDC A,R2

MOV R2,A

ANL A,#0FH ;|

MOV R4,A ;|

CJNE R4,#0000H,AA1 ;|

MOV R3,#00BBH ;|

AA1: CJNE R4,#0001H,AA2 ;|

MOV R3,#00BBH ;|

AA2: CJNE R4,#0002H,AA3 ;} ==> перевіряємо чи тетрада не >=5

MOV R3,#00BBH ;|

AA3: CJNE R4,#0003H,AA4 ;|

MOV R3,#00BBH ;|

AA4: CJNE R4,#0004H,AA5 ;|

MOV R3,#00BBH ;|

AA5: CJNE R3,#00BBH,AA6 ;|

JMP CONV_2

AA6: CJNE R0,#0001H,ADD_3

CONV_2:

DJNZ R0,CONV_1

MOV A,R2

RET

ADD_3: ; --> дoдаємо до тетради число 3

MOV A,R2

ANL A,#00F0H

MOV R2,A

MOV A,R4

ADD A,#0003H

ADD A,R2

MOV R2,A

JMP CONV_2

;================================================================

; ОПИС ПІДПРОГРАМ, ЩО ВИКОРИСТОВУЮТЬСЯ ;

;================================================================

DISP: ; --> виведення результату

MOV DPTR,#0A001H

MOVX @DPTR,A

CALL DELAY

CJNE A,#00FFH,GET_TEMP

JMP INIT_DS1621

DELAY: ; --> створення затримки

MOV R4,#0004H

DEL: DJNZ R4,DEL

RET

SETB_SCL: ; --> встановлення SCL в "1"

SETB SCL

JNB SCL,$

RET

SETB_SDA: ; --> встановлення SDA в "1"

SETB SDA

JNB SDA,$

RET

START: ; --> СТАРТ-умова

CALL SETB_SDA

CALL DELAY

CALL SETB_SCL

CALL DELAY

CLR SDA

CALL DELAY

CLR SCL

CALL DELAY

RET

STOP: ; --> СТОП-умова

CLR SDA

CALL DELAY

CALL SETB_SCL

CALL DELAY

CALL SETB_SDA

CALL DELAY

CLR SCL

CALL DELAY

RET

ERROR: ; --> виникнення і виведення помилки

MOV A,#00FFH

JMP DISP

GET_ACKN: ; --> отримання підтвердження прийому байта

; --> від DS1621

CALL SETB_SCL

CALL DELAY

MOV C,SDA

CLR SCL

CALL DELAY

RET

ADDR_WRITE: ; --> запис адреси пристрою з "R/W" "1"

MOV A,#10010000B

CALL WRITE_BYTE

CALL DELAY

CALL GET_ACKN

CALL DELAY

JC ERROR ;перевірка отримання підтвердження

RET

COMMAND_START: ; --> команда для початку перетворення температури

MOV A,#00EEH

CALL WRITE_BYTE

CALL DELAY

CALL GET_ACKN

CALL DELAY

JC ERROR ;перевірка отримання підтвердження

RET

COMMAND_READ: ; --> команда для зчитування 2-х байт температури

MOV A,#00AAH

CALL WRITE_BYTE

CALL DELAY

CALL GET_ACKN

CALL DELAY

JC ERROR ;перевірка отримання підтвердження

RET

ADDR_READ: ; --> запис адреси пристрою з "R/W" "0"

MOV A,#10010001B

CALL WRITE_BYTE

CALL DELAY

CALL GET_ACKN

CALL DELAY

JC ERROR ;перевірка отримання підтвердження

RET

WRITE_BYTE: ; --> запис байта даних

MOV R0,#0008H

WRITE_BIT: ; --> запис одного біта

RLC A

MOV SDA,C

CALL SETB_SCL

CALL DELAY

CLR SCL

CALL DELAY

DJNZ R0,WRITE_BIT

CALL DELAY

RET

READ_TEMP: ; --> зчитування 2-х байт даних

CALL READ_BYTE

CALL DELAY

CALL ACKN

CALL DELAY

MOV R6,A ;зберігаємо старший байт

CALL READ_BYTE

CALL DELAY

CALL NO_ACKN

CALL DELAY

MOV A,R6 ;відновлюємо старший байт

RET

READ_BYTE: ; --> зчитування байта даних

MOV R0,#0008H

MOV A,#0000H

READ_BIT: ; --> зчитування одного біта

CALL SETB_SCL

CALL DELAY

MOV C,SDA

RLC A

CLR SCL

CALL DELAY

DJNZ R0,READ_BIT

CALL DELAY

RET

ACKN: ; --> видача підтвердження отримання

; --> байта даних

CLR SDA

CALL DELAY

CALL SETB_SCL

CALL DELAY

CLR SCL

CALL DELAY

RET

NO_ACKN: ; --> видача підтвердження отримання

; --> останнього байта даних

CALL SETB_SDA

CALL SETB_SCL

CALL DELAY

CLR SCL

RET

END