Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/44: Рейтинг темы: голосов - 44, средняя оценка - 4.91
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
1

Использование таймера в ATTiny 2313

24.11.2013, 19:34. Просмотров 8605. Ответов 16
Метки нет (Все метки)

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
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char rab;
ISR(TIMER1_COMPA_vect)
{
    if (PIND&(1<<PIND0))
    {
        TCNT0=7;
        rab>>=1;[LIST=1]
        if(rab==0)
        rab=0x80;
    } 
    else
    {
        rab<<=1;
        if(rab==0)
        rab=1;
    }
    PORTB=rab^0xff;
}
int main(void)
{
    DDRD&=(~(1<<DDD0));
    DDRB=0xff;
    PORTB=0xff;
    PORTD=0xff;
    ACSR=0x80;
    TIMSK=0x40;
    TCCR1B=0b00001101;
    OCR1AH=0x03;
    OCR1AL=0x0c;
    rab=0b00010000;
    asm("sei");
    while(1)
    {
    }
}
Эта программа написана с использованием таймера 1 а как сделать эту же программу (преобразовать)
что бы она работала на таймере 1 ? (нужно занести по заданию свой номер по журналу)
надеюсь на вашу помошь
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 19:34
Ответы с готовыми решениями:

ATtiny 2313
Добрый день, возникли трудности с работой с МК. Это мой первый практический опыт в паянии и работе...

Термостат на ATTiny 2313
Собираю термостат в Протеусе на Attiny 2313. Имеется код на ассемблере (5.txt) но компилятор...

AtTiny 2313, прерывания
Доброго времени суток. Решил освоить программирование МК и сразу же столкнулся с проблемой, которую...

Attiny 2313 не прошивается
Attiny 2313 пытаюсь прошить через arduino nano но ни как не могу подключил тут на nano есть...

Работа с UART (Си, ATtiny 2313)
Дорогие формчане и знатаки по микроконтролёрам я Новичок в этом деле. У меня есть вопрос, есть...

16
paskal
455 / 303 / 29
Регистрация: 15.08.2011
Сообщений: 946
24.11.2013, 19:41 2
Для начала надо вопрос правильно сформулировать. Какой таймер вам нужен то?
0
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 19:45  [ТС] 3
Нужен таймер 0.
0
raxp
10197 / 6579 / 493
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.11.2013, 19:45 4
с использованием таймера 1, а как сделать, чтобы она работала на таймере 1
т.е.? У этого камня один 8-ми разрядный таймер и один 16-разрядный таймер.
0
24.11.2013, 19:45
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 20:03  [ТС] 5
ой, мне нужна программа на таймере о!

Добавлено через 9 минут
Цитата Сообщение от paskal Посмотреть сообщение
Для начала надо вопрос правильно сформулировать. Какой таймер вам нужен то?
Нужен таймер о.
0
raxp
10197 / 6579 / 493
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.11.2013, 20:36 6
...дык, в даташите и смотрите:
C
1
2
3
4
5
6
7
8
9
10
11
// Timer/Counter 0 initialization
TCCR0A=0x02; // Set CTC mode(interrupt on math)
TCCR0B=0x05; // Set 1/1024 clock prescaler  (0,977 kHz)
TCNT0=0x00;  // Default timer0 value=0
 
//--------------Timer 0 output compare A----------------
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
    GIMSK |= (1<<INT0);
    TIMSK=0x00;      
}
Еще можете запустить мастер в CVAVR и воспользоваться его шаблоном проектов, сразу наглядно и в коде увидите куда что и где.
1
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 20:50  [ТС] 7
спасибо! сейчас попробую.
0
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 20:59  [ТС] 8
Использование таймера в ATTiny 2313


Использование таймера в ATTiny 2313
Цитата Сообщение от raxp Посмотреть сообщение
...дык, в даташите и смотрите:
C
1
2
3
4
5
6
7
8
9
10
11
// Timer/Counter 0 initialization
TCCR0A=0x02; // Set CTC mode(interrupt on math)
TCCR0B=0x05; // Set 1/1024 clock prescaler  (0,977 kHz)
TCNT0=0x00;  // Default timer0 value=0
 
//--------------Timer 0 output compare A----------------
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
    GIMSK |= (1<<INT0);
    TIMSK=0x00;      [ATTACH]332854[/ATTACH]
}
Еще можете запустить мастер в CVAVR и воспользоваться его шаблоном проектов, сразу наглядно и в коде увидите куда что и где.
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
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char rab;
 
 
 
