У цій статті я познайомлю вас з роботою шини 1 - Wire і програмуванні її параметрів в Bascom.
Існує три види взаємодії по шині даних:
- електронний - низький рівень, високий рівень сигналу; початок запису, наприклад, по спаду імпульсу;
Слід зазначити, що протокол 1 - Wire є унікальним в силу того, що для прийому і передачі даних використовується тільки одна лінія зв'язку. З цієї ж лінії може здійснюватися і харчування веденого пристрою.
Сигналами шини є: «запис лог.1», «запис лог.0», «читання», «скидання», «присутність» (див. Рис.1).
Рис.1 - Сигнали шини 1-wire
При сигналі «запис лог.1» провідний встановлює на шині низький рівень протягом 1 ... 15 мкс. При «запис лог.0» низький рівень встановлюється на час не менше 60 мкс і не більше 120 мкс. При сигналі «читання» провідний встановлює низький рівень протягом 1 ... 15 мкс. Після цього ведений (або підлеглий) утримує шину в низькому стані, якщо бажає передати лог.0, а при передачі лог.1 він просто звільняє лінію. Сканування шини необхідно виконувати після закінчення 15 мкс після установки низького рівня.
Якщо дивитися з боку ведучого «читання» є по суті сигналом «запис лог.1». Власне внутрішній стан підлеглого буде визначати цей сигнал «запис лог.1» або «читання».
При сигналі «скидання» провідний встановлює низький рівень протягом 480 мкс. Якщо на шині присутній ведене пристрій, то воно після звільнення шини має видати відгук. сигнал «присутність» - низький рівень протягом 60 мкс.
На Рис.2 зображена принципова схема вимірювача температури, яка містить мікросхему термометр DS1821 і мікроконтролер ATtiny2313. Значення температури відображаються на РК індикаторі типу MT-16S2H і передаються по RS-232 на термінал персонального комп'ютера.
Мікросхема DS1821 має два режими роботи: режим термостата і режим термометра. Нас буде цікавити режим вимірювання температури.
DS1821 забезпечує вимір температури в діапазоні -55 ... + 125 ° С з дискретністю один градус. Гарантована точність вимірювання температури в діапазоні 0 ... + 85 ° С становить +/- 1 град. а у всьому діапазоні +/- 2 град.
В DS1821 є доступними на рівні протоколу 1-Wire такі регістри:
- TH - регістр верхньої межі температури термостата;
- TL - регістр нижнього порога температури термостата;
Командами для перетворення температури є:
- ЕЕh - запуск перетворення;
- 22h - зупинка перетворення;
- ААh - читання температури.
Командами для термостата є:
- 01h - запис TH;
- 02h - запис TL;
End 'end program
Уявімо тепер, що перед нами стоїть завдання вимірювання температури будь - якого тіла в восьми його точках за допомогою DS1821. Дану задачу ми вирішуватимемо наступним чином. Підключимо мікросхеми термометрів на порт В згідно принципової схеми Рис.5. Потім в циклі основної програми будемо по черзі форматувати висновки РВ0 - РВ7, як висновки шини 1-Wire, зчитуючи значення температури за допомогою підпрограми і відправляючи їх за RS-232 в порт персонального комп'ютера.
Підпрограма зчитування температури з DS1821 майже повністю повторює вище описану програму "1w". Блок - схема програми для використання восьми датчиків температури - "1w8" приведена на Рис.6.
Рис.6 - Блок-схема програми "1w8"
End 'end program
Bascom дозволяє реалізувати в програмі також функцію Watchdog (сторожовий пес). Watchdog - це така функція, яка скидає контролер, якщо програма починає зависати. По суті це таймер, який потрібно регулярно обнуляти. Якщо програма зависає, вона не робить чергового скидання лічильника. Як тільки він переповнюється, відбувається апаратне скидання контролера. Ця функція потрібна в додатках, де стабільність роботи критична, і дайте йому працювати, щоб не сталося.
Програма контролера повинна взаємодіяти з таймером Watchdog, оскільки його спрацьовування - це позаштатна ситуація, яка може бути викликана як несправністю самої програми, так і обладнання. У будь-якому випадку необхідно подбати про систему протоколювання помилок, інакше дуже важко буде дізнатися причину збою. І можливо даний збій повториться знову.
Watchdog налаштовується таким чином:
Config Watchdog 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048
Діапазоні настройки становить від 16 до 2048 мілісекунд. Лічильник потрібно постійно скидати перед переповненням:
Це необхідно для того, щоб запобігти апаратне скидання.
Watchdog може бути запущений або зупинений в будь-який момент:
Прикладом використання вимушеного спрацьовування таймера є наступна програма "watchdog":