- Налаштування обладнання та вимоги
- Електрична схема для взаємодії світлодіодів з Nuvoton N76E003
- Таймерні шпильки на Nuvoton N76E003
- Реєстри таймерів у Nuvoton N76E003
- Типи часу в Nuvoton N76E003
- Програмування мікроконтролера Nuvoton N76E003 для таймерів
- Миготливий код та перевірка результату роботи таймера
У наших попередніх навчальних посібниках з мікроконтролера Nuvoton ми використовували основну програму, яка блимає світлодіодами, як посібник із початку роботи, а також інтерфейс GPIO як вхід для підключення тактильного перемикача. За допомогою цього підручника ми повністю знаємо, як налаштувати проект Keil та налаштувати середовище для програмування мікроконтролера N76E003 Nuvoton. Пора використовувати внутрішню периферію мікроконтролера і рухатися трохи далі, використовуючи вбудований таймер N76E003.
У нашому попередньому підручнику ми використовували лише програмну затримку, щоб блимати світлодіодом, тому в цьому посібнику ми дізнаємося, як використовувати функцію затримки таймера, а також таймер ISR (процедура переривання) та блимати двома окремими світлодіодами. Ви також можете ознайомитись з підручником Arduino Timer та PIC Timer, щоб перевірити, як використовувати таймери з іншими мікроконтролерами. Не витрачаючи багато часу, давайте оцінимо, яке обладнання для налаштування нам потрібно.
Налаштування обладнання та вимоги
Оскільки вимога цього проекту полягає у вивченні таймера ISR і функції затримки таймера, ми будемо використовувати два світлодіоди, з яких один буде блимати за допомогою затримки таймера в циклі while, а інший буде блимати всередині функції ISR.
Оскільки на платі розробки N76E003 є світлодіод, для проекту необхідний один додатковий світлодіод і обмежувач струму, щоб обмежити струм світлодіода. Компоненти, які нам потрібні -
- Будь-який колір світлодіода
- Резистор 100R
Не кажучи вже про те, що, крім вищезазначених компонентів, нам потрібна плата розробки на основі мікроконтролера N76E003, а також програміст Nu-Link. Крім того, для підключення всіх компонентів також потрібні макетні та підключувальні дроти.
Електрична схема для взаємодії світлодіодів з Nuvoton N76E003
Як ми бачимо на схемі нижче, тестовий світлодіод доступний всередині плати розробки і підключений до порту 1.4. До порту 1.5 підключений додатковий світлодіод. Резистор R3 використовується для обмеження струму світлодіода. У крайньому лівому куті показано підключення інтерфейсу програмування.
Таймерні шпильки на Nuvoton N76E003
Контактна схему N76E003 можна побачити в нижче image-
Як ми бачимо, кожен штифт має різні технічні характеристики, і кожен штифт може використовуватися для різних цілей. Однак контакт 1,5, який використовується як вихідний світлодіодний штифт, втратить ШІМ та інші функції. Але це не проблема, оскільки для цього проекту не потрібна інша функціональність.
Причиною вибору контакту 1.5 як виходу та контакту 1.6 як входу є найближча наявність контактів GND та VDD для зручного підключення. Однак у цьому мікроконтролері з 20 висновків 18 висновків можна використовувати як вивід GPIO, а будь-які інші виводи GPIO можна використовувати для виводу та цілей, пов'язаних із введенням, за винятком висновку 2.0, який спеціально використовується для скидання вводу, і його не можна використовувати як вихід. Усі штифти GPIO можна налаштувати в описаному нижче режимі.
Відповідно до таблиці даних, PxM1.n та PxM2.n - це два регістри, які використовуються для визначення контрольної роботи порту вводу-виводу. Оскільки ми використовуємо світлодіод, і нам потрібен штифт як загальний вихідний штифт, тому ми будемо використовувати квазідвонаправлений режим для штифтів.
Реєстри таймерів у Nuvoton N76E003
Таймер - важлива річ для будь-якого блоку мікроконтролера. Мікроконтролер має вбудований периферійний таймер. Nuvoton N76E003 також постачається з 16-бітовою периферією таймера. Однак кожен таймер використовується для різних цілей, і перед використанням будь-якого інтерфейсу таймера важливо знати про таймер.
Типи часу в Nuvoton N76E003
Таймер 0 і 1:
Ці два таймери timer0 та timer1 ідентичні 8051 таймерам. Ці два таймери можна використовувати як загальний таймер або як лічильники. Ці два таймери працюють у чотирьох режимах. У режимі 0 ці таймери працюватимуть у 13-бітному режимі таймера / лічильника. У режимі 1 біт роздільної здатності цих двох таймерів буде 16-бітовим. У режимі 2 таймери налаштовані як режим автоматичного перезавантаження з 8-бітовою роздільною здатністю. У режимі 3 таймер 1 зупиняється, і таймер 0 може використовуватися одночасно як лічильник та таймер.
З цих чотирьох режимів у більшості випадків використовується режим 1. Ці два таймери можуть використовувати Fsys (системну частоту) у фіксованому або попередньо масштабованому режимі (Fys / 12). Його також можна синхронізувати із зовнішнім джерелом годинника.
Таймер 2:
Таймер 2 також є 16-бітовим таймером, який в основному використовується для захоплення форми сигналу. Він також використовує системний годинник і може бути використаний у різних додатках, поділивши тактову частоту за допомогою 8 різних шкал. Він також може використовуватися в режимі порівняння або для генерації ШІМ.
Як і таймер 0 та таймер 1, таймер 2 можна використовувати в режимі автоматичного перезавантаження.
Таймер 3:
Таймер 3 також використовується як 16-розрядний таймер, і він використовується для джерела тактової частоти передачі даних для UART. Він також має функцію автоматичного перезавантаження. Важливо використовувати цей таймер лише для послідовного зв'язку (UART), якщо програма вимагає зв'язку UART. В такому випадку бажано не використовувати цей таймер для інших цілей через суперечливий процес налаштування таймера.
Сторожовий таймер:
Сторожовий таймер можна використовувати як стандартний 6-розрядний таймер, але він не використовується для цієї мети. Використання Watchdog-таймера як загального таймера застосовується для програм із низьким енергоспоживанням, де мікроконтролер залишається переважно в режимі очікування.
Сторожовий таймер, як випливає з назви, завжди перевіряє, чи працює мікроконтролер належним чином чи ні. У випадку повішеного або зупиненого мікроконтролера, WDT (Watchdog Timer) автоматично скидає мікроконтролер, що гарантує, що мікроконтролер працює в безперервному потоці коду, не застрягаючи, не повісившись і не зупинившись.
Таймер автоматичного пробудження:
Це ще один периферійний пристрій таймера, який обслуговує виділений процес синхронізації так само, як таймер сторожового таймера. Цей таймер включає систему періодично, коли мікроконтролер працює в режимі низького енергоспоживання.
Цей периферійний таймер можна використовувати як внутрішньо, так і за допомогою зовнішньої периферії, щоб вивести мікроконтролер з режиму сну. Для цього проекту ми використовуватимемо Таймер 1 і Таймер 2.
Програмування мікроконтролера Nuvoton N76E003 для таймерів
Встановлення штифтів як вихідних:
Почнемо спочатку з розділу виводу. Ми використовуємо два світлодіоди, один - це вбудований світлодіод, який називається Тест і підключений до порту P1.4, і зовнішній світлодіод, підключений до виводу P1.5.
Тому ці два висновки налаштовані як вихідний висновок для підключення цих двох світлодіодів за допомогою наведених нижче фрагментів коду.
#define Test_LED P14 #define LED1 P15
Ці два висновки встановлюються як квазідвонаправлені висновки у функції налаштування.
налаштування порожнечі (порожнеча) {P14_Quasi_Mode; P15_Quasi_Mode; }
Налаштування функції таймера:
У функції налаштування потрібно налаштувати таймер 2, щоб отримати бажаний результат. Для цього ми встановимо регістр T2MOD з коефіцієнтом поділу годинника 1/128 і використаємо його в режимі затримки автоматичного перезавантаження. Ось огляд реєстру T2MOD -
4,5-й та 6-бітний регістр T2MOD встановлюють тактовий дільник 2 тактового дільника, а 7-бітний - режим автоматичного перезавантаження. Це робиться за допомогою рядка нижче -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Ці два рядки визначені у файлі Function_define.h як
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Тепер ці рядки встановлюють значення часу, необхідне для таймера 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Що додатково визначено у файлі Function_define.h як-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 мс
Отже, 16000000 - це частота кристалів 16 МГц, яка встановлює затримку часу 100 мс.
Нижче двох рядків спорожнять байт таймера 2 низький і високий.
TL2 = 0; TH2 = 0;
Нарешті, наведений нижче код дозволить переривання таймера 2 і запустить таймер 2.
set_ET2; // Увімкнути переривання Timer2 set_EA; set_TR2; // Запуск таймера2
Повну функцію налаштування можна побачити в наведених нижче кодах-
налаштування порожнечі (порожнеча) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Увімкнути переривання Timer2 set_EA; set_TR2; // Таймер2 запуску }
Функція таймера 2 ISR:
Функцію таймера 2 ISR можна побачити в наведеному нижче коді.
void Timer2_ISR (void) переривання 5 { clr_TF2; // Очистити таймер2 Прапор переривання LED1 = ~ LED1; // перемикач LED1, підключений в P1.5; }
Миготливий код та перевірка результату роботи таймера
Код (наведений нижче) при компіляції повернув 0 попереджень та 0 помилок, і я прошив його, використовуючи метод прошивки за замовчуванням у Keil. Після блимання світлодіоди блимали із заданою затримкою таймера, як було запрограмовано.
Перегляньте відео, подане нижче, для повної демонстрації роботи плати для цього коду. Сподіваюся, вам сподобався підручник і ви дізналися щось корисне, якщо у вас виникли запитання, залиште їх у розділі коментарів нижче. Ви також можете використовувати наші форуми для розміщення інших технічних питань.