ISR(TIMER0_COMPA_vect)
{
    if (PIND&(0<<PIND0))
    {
        
        PORTB^=(0>>PB0);
        rab=rab<<1;
        if(rab==0)
        rab=0x0b10000000;
    } 
    else
    {
        rab=rab<<1;
        if(rab==0)
        rab=0b00000001;
        
    }
    PORTB=rab^0xff;
 
}
void main(void)
{
    TCNT0=0x07;
    DDRB=0xff;
    PORTB=0xff;
    PORTD=0x00;
    ACSR=0x80;
    GIMSK|=(1<<TOIE0);
    TIMSK=0x00;
    TCCR0A=0x02;
    TCCR0B=0x05;
    OCR0A=0x03;
    OCR0B=0x0C;
    rab=0b00010000;
    asm("sei");
    while(1)
    {
    }
}
ВОТ что получается. только вот светодиоды постоянно горят - не мигают!
0
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 21:34  [ТС] 9
Цитата Сообщение от paskal Посмотреть сообщение
Для начала надо вопрос правильно сформулировать. Какой таймер вам нужен то?

сможешь помочь?
0
Grey
Тутошний я
1781 / 933 / 169
Регистрация: 03.11.2009
Сообщений: 2,986
Записей в блоге: 1
24.11.2013, 22:37 10
C
1
2
GIMSK|=(1<<TOIE0);
TIMSK=0x00;
Это он включает прерывание а потом отключает?
0
SENDEJER
15 / 14 / 4
Регистрация: 22.05.2013
Сообщений: 501
24.11.2013, 23:51  [ТС] 11
без понятия ;-)
0
Grey
Тутошний я
1781 / 933 / 169
Регистрация: 03.11.2009
Сообщений: 2,986
Записей в блоге: 1
25.11.2013, 00:02 12
Цитата Сообщение от Grey Посмотреть сообщение
Это он включает прерывание а потом отключает?
Посмотрел даташит. В GIMSK второй бит только для чтения. В таймере не одно прерывание не включено.
Потому и не мигает.
0
Alex201
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 52
02.12.2014, 19:26 13
помогите начинающему. я в AVR Studio на GCC пишу. Обязательно ли значение в регистр OCR1A записывать в 16ричном формате? и обязательно ли записывать значение сначала в старший а потом младший, т.е. вот так:

C
1
2
OCR1AH=0x03;//записываем в регистр OCR1A 1000
OCR1AL=0xE8;
или можно просто

OCR1A=0x03E8;
Еще вопрос, если я регулярно меняю значение OCR1A (400 раз в секунду), данные для этого регистра приходят от другого МК. Дак вот, когда я меняю значение регистра OCR1A , прерывания по таймеру запрещаю, но на сколько я понял флаг все равно может выставиться (при совпадении значения этого регистра со значением таймера). Возможно ли просто стереть этот флаг чтоб не сработало прерывание?
вот как то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
ISR(INT0_vect)
{ 
TCNT1H=0x00;    
TCNT1L=0x00;
 
OCR1AH=data_r[0];   
OCR1AL=data_r[1];
 
/TIFR&=~(1<<OCF1A); 
 
TIMSK1=(1<<OCIE1A); 
}
0
Voland_
1734 / 1068 / 106
Регистрация: 04.01.2010
Сообщений: 3,651
03.12.2014, 10:38 14
Цитата Сообщение от Alex201 Посмотреть сообщение
или можно просто
И первый и второй вариант - правильные. Загляните в ДШ, в частности, есть описание правил работы с 16-битными регистрами. Компилятор, в случае работы с ними, как с 16-битными, просто выполняет эти правила.
Цитата Сообщение от Alex201 Посмотреть сообщение
Возможно ли просто стереть этот флаг чтоб не сработало прерывание?
Все правильно, так и нужно. Только перед выставлением значения в OCR1A нужно запрещать соответствующее прерывание и разрешать его после сброса флага.
1
Alex201
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 52
03.12.2014, 14:08 15
Пасиба, я правильно понял из даташита, что флаг стирается записью 1 в нужный бит?
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
03.12.2014, 14:57 16
Цитата Сообщение от Alex201 Посмотреть сообщение
что флаг стирается записью 1 в нужный бит?
Так точно.
0
Alex201
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 52
03.12.2014, 18:12 17
еще раз пасиба
0
03.12.2014, 18:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2014, 18:12

ATtiny 2313. Контроль освещения
Требуется написать программу на Assembler или на С++ Программа не для рабочего микропроцессора,...

Attiny 2313 простая задачка с индикацией
Задача состоит вот в чем: На основе микроконтроллера Atmel Atiny2313 необходимо разработать...

Пояснение команд в AVR AtTiny 2313
/* * AVRGCC2.c * * Created: 29.09.2013 15:58:15 * Author: SENDEJER */ #define F_CPU...


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

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

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