15318

Использование таймера в AVR микроконтроллерах

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №2 Использование таймера в AVR микроконтроллерах Цель работы: написать для микроконтроллера программу с использованием таймеров МК по прерыванию и вывод значений переменной на дисплей на языке программирования С согласно варианта. Прежде чем пр

Русский

2013-06-11

89 KB

10 чел.

Лабораторная работа №2

Использование таймера в AVR микроконтроллерах

Цель работы: написать для микроконтроллера программу с использованием таймеров МК по прерыванию и вывод значений переменной на дисплей на языке программирования С согласно варианта.

Прежде чем приступить к изучению таймера определимся с базовыми понятиями. Например, частота. Простым языком, частота это количество повторений, какого либо действия в секунду. Это значит, что если вы за секунду хлопнете в ладошки 2 раза, то частота хлопков будет равна 2Гц. Если за 2 секунды 2 раза, частота 1Гц.

Далее, каждый микроконтроллер работает на определенной частоте. Поэтому, ему нужен источник данной частоты. Микроконтроллер может тактироваться от внутреннего (собственного) источника и внешнего.

Частота внутреннего источника может изменяться («плавать») из за температуры и т.п., поэтому считается непригодным для для серьезных проектов . Поэтому применяется стабильный источник внешней частоты — кварцевый резонатор (кварц). Один из вариантов исполнения кварцевого резонатора:

Теперь, кое что о таймере. Таймер работает на той же частоте, что и микроконтроллер. Либо на частоте, меньшей в 8/64/256/1024 раз, это называется предделителем.

Допустим, мы выбрали предделитель 1024, частота микроконтроллера 8мГц.

8 000 000 / 1024 = 7813 — это частота, на которой работает наш таймер. По простому говоря, за одну секунду таймер тикнет 7813 раз.

Допустим, нам нужно, чтобы раз в 0,5 секунды выполнялся наш код. За одну секунду 7813 тиков, за пол секунды в 2 раза меньше — 3906. Именно это значение мы должны сравнивать с текущим количеством тиков. Но вот у нас совпали эти 2 значения и что дальше? Для этого существует такая полезная штука как прерывание. Это значит, что при совпадении, ваша текущая программа остановится и начнет выполняться тот код, который мы напишем в прерывании. Как только он будет выполнен, программа продолжит работу с того места, где была прервана. Вот такая полезная штука эти прерывания.

Вот теперь напишем нашу программу. Поэтому создаем проект с помощью мастера проектов. Сразу подключим LCD.

Переходим на вкладку Timers и тут остановимся поподробнее:

Выбираем частоту 7813 и устанавливаем галочку напротив пункта Interrupt on: Compare A Match. Таким образом мы указали, что при совпадении значения выполнять прерывание (то о чем было написано выше). Прерывание будем выполнять 1 раз в секунду, т.е. нам нужно тикнуть 7813 раз, поэтому переводим число 7813 в шестнадцатеричную систему и получим 1e85. Именно его и записываем в регистр сравнения Comp A. Регистр сравнения Comp A 16 битный, поэтому число больше 2^16=65536 мы записать не можем.

Генерим, сохраняем, вычищаем наш код. Появится новый непонятный кусок кода

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{

}

Это то самое прерывание. Именно внутри этих скобок мы можем писать тот код, который мы хотели бы выполнять через определенные промежутки времени. У нас это одна секунда. Итак логично создать переменную, которую мы будем увеличивать 1 раз в секунду, т.е. 1 раз за прерывание. Поэтому проинициализируем переменную int s =0; а в прерывании будем ее увеличивать от 0 до 59. Значение переменной выведем на жк дисплей. Никаких хитростей, все очень просто.

Получившийся код.

#include <mega8.h>

 #asm

  .equ __lcd_port=0x18 ;PORTB

#endasm

#include <lcd.h>

 int s = 0; // переменная для хранения секунд

 // Обработка прерываний

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

   s++; // увеличиваем переменную каждую секунду

   if(s>59) // обнуляем секунды после 59

    {

      s=0;

    }

 

   TCNT1H=0;

  TCNT1L=0;

 }

  

 void main(void)

 {

 

 TCCR1A=0x00;

 TCCR1B=0x05;

 TCNT1H=0x00;

 TCNT1L=0x00;

 ICR1H=0x00;

 ICR1L=0x00;

 OCR1AH=0x1E;

 OCR1AL=0x85;

   TIMSK=0x10;

   lcd_init(8);

   #asm("sei")

 while (1)

 {

        lcd_gotoxy(0,0);  

       lcd_putchar(s/10+0x30);

        lcd_putchar(s%10+0x30);

     };

}


Варианты заданий

№ Варианта

Порт подключения дисплея

Кол-во знаков

дисплея

Начальное положение курсора на дисплее, x, y

Время прерывания, сек

Микро

контроллер

1

Порт А

24

0,1

0,28

ATmega16

2

Порт D

16

1,2

0,73

ATmega32

3

Порт B

24

1,3

2,02

ATmega64

4

Порт E

16

1,4

1,24

ATmega128

5

Порт B

12

0,2

1,55

ATmega16

6

Порт C

12

1,2

1,34

ATmega32

7

Порт C

20

0,2

1,77

ATmega64

8

Порт D

12

0,1

1,56

ATmega128

9

Порт C

16

0,3

1,22

ATmega16

10

Порт B

20

1,5

1,45

ATmega32

11

Порт D

16

1,6

2,12

ATmega64

12

Порт C

12

0,0

2,47

ATmega128

13

Порт D

20

1,7

0,95

ATmega16

14

Порт А

24

1,9

1,23

ATmega32

15

Порт E

16

1,8

0,77

ATmega64

Отчет должен содержать:

  1.  Схему устройства;
  2.  Код программы с пояснениями.


 

А также другие работы, которые могут Вас заинтересовать

36741. ОРГАНИЗАЦИЯ ЗАЩИТЫ НАСЕЛЕНИЯ В ВОЕННОЕ ВРЕМЯ 112.5 KB
  Оружие массового поражения обладает огромными поражающими возможностями, в связи с чем важное значение имеют надежная защита населения на всей территории страны и обеспечение устойчивости работы всех объектов экономики в случае применения этого оружия.
36742. Изучение свободных колебаний связанной системы тел 174 KB
  Цель работы: Определение периода колебаний и коэффициента затухания системы содержащей груз блок и пружину. Гармоническими называются колебания при которых изменение фйзической величины например смещения груза у с течением времеи закон колебаний выражается формулой или . амплитуда колебаний; фаза колебаний; циклическая частота; Любое механическое колебание происходит с затратами энерпш на работу протнв сил трения.
36743. Определение длины волны и частоты электромагнитного колебания с помощью схемы Лехера 203 KB
  Цель работы: исследование распределения амплитуд напряжения и тока вдоль двухпроводной линии при различных режимах её работы на сверхвысоких частотах (СВЧ) и определение длины волны генератора СВЧ волн.
36744. Изучение стоячих волн 45 KB
  Цель работы: изучение стоячих волн и определение скорости распространения волны в натянутом шнуре.
36745. Изучение основных свойств волновых явлений 211 KB
  Измерьте зависимость амплитуды принимаемого приемником сигнала показания микроамперметра от угла поворота приемника относительно его начального положения в пределах от до поворачивая подвижную скамью с приемником вокруг неподвижной оси через . Угол поворота 5 10 15 20 25 30 35 40 45 90 Амплитуда 465 39 23 125 35 1 05 05 05 0 Таблица 2. Угол поворота 5 10 15 20 25 30 35 40 45 90 Амплитуда 40 245 105 15 1 1 1 05 05 0 Рис. Измерьте зависимость показаний микроамперметра от угла поворота детектора влево и вправо от центра...
36746. Работа с электронными каталогами и электронными библиотеками 75.5 KB
  Задание №1 Порядок выполнения: Загрузите файл “домашней†титульной страницы Home Pge: Библиотеки Российской академии наук БАН набрав ее электронный адрес URL: http: www. Задание №2 Работа с электронными каталогами библиотек Понятие электронный каталог сформировалось в США где этот термин имеет несколько значений. Современные электронные каталоги реальных библиотек должны обеспечивать не только быстроту и точность поиска но и сервисность т.
36747. Дискретизация непрерывных сигналов 164.5 KB
  Для этого из бесконечного множества значений этой функции параметра сигнала выбирается их определенное число которое приближенно может характеризовать остальные значения. Область определения функции разбивается точками x1 x2 xn на отрезки равной длины и на каждом из этих отрезков значение функции принимается постоянным и равным например среднему значению на этом отрезке; полученная на этом этапе функция называется в математике ступенчатой. Следующий шаг проецирование значений “ступенек†на ось значений функции ось ординат....
36748. КОНТРОЛЬ РАЗМЕРОВ ЦИЛИНДРИЧЕСКИХ ДЕТАЛЕЙ 348 KB
  Лабораторная работа №3 КОНТРОЛЬ РАЗМЕРОВ ЦИЛИНДРИЧЕСКИХ ДЕТАЛЕЙ Излагается методика измерения размеров цилиндрических деталей с помощью различных универсальных измерительных средств и оценки годности данной детали в соответствии с заданными требованиями по чертежу. Цель работы приобрести первичные практические навыки в выполнении измерений с помощью различных универсальных измерительных средств приобрести навыки в оценке годности детали по линейным размерам I. С помощью выбранных универсальных измерительных средств определить...
36749. Обработка результатов косвенных измерений: классическая задача о методе наименьших квадратов 134.5 KB
  Цель работы: изучение задачи и методов обработки результатов измерений; исследование в системе Mtlb задачи оценивания местоположения объекта по измерениям пеленгов. Результаты измерений показания приборов функционально связаны с параметрами вектором параметров: 3. где известные скалярные функции; ошибки измерений; входные переменные которые измеряются точно или отсутствуют.