С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
1

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

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

Author24 — интернет-сервис помощи студентам
Как настроить таймер 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2017, 09:19
Ответы с готовыми решениями:

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

Проблема с работой таймера/счетчика 0 на ATmega8
Всем привет! Столкнулся с одной очень интересной проблемой при работе с таймером/счетчиком на...

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

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

Установить период входных импульсов таймера счетчика, равным 8 мс при ча-стоте резонатора в 2 МГц
МК: atmega 128 Установить период входных импульсов таймера счетчика, равным 8 мс при частоте...

3
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
06.05.2017, 09:36 2
Цитата Сообщение от grey-vsm Посмотреть сообщение
TCNT0=0xFE; * // Счетный регистр таймера Т0
не маловато ли? один тик
при частоте камня даже 1 Мгц и дележке 1024 прерывание будет каждую 1 милисекунду
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
06.05.2017, 11:43  [ТС] 3
тогда при t=1 количество тактов будет =4000, тогда разрядности таймера Т0 будет мало, и нужно использовать 16 разрядный таймер Т1?

Добавлено через 9 минут
ValeryS скажите мне для будущего, как в создаваемой теме или ответе правильно вставлять коды программ и изображения, а то получается что когда я создаю тему с добавление кода программы вам приходится иправлять
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2017, 17:35
Помогаю со студенческими работами здесь

На основе таймера/счетчика 1 построить схему делителя частоты с коэффициентом деления 500 (ATmega16)
Здравствуйте, помогите с заданием по микроконтроллерам ATmega AVR. На основе таймера/счетчика 1...

На основе таймера/счетчика 1 построить схему формирователя импульсов, длительностью 1с, используя микроконтроллер с част
Здравствуйте, нужно сделать задание: Assembler AVR studio На основе таймера/счетчика 1...

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru