русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Робота з таймерами/лічильниками МК AVR


Дата добавления: 2015-08-14; просмотров: 2452; Нарушение авторских прав


У мікроконтролерах AVR може бути до 4х таймерів/лічильників (МК). Розрядність цих таймерів 8 або 16 біт (тобто вони можуть рахувати до 28=256 або до 216=65536). Зазвичай їх використовують для точного формування часових інтервалів, підрахунку імпульсів на виводах мікроконтролера, формування послідовності імпульсів. Таймери здатні виробляти запити на переривання, при цьому звільняючи процесор від необхідності опитування стану таймерів. Розглянемо роботу таймерів і переривань, які вони можуть виробляти, на прикладі 16-ти бітного таймеру/лічильнику1 (ТС1) мікроконтролера ATmega8. Всього у цього МК три таймера - два 8-ми бітних (ТС0, ТС2) та один 16 бітний (ТС1). Поглянемо на таблицю векторів переривань МК Atmega8 - 7 переривань пов'язані з таймерами мікроконтролера, з них 4 пов'язані з таймером/ лічильником1 (ТС1). Давайте розберемося, що ж може цей таймер, які регістри ним керують і що в них треба записати, щоб налаштувати таймер як нам потрібно. Для початку розглянемо всі регістри ТС1 і за що який біт відповідає, а потім розглянемо простий приклад з налаштування таймера. Почнемо з регістрів управління таймером.

TCCR1A - регістр управління A

Біти 7:6 - COM1A 1:0: контролюють поведінку виходу OC1A (див. Таблицю 4).

Біти 5:4 - COM1B 1:0: контролюють поведінку виходу OC1B (див. Таблицю 4).

 

Таблиця 4 – Стан виходів OC1A та OC1B за події порівняння по каналу А та В

Біти 3:2 - FOC1A, FOC1B: служать для примусового зміни стану виходів OC1A і OC1B.

Біти 1:0 - WGM11, WGM10: служать для налаштування ТС1 для роботи в якості широтно-імпульсного модулятора (ШІМ). У режимі ШІМ стан виходів OC1A і OC1B буде відрізнятися.

TCCR1B - регістр управління

Біт 7 - ICNC1: придушення брязкоту контактів на вході ICP1. Якщо біт встановлений, то визначення події на вході ICP1 відбувається із затримкою на 4 машинних цикли.



Біт 6 - ICES1: вибір фронту спрацьовування переривання по захопленню. Якщо встановлений - на зростаючому фронті, якщо скинутий - на падаючому фронті.

Біт 5 - не використовується

Біти 4:3 - WGM1 3:2: для налаштування ШІМу.

Біти 2:0 - CS1 2:0: вибір тактування ТС1 (Таблиця 5).

Таблиця 5 – Вибір тактування таймеру 1.

 

Після налаштування таймеру з частотою, яку ми обрали в регістрі TCCR1B лічильник таймера починає рахувати і записувати значення лічильника в регістри TCNT1H і TCNT1L - старший і молодший байт рахункового регістра. При досягненні TCNT1 значення 65536 лічильник переповнюється і скидається, і починає рахунок заново. В цей регістр ми також можемо записати якесь значення, з якого ми хочемо, щоб наш лічильник стартував. Для 16-бітної операції запису, старший байт повинен бути записаний першим. Молодший - другим. Для операції 16-бітного читання, молодший байт повинен бути прочитаний першим, а вміст старшого байта зчитується другим. Якщо ми налаштували зміну стану входу OC1A або OC1B, тоді значення рахункового регістра порівнюється кожен раз зі значенням регістрів OCR1A і OCR1B - регістри порівняння. Кожен із цих регістрів складається з двох байт (наприклад, OCR1AH та OCR1AL). Ми можемо записати в ці регістри потрібне нам значення і за збігом значення регістра лічильника з регістром порівняння буде відбуватися потрібне нам зміна на виходах OC1A і OC1B. У МК також є регістр захоплення входу - ICR1 (ICR1H і ICR1L). Значення TCNT1 в цей регістр записується при настанні події на вході ICP1.

Крім рахунку і зміни стану ніжок МК цей таймер може при певних подіях генерувати переривання. Як ми вже бачили в таблиці векторів переривань у ТС1 є 4 вектора переривання - переривання по захопленню, переривання за збігом А, переривання за збігом, переривання по переповненню (перелічені в порядку зменшення пріоритету). Розглянемо регістри, налаштовуючи які можна управляти перериваннями ТС1.

 

TIMSK - регістр маски переривань таймерів/лічильників

Біт 7 - OCIE2: переривання за збігом ТС2

Біт 6 - TOIE2: переривання по переповнюванню ТС2

Біт 5 - TICIE1: переривання по захопленню ТС1

Біт 4 - OCIE1A: переривання за збігом A ТС1

Біт 3 - OCIE1B: переривання за збігом В ТС1

Біт 2 - TOIE1: переривання по переповнюванню ТС1

Біт 1 - не використовується

Біт 0 - TOIE0: переривання по переповнюванню ТС0

Якщо відповідний біт встановлений в "1" і біт I (7-й біт) регістра станів SREG встановлений в "1", тоді відповідне переривання буде спрацьовувати.

TIFR - регістр прапорів переривань таймерів/лічильників

Прапори відповідають переривань у регістрі TIMSK. Встановлюються в "1" при виконанні умов відповідного переривання.

Інші таймери налаштовуються аналогічним чином. Тепер ми можемо узагальнити і записати якими можливостями володіє цей таймер:

- Лічильник 16-ти бітний (16 бітний ШІМ);

- Два незалежних виходу, що спрацьовують за збігом;

- Один вхід по захопленню події (росте або падає фронт) і придушення брязкоту контактів на цьому вході;

- Тактування від вбудованого тактового генератора або зовнішнього джерела тактування (T1);

- 4 незалежних переривання.

Розглянемо приклад реалізації таймера/лічильника. На рис. 2 наведена принципова схема пристрою. Таймер/лічильник включає та виключає світлодіод D1 з частотою 1 Гц.

 

 

 

Рисунок 2. – Генератор сигналу включення світлодіода.

 

Розглянемо програму зроблену у середовищі CodeVisionAVR, що реалізує даний пристрій.

 

#include <mega8.h>
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
TCNT1H=0x00;//
TCNT1L=0x00;//
}
void main(void)
{
DDRB=0x02; // налаштовуємо біт 1 порту В як вихід
PORTB=0x00;
TCCR1A=0x40; // рівень сигналу на виході ОС1А змінюється
//на протилежний
TCCR1B=0x05; // тактову частоту ділимо на 1024
TCNT1H=0x00; // у рахункові реєстри спочатку "зі скількох рахуємо" (старший)
TCNT1L=0x00; // записуємо 0 "зі скількох рахуємо" (молодший)
OCR1AH=0x03; // до скількох рахувати (старший регістр)
OCR1AL=0xЕ8; // до скількох рахувати (молодший регістр)
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts #asm("sei")// дозволяємо обробку переривань
while (1)
{
// Place your code here }
}

2.3 Робота МК AVR з LCD дисплеєм.

Серед параметрів, що відрізняють одні LCD від інших, виділяється марка внутрішнього контролера. В подальшому будуть розглядатися тільки моделі, сумісні з контролера HD44780 (фірма Hitachi) і його аналогами, наприклад, KS0066 (фірма Samsung), SED1278 (Epson), ST7066 (фірма Sitronix).

Внутрішня конструкція LCD наведена на рис.3.

Рисунок 3. – внутрішня конструкція LCD.

 

Перевагою символьних багаторядкових LCD є те, що турботу про подання необхідних напруг на масив "РК-конденсаторів" бере на себе вбудований контролер, що управляє. На рис.3 показана структурна схема типового LCD з організацією 16х2, яка ідентична для всіх моделей незалежно від фірми-виробника. Основу становить спеціалізований контролер, зазвичай виконаний у вигляді однієї або двох мікросхем-"крапельок", рідше - у вигляді фірмової SMD-мікросхеми. За призначенням виводів і системою команд він збігається з родоначальником серії - HD44780. Загальноприйнята назва таких мікросхем "Dot Matrix Liquid Crystal Display Controller/Driver", з чого випливає їх подвійна функція - контролер управляє інтерфейсом, а драйвер "запалює" сегменти.

Контролер синхронізується внутрішнім RC-генератором G1, що має частоту 250 ±50 кГц. Напруга підсвічування подається через виводи А й на світлодіоди, які висвітлюють РК-панель з торця або зворотного боку корпусу. Світлодіоди включені матрицею і з'єднані паралельно-послідовно. У зв'язку з цим напруга підсвічування досить висока 4,0...4,2 В.

Призначення і нумерація всіх зовнішніх виводів LCD уніфіковані (Табл.6). Це не залежить від кількості рядків і символів, будь то "8x1" або "16x2". Навіть контакти світлодіодного підсвічування 15, 16 є на всіх LCD, хоча при її фізичному відсутності вони будуть просто "висіти в повітрі".

Таблиця 6 – Призначення виводів LCD.

 

Електричний інтерфейс складається з трьох шин:

DB0-DB7 шина даних;

RS, R/W, E шина управління;

VCC, GND, Vo, A, K шина живлення.

Типова схема підключення LCD до МК показана на рис.4. Кнопка SB1 здійснює початкове скидання. Змінним резистором R2 регулюють контрастність зображення. Його опір непринциповий і може змінюватися від 5 до 20 кОм.

Відрегулювати R2 слід на перегині характеристики, як правило, з потенціалом ближче до загального проводу, коли слабо видно всі точки знакомісць на LCD. Неправильна установка контрастності може призвести до помилкового висновку про дефект індикатора, хоча все, що потрібно зробити, це покрутити движок резистора.

Керуюча програма зберігається в МК DD1. Щоб полегшити її складання, тут і в подальшому прийняті деякі спрощення.

По-перше, LCD буде працювати тільки на прийом інформації по всіх 11 з'єднувальним лініях шини даних і управління.

По-друге, екран LCD вважається жорстко прив'язаним до початкової позиції з фіксованими адресами знакомісць.

По-третє, при програмуванні буде використовуватися обмежений набір команд (бажаючі зможуть в наслідок розширити свої пізнання, вивчивши Datasheet на HD44780).

 

Програмне управління LCD

Оскільки всередині LCD знаходиться свій власний контролер зі своєю розгалуженою системою команд, то завдання спрощується. Дві такі потужні та інтелектуальні мікросхеми, як HD44780 і ATmega8, швидко зможуть між собою «домовитися» на машинній мові. Праця програміста полягає в тому, щоб "пояснити" контролерам правила спілкування і встановити протокол з'єднання.

Рисунок 4. - Типова схема підключення LCD до МК.

У табл.7 показана розшифровка найбільш вживаних команд, що посилаються від МК в LCD, а на рис.5 - розподіл адрес на верхній і нижній рядках екрана. Час виконання команд вказано приблизно. Він визначається частотою внутрішнього RC-генератора LCD, яка, в свою чергу, залежить від технологічного розкиду і температури нагріву корпусу.

Розрізняють команди прямого і непрямого дії. Перші з них займають адреси 0x01-0x3F і не вимагають передачі даних. За другими (діапазон вище 0x3F) обов'язково здійснюється передавання одного або декількох байтів інформації. Для прикладу на рис.6 показані часові діаграми виконання команди 0x80 "Установка курсору в перше знакомісце верхній рядок екрана" і індикація в ньому цифри "4" пересиланням коду даних 0x34.

Формувати діаграми, показані на рис.6, повинен МК з урахуванням затримок з табл.7, необхідних контролеру LCD на виконання команд. Для підвищення стійкості роботи економити на затримках не треба. Принаймні, при налагодженні програми вони повинні бути досить великими.

 

 

Таблиця 7. – Основні команди LCD.

 

 

 

Рисунок 5. - Розподіл адрес на верхній і нижній рядках екрана LCD.

 

 

Рисунок 6. – Часові діаграми роботи з LCD.

 

Кожне знакомісце на екрані LCD має свою логічну адресу. Представити його можна у вигляді регістру, куди заноситься один байт інформації. В залежності від вмісту байта на екрані з'являється той чи інший символ. Розподіл символів відповідає таблиці знакогенератора, що схожа на застосовану в шрифтах комп'ютера.

Для активізації чотирьохбітового режиму треба програмно сформувати сигнали управління згідно з часовим діаграмам на рис.7. По структурі вони збігаються з діаграмою 8-ми розрядної шини за винятком подвоєного числа імпульсів "Е". Лінії зв'язку проходять через старші розряди шини даних DB4-DB7, молодші DB0-DB3 залишаються не задіяними.

Перевага режиму - мале число провідників, спрощення топології друкованої плати, економія ліній портів МК (рис.8). Недолік - знижена швидкість передачі даних в LCD, так як доводиться передавати інформацію двома порціями (ніблами або тетрадами) по 4 біта в кожній. Однак, враховуючи обов'язкові затримки часу в програмі і фізичну інерційність "рідких кристалів", зниження швидкості майже не відчувається.

 

Рисунок 7. – Часові діаграми роботи з LCD за чотирьохбітовим режимом.

Кожен LCD має вбудований знакогенератор, який представляє собою область ПЗП об'ємом понад 8 Кб, яка прошивається на заводі-виробнику.

Традиційно перша половина ПЗУ з адресами 00-7FH містить накреслення цифр, знаків пунктуації, а також заголовних і малих літер латинського алфавіту. Все як у IBM PC. Друга половина "віддана на відкуп" національним алфавітами. У зв'язку з цим HD44780 має модифікації виконання з трьома основними варіантами зашиття знакогенератора:

- латиниця та європейські мови (European standard font або Euro);

- латиниця і японські ієрогліфи (Japanese standard font або Japan);

- латиниця та кирилиця (Custom font або Russian, табл.8).

 

Не всі з осередків знакогенератора заповнені. При зверненні до "порожнім" клітинок на екрані буде виведено довільна інформація, що найчастіше складається з засвічених точок. Перші 8 символів з адресами 0х00-0х07H позначені "зірочкою". При бажанні вони можуть бути самостійно запрограмовані користувачем.

 

 

Рисунок 9. - Схема підключення LCD до МК по 4-х провідній шині.

 

Таблиця 8. – Вбудований знакогенератор LCD.

 
 




<== предыдущая лекция | следующая лекция ==>
Системи керування. | Інтерфейс 1-Wire і температурний датчик DS18B20


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.715 сек.