- •Лабораторна робота №1
- •Мета роботи
- •Теоретичні відомості
- •Програма роботи
- •1.4. Порядок виконання роботи
- •1.5. Контрольні запитання
- •Лабораторна робота № 2
- •2.1. Мета роботи
- •2.2. Теоретичні відомості
- •2.3. Програма роботи
- •2.4. Порядок виконання роботи
- •2.5. Контрольні запитання
- •Лабораторна робота № 3
- •3.1. Мета роботи
- •3.2. Теоретичні відомості
- •3.4. Порядок виконання лабораторної роботи
- •3.5. Контрольні запитання:
- •Лабораторна робота №4
- •4.1. Мета роботи
- •4.2. Теоретичні відомості
- •4.4. Порядок виконання лабораторної роботи
- •6.5. Контрольні запитання
- •Лабораторна робота №5
- •5.1. Мета роботи
- •5.2. Теоретичні відомості.
- •Давач температури ds1621.
- •5.3. Контрольні запитання.
- •Лабораторна робота №6. Програмування послідовного порту омк.
- •6.1. Мета роботи
- •6.2. Теоретичні відомості
- •Формат передачі по асинхронному інтерфейсу.
- •Бод рейт (Baud Rates)
- •8.3. Програма роботи
- •8.4. Порядок виконання лабораторної роботи
- •Лабораторна робота №7 Система переривань. Робота з дискретними сигналами
- •7.1. Мета роботи
- •7.2. Теоретичні відомості
- •7.3. Програма роботи
- •7.4. Порядок виконання роботи
- •7.5. Контрольні запитання
- •Лабораторна робота №8. Обробка частотних і часових сигналів
- •8.1. Мета роботи
- •8.2. Теоретичні відомості
- •8.4. Програма роботи
- •8.5. Порядок виконання лабораторної роботи
- •Контрольні запитання
Давач температури 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