- •1 Розробка структурної схеми мкп(мкс)
- •Аналіз завдання та синтез структурної схеми мкп(мкс)
- •Основні задачі функціонально-логічного і програмного рівнів:
- •1.5 Особливості застосування периферійних пристроїв
- •1.5.1 Особливості протоколу 1-wire
- •1.5.2 Модуль rtcc на основі мікросхеми ds1307
- •1.5.4 Рідкокристалічні алфавітно-символьні індикатори
- •1.5.5 Застосування протоколу spi
1.5 Особливості застосування периферійних пристроїв
1.5.1 Особливості протоколу 1-wire
1-Wire - протокол передачі даних по одній лінії. Даний протокол розроблений корпорацією Dallas Semiconductor (зараз Maxim Integrated). З використанням 1-Wire працює більшість домофонних чіпів (DS1990A), карток доступу, а також через 1-Wire спілкуються популярні давачі температури (DS18S20 і DS18B20), транзисторні ключі (DS2405, DS2406), програмовані порти введення-виведення (DS2408), АЦП і ЦАП, годинники реального часу (DS2417) тощо…. Режим зв'язку в цьому протоколі - асинхронний і напівдуплексний. При цьому завжди є ведучий - один пристрій на шині, яке посилає команди, і ведені - пристрої, які ці команди приймають і відповідають на них, якщо необхідно; кожен з ведених пристроїв підключається безпосередньо до загальної шини. Протокол 1-Wire не складний в реалізації однак досить чутливий до часу і до перешкод. Також 1-Wire не призначений для передачі великих об’ємів інформації та для швидкісного обміну даними - максимальна швидкість 9600бод/с.
Рисунок 1.9 - Приклад підключення ведучого і ведених приладів
за протоколом 1-Wire.
Протокол 1-Wire описує фізичний, канальний, мережевий і транспортний рівні взаємодії. На фізичному рівні даються описи методів зв'язку, вимоги до шини даних і живленню. Канальний рівень описує способи читання і передачі бітів по протоколу. Мережевий рівень визначає методи адресації до різних пристроїв на лінії. Нарешті, транспортний рівень описує функціональні команди, використовувані пристроями 1-Wire.
Обмін інформацією ведеться тайм-слотами (60 мкс): один тайм-слот служить для обміну одним бітом інформації. Дані передаються біт за бітом, починаючи з молодшого біта молодшого байта.
Якщо необхідно передати число 00100111 11111010(2), то передача по 1-Wire буде виконуватись у наступній послідовності:
0 → 1 → 0 → 1 → 1 → 1 → 1 → 1 → 1 → 1 → 1 → 0 → 0 → 1 → 0 → 0
При обміні інформацією ведучий ініціює зв'язок на бітовому рівні. Це означає, що передача кожного біта, незалежно від напрямку (передача або прийом), повинна бути ініційована ведучим. Шина даних за замовчуванням підтягується до "одиниці", тому для початку як для прийому, так і для передачі ведучий опускає лінію в "нуль" на деякий час.
Нижче описано 5 основних команд для зв'язку по шині 1-Wire:
"Запис 1";
"Запис 0 ";
"Читання";
"Скидання";
"Присутність".
При цьому на рисунках червоним виділена управління лінією від ведучого, синім - управління лінією від веденого, чорний - звільнена лінія (за допомогою підтягую чого резистора шини автоматично переходить в "одиницю").
Рисунок 1.10 - Сигнал "Запис 1". Ведучий встановлює низький рівень
тривалістю 1 ... 15 мкс. Після цього він звільняє шину.
Рисунок 1.11 - Сигнал "Запис 0". Ведучий формує низький рівень не менше 60 мкс, і не довше 120 мкс.
Рисунок 1.12 - Сигнал "Читання". Ведучий встановлює низький рівень протягом 1 ... 15 мкс. Після цього ведений, якщо хоче передати 0, утримує шину в низькому стані до 60 мкс; якщо ж підлеглий хоче передати 1, то він просто звільняє лінію.
Рисунок 1.13 - Сигнал "Читання при отриманні 1":
Рисунок 1.14 - Сигнал "Читання при отриманні 0":
Сигнал "Скидання/присутність". Тут часові інтервали імпульсів відрізняються. Ведучий встановлює низький рівень протягом 8 тимчасових слотів (480 мкс), а потім звільняє шину. Даний тривалий період низького стану називається сигнал "Скидання".
Якщо на шині присутній ведений, то він повинен протягом 60 мкс після звільнення ведучим шини встановити низький рівень тривалістю не менше 60 мкс. Даний відгук є сигналом "Присутності". Якщо такий сигнал не виявляється, то ведучий приймає рішення про відсутність підключених пристроїв до шини.
Сигнал "Скидання" дозволяє ведучому достроково завершити обмін інформацією - наприклад, якщо датчик температури передає вміст усієї пам'яті. Оскільки потрібні тільки перші два байти, які містять значення температури, то після отримання цих двох байтів мікроконтролер просто може опустити лінію в нуль на потрібну кількість часу - датчик зрозуміє, що більше нічого пересилати не потрібно.
Таблиця 1.1 - Команди звернення та вибору пристрою на шині
Команда |
Код |
Опис |
SEARCH ROM |
0xF0 |
Пошук адрес - використовується при універсальному алгоритмі визначення кількості підключених пристроїв |
READ ROM |
0x33 |
Читання адреси пристрою - використовується для визначення адреси єдиного пристрою на шині |
MATCH ROM |
0x55 |
Вибір адреси - використовується для звернення до конкретного адресою пристрою з багатьох підключених |
SKIP ROM |
0xCC |
Ігнорувати адреса - використовується для звернення до єдиного пристрою на шині, при цьому адресу пристрою ігнорується (можна звертатися до невідомого пристрою) |
Для того щоб отримати покази температури необхідно виконати наступні команди (для випадку коли на шині є лишень один термодатчик):
ініціалізація (перевірка присутності);
0xCC – пропуск ідентифікації;
0х44 – запуск конвертації температури;
затримка для конвертації (750 мс для 12 бітного розширення);
повтор ініціалізації;
0xCC – пропуск ідентифікації;
0хBE – читання регістра.
Під ініціалізацією розуміють перевірку присутності одного, або декількох, 1-wire пристроїв на шині. Для виконання цієї перевірки ведучий пристрій – мікроконтролер – опускає до рівня лог.0 шину, очікує 500мкс, підіймає шину до лог.1, зову очікує 65мкс та перевіряє стан шини. Якщо рівень сигналу на шині відповідає лог.0, це свідчить про присутність 1-wire пристрою. Якщо це значення рівне лог.1, то процес ініціалізації повторюється до того моменту, поки не буде виявлено підключення 1-wire пристрою до мікроконтролера по даній шині.
Пропуск ідентифікації. Дана команда виконується у тому випадку, коли на шині присутній лишень один 1-wire пристрій. Якщо таких пристроїв підключено декілька, то результат виконання ідентифікації задіює лишень один з них для обміну даними з мікроконтролером.
Запуск конвертації температури. Основна команда для роботи із термодатчиками DS18B20. Запускає процес вимірювання, в результаті якого у пам‘яті термодатчика буде збережено поточне значеня виміряної температури. Для коректного виконаня конвертації при програмній реалізації інтерфейсу 1-wire після команди запуску конвертації виконується затримка. Значення затримки залежить від обраного розширення для конвертації температури, наприклад, для розширення в 12біт затримка дорівнюватиме 750мкс.
Повтор ініціалізації. Виконується для відновлення зв‘язку із термодатчиком по причині того, що по завершеню конвертації температури термодатчик автоматично звільняє шину для роботи інших пристроїв.
Читання регістра. Команда, результатом якої є зчитування з пам‘яті термодатчика значення виміряної температури та передача його до ведучого пристрою.
Фрагменти програми ініціалізації, передачі та прийому знаходяться у додатку В.
