Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
1

настройка таймера/счетчика

06.05.2017, 09:19. Просмотров 960. Ответов 3
Метки нет (Все метки)

Как настроить таймер ATmega8 на отсчет интервалов времени равных 1 сек. Я попытался настроить таймер для мигания светодиодом подключенного к PORTD.0, но при проверке в протеусе программа не работает, значение PORTD.0 остается без изменения.
Текст программы
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//*************************************************************************************************************
/*
 * Timer_1sec.cpp
 *
 * Created: 06.05.2017 10:16:02
 *  Author: Grey-vsm
 */ 
 
      #define F_CPU 4096000
      #include <avr/io.h>
      #include <avr/interrupt.h>
      
      #define ddrSEC DDRD
      #define portSEC PORTD
      
       // Declare your global variables here
       unsigned char volatile T;
       unsigned char volatile a;
      //----------------------------------------------------------
      
      //-----Prototips Function------------------------------------------------------
      void Init_MK (void); //Прототип функции инициализации МК
      //-----------------------------------------------------------------------------
                                                                                     
      //----Функция обработки прерывания по переполнению таймера/счетчика------------
      ISR (TIMER0_OVF_vect)
         {
             TCNT0=0xFE;
             T=T+1;
             if (T>=2)
               {  T=0;
                  a=1;
                };
             asm("RETI");
          }
                                                                                      
      void Init_MK (void)
         {                                                                                 
           // Input/Output Ports initialization
           // Port D initialization
           // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
           // State7=1  State6=1  State5=1  State4=1  State3=1  State2=1  State1=1  State0=1
           ddrSEC=0xFF;
           portSEC=0xFF;
                                                                                                             
           // Timer/Counter 0 initialization
           // Clock source: System Clock
           // Clock value: 4,000 kHz
           TCCR0=0x05;   /*Регистр управления тактовым сигналом.
                Задаётся коэфициент деления тактового сигнала=1024*/
           TCNT0=0xFE;   // Счетный регистр таймера Т0
                                                                                                       
           // Timer(s)/Counter(s) Interrupt(s) initialization
           TIMSK=0x01;
          }
                                                                                                                                                                                            
      int main(void)
         {
             Init_MK ();
             asm("sei");
             T=0;
             a=0;
             while(1)
                {
                    if (a)
                      {
                          portSEC=portSEC^(1<<0);
                          a=0;
                       } 
                 }
          }
//*************************************************************************************************************
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2017, 09:19
Ответы с готовыми решениями:

Работа таймера/счетчика AVR
Для чего 2 регистра OCR0A и OCR0B? Если счетчик достиг 1-го зачения записанного в одном из этих...

Подсчет одиночных импульсов на внешнем входе таймера-счетчика Т0
Задание такое ! Подсчет одиночных импульсов на внешнем входе таймера\счетчика Т0:если сумма меньше...

Прерывание по переполнению таймера-счетчика ATmega8535 (ASM, AVR Studio 4)
Система прерываний на примере прерывания по переполнению встроенного таймера-счётчика...

В чем отличие таймера АВР от счетчика АВР?
Объясните,пожалуйста.

Настройка таймера в ATmega8
Здравствуйте! Необходимо сделать таймер с обратным отсчетом. Исходник уже есть. В нем не понятно...

3
ValeryS
Модератор
7523 / 5700 / 736
Регистрация: 14.02.2011
Сообщений: 19,504
Завершенные тесты: 1
06.05.2017, 09:36 2
Цитата Сообщение от grey-vsm Посмотреть сообщение
TCNT0=0xFE; * // Счетный регистр таймера Т0
не маловато ли? один тик
при частоте камня даже 1 Мгц и дележке 1024 прерывание будет каждую 1 милисекунду
0
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
06.05.2017, 11:43  [ТС] 3
тогда при t=1 количество тактов будет =4000, тогда разрядности таймера Т0 будет мало, и нужно использовать 16 разрядный таймер Т1?

Добавлено через 9 минут
ValeryS скажите мне для будущего, как в создаваемой теме или ответе правильно вставлять коды программ и изображения, а то получается что когда я создаю тему с добавление кода программы вам приходится иправлять
0
ValeryS
Модератор
7523 / 5700 / 736
Регистрация: 14.02.2011
Сообщений: 19,504
Завершенные тесты: 1
06.05.2017, 17:35 4
grey-vsm, пишешь код, потом выделяешь, и нажимаешь кнопочку С для Си кода, С++ для плюсового кода
кнопочки находятся в шапке окна ответа

Цитата Сообщение от grey-vsm Посмотреть сообщение
количество тактов будет =4000, тогда разрядности таймера Т0 будет мало, и нужно использовать 16 разрядный таймер Т1?
можно
а можно пойти другим путем, ввести временную переменную и подсчитывать её каждое прерывание
например прерывание каждые 200 тиков, тогда для 4000 временная переменная должна быть 20
например
C
1
2
3
4
5
6
7
8
9
10
11
ISR (TIMER0_OVF_vect)
  {
         static unsigned char tmp=0;   
          TCNT0=56;// подкорректировать для своего таймера 
     tmp++;
    if(tmp>=40)
        {
         tmp=0;
         // здесь код который должен вызываются каждую секунду
         }
  }
0
06.05.2017, 17:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2017, 17:35

ATmega2560 настройка таймера
Добрый день, уважаемые участники форума, В процессе изучения курса AVR и дойдя до &quot;AVR. Учебный...

Настройка таймера с разными предделителями
Пытаюсь настроить восьми битный таймер мк atmega8 на частоту 31250 Гц, что бы срабатывало...

Данные таймера-счетчика по внешнему прерыванию
мк AT90S8535 программа которая по внешнему сигналу учитывает показания таймера- счетчика 1(через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru