Вивчення таймерів мікроконтролера, лабораторія електронних засобів навчання (лесо) СібГУТІ
Методична розробка до лабораторної роботи на навчальному стенді LESO1.
1 Мета роботи
- Вивчити особливості роботи таймерів мікроконтролера.
- Вивчити методику конфігурації таймерів.
- Навчитися формувати за допомогою таймера тимчасові інтервали.
- Вивчити способи налагодження програм на навчальному лабораторному стенді LESO1.
2 Попередня підготовка до роботи
3 Стислі теоретичні відомості
3.1 Загальні відомості про таймера
Таймери призначені для формування тимчасових інтервалів, дозволяючи мікропроцесорної системі працювати в режимі реального часу. Таймери є цифрові лічильники. які підраховують імпульси або від високостабільного генератора частоти, або від зовнішнього джерела сигналу, в цьому випадку таймер називають лічильником зовнішніх подій. До системної шини мікропроцесора таймери підключаються за допомогою паралельних портів.
Як правило, в мікропроцесорної системі в якості генератора частоти виступає генератор внутрішньої синхронізації мікроконтролера. Частота генератора задає мінімальний часовий проміжок, який може визначати таймер. Інтервали часу, що задаються за допомогою таймера, можуть мати строго певні дискретні значення. Розрядність цифрового лічильника таймера визначає максимальний інтервал часу, який може поставити таймер.
Рисунок 1 - Структурна схема таймераОчевидно, максимальне число, яке може бути записано в 16-бітний рахунковий регістр таймера дорівнює 2 16 - 1 = 65535. що являє собою логічну одиницю в кожному розряді регістра. Таким чином, якщо перед запуском таймера в його лічильники були записані нулі, то переповнення таймера відбудеться через 65536 машинних циклів. Знаючи частоту генератора, що задає мікропроцесорної системи, а як наслідок і період сигналу генератора TG. можна легко визначити час переповнення таймера в секундах:
Якщо ж потрібно встановити менший інтервал часу, то перед запуском таймера в його регістри можна записати початковий код, і тоді рахунок буде розпочатий з нуля, а з записаного коду, і лічильнику буде потрібно менше часу для переповнення. В цьому випадку час роботи таймера TT визначається за формулою:
де: Code - код, записаний в таймер до його запуску, TT - Час роботи таймера, TG - період коливань генератора, що задає, n - розрядність таймера.
Якщо ж потрібно сформувати інтервал часу більший, ніж максимальний час переповнення, то таймер можна запустити кілька разів в циклі. В цьому випадку часовий інтервал визначається як:
де N - кількість ітерацій циклу, TT - час спрацьовування таймера.
3.2 Таймери-лічильники мікроконтролера ADuC842
Мікроконтролер ADuC842 має три 16-розрядних таймера-лічильника: Таймер 0, Таймер 1 і Таймер 2. Структура і режими роботи таймерів-лічильників відповідають загальним принципам архітектури MCS-51. Кожен таймер-лічильник містить по два 8-бітних регістра THx і TLx (x = 0, 1, і 2).
Кожен таймер-лічильник може бути запрограмований на роботу в якості або таймера (відлік часу через підрахунок внутрішніх імпульсів синхронізації), або лічильника (підрахунок подій на зовнішньому вході). В обох випадках переповнення рахункового регістра призводить до формування запиту переривання і встановлюється спеціальний прапор переповнення.
У режимі таймера регістр TLx збільшує своє значення на одиницю кожен машинний цикл. Оскільки машинний цикл однотактового ядра складається з одного тактового періоду, то максимальна швидкість рахунки дорівнює тактовій частоті ядра.
У режимі лічильника, регістр TLx збільшує своє значення на одиницю при переході рівня з високого в низький на відповідному зовнішньому виводі мікроконтролера: T0. T1 або T2. Коли на зовнішньому виводі один машинний цикл тримається високий логічний рівень, а вже в наступному циклі - низький, тоді регістр таймера збільшує своє значення на одиницю. Таким чином, для розпізнавання переходу з "1" в "0" потрібно два такту внутрішнього генератора мікроконтролера, це означає, що максимальна швидкість рахунки може скласти половину частоти внутрішнього тактового генератора.
Таймери 0 і 1 обслуговуються регістром режиму TMOD і регістром управління TCON.
Таблиця 1 - Опис біт регістра TMOD
5 Вказівки до складання звіту
Звіт повинен містити:
- Мета роботи.
- Структурну схему таймера мікроконтролера ADuC842 в обраному режимі.
- Розрахунок початкових значень рахункових регістрів таймера.
- Обгрунтування вибору значення регістра TMOD.
- Графічну схему алгоритму роботи програми.
- Оригінальний текст програми.
- Вміст файлу лістингу програмного проекту.
- Висновки про виконану лабораторній роботі.
Схеми, а також звіт в цілому, виконуються згідно з нормами ЕСКД.
у формулі (Code = 2n - TT / TG = 65536 - 3500/1 = 62036) помоему помилка. Замість поділу потрібно помножити. Просто я підставляв свої значення і не розумів чому таймер неправильно вважає. Помножив (TT на TG) і все запрацювало як положенно.
Вітаю. Ця формула випливає безпосередньо з формули:
Переносимо Code вліво частина, а TT в праву частину.
Ділимо все на TG:
Це стосується математики. Тепер про фізичному сенсі. У нас є таймер, він кожен такт збільшує своє значення на одиницю. Коли він дотікает до значення 2 n = 65536 він створить подія, яке може бути використане для генерації переривання, або просто лічено при опитуванні прапора TF. Кожен такт має якийсь час, яке в нашому випадку визначається частотою роботи ядра процесора. Якщо у адука не налаштовувати PLL, то частота його роботи дорівнює 2,097152 МГц. Це означає, що один так буде приблизно дорівнює 0.5 мкс. Тепер дивимося, покладемо, нам потрібно що б таймер спрацював через 1 мкс (на практиці нереально мале значення), Скільки тактів повинен працювати таймер? Привільне відповідь 2. Тобто, через два тика він відлічить потрібні нам 1мкс. Яке число ми повинні встановити в таймер для цього? Правильно, 65534. В цьому випадку, через два такту буде переповнення.
Ускладнюємо приклад, припустимо нам потрібно відміряти 10мкс. У тактах (ми ж пам'ятаємо, що такт це половина мкс) це буде 20. А це означає, що в таймер ми повинні записати число 65536-20 = 65516. Тепер подія переповнення буде через 20 тактів. Логіка зрозуміла?
Ще приклад складніше. Потрібно відміряти 3.5мс. Для того, що б вирахувати, скільки це буде в тактах, розділимо 3.5мс на 0.5мкс, природно, потрібно привести до однакових одиницях виміру: 3500мкс / 0.5мкс = 7000 тактів. Виходить, що в таймер ми повинні покласти число: 65536 - 7000 = 58536.
Тепер проаналізуйте ці три приклади. Випадково чи не нагадує наведену формулу?