Воскресенье, 27.10.2024, 18:25
Приветствую Вас Гость | RSS

AVR

Каталог статей

Главная » Статьи » Программирование МК

Простая работа с 1 таймером avr
Сразу смотрим нужные там 2 таблицы:
Таблица 1


Таблица2 


Таймер из 2 таблицы нам нужен  TOIE1. То есть TIMSK = 0b00000100; \\\это число зашифровывает цифру 2, если считать от 0 слева. А 2-TOIE1.

Я использую внутренний гениратор на 8МГЦ
Частота МК-8 000 000 Гц
Смотрим на 1 таблицу, для примера возьмем делитель на 1024 (101), переведем из 2 в 10 систему счисления, получится 5. 
Значит 
TCCR1B=0x05;
Частота таймера=Тактовая частота / делитель = 8 000 000 / 1024= 7812.5 Гц
Период это обратное значение частоты. 1\частоту таймера=1\7812.5=0.000128 с= 128 * 10^-6 с = 128 мкс
Максимальное значение, которое может измерить 16 битный таймер - 65536
65536 * 128 * 10^-6 = 8.388 секунды. 
Это число (8.388) значит что таймер будет срабатывать(переполняться) каждые 8.388 сек. Если вам нужно другое число то просто настаиваем частоту МК на нужную частоту и выбираем делитель.

Теперь пример кода :) 

  1. #include <mega8.h>
  2.  
  3. unsigned char pr=0; \\\число, в которое будем записывать количество прерываний таймера. Например2-2*8.388 = 16.776 секунды
  4. // Declare your global variables here
  5.  interrupt[TIM1_OVF]void timer1_overflow(void)  \\\настройки таймера
  6.  {    
  7.  TCNT1=0; \\\обнуляем таймер. Именно в него записывает 8.388 и он обнуляется каждое это время
  8.  pr++; \\\каждый раз как обнуляется таймер в него записывает единица
  9.  if(pr==1) \\\если pr=1, значит таймер уже обнулился 1 раз (прошло 8.388 секунды)
  10.  {
  11.  PORTC.1=0;  \\\настраиваем порт на 0 через 8.388 сек после старта
  12.  }
  13.  else if(pr==30) \\\если pr=30, значит таймер обнулился 30 раз. 8.388*30=251.64с=4.2 минуты
  14.  {
  15.  PORTC.1=1; \\\настраиваем порт как 1 через 4.2 минуты
  16.  }
  17. else if(pr==59)\\\таймер обнулялся 59 раз=8.2 минуты
  18. {
  19. pr=0; \\\обнуляем наш счетчик на 8 минут. Цикл начинается заново
  20. }
  21.  
  22.  
  23.  }
  24.  
  25. void main(void)
  26. {
  27. TCCR1B=0x05; \\\делитель на 1024
  28. TIMSK = 0b00000100; \\\TOIE1
  29. TCNT1=0; \\\Снова обнуляем счетчик
  30. #asm  \\\разрешаем прерывания
  31. sei
  32. #endasm
  33.  
  34. DDRC.1=0xff;  \\\ настраиваем порт
  35. PORTC.1=1;
  36. while (1)
  37.       {
  38.       };
  39. }

Наш код через 8 сек после старта avr настраивает портс.1 как 0, через 4.2 мин делает порт как 1 и через 8.2 минуты обнуляем таймер и все начинается заново. Числа и порты можете выбирать сами, надеюсь все понятно!
На этом все! Спасибо :)  
Категория: Программирование МК | Добавил: vlad1995 (23.11.2012)
Просмотров: 6166 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:

Меню сайта

Категории раздела

Мини-чат

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Поиск

Наша кнопка


avr123.ucoz.ru