Четверг, 28.03.2024, 18:25
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » ATtiny2313 - помогите настроить таймер, перывания (Нужно прерывание, подскажите как его сделать)
ATtiny2313 - помогите настроить таймер, перывания
UpgraderДата: Среда, 02.06.2010, 00:07 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 1
Статус: Offline
Привет всем!
Помогите пожалуйста.
Мне на ATtiny2313 (частота 8 МГц от внутреннего ген.) нужно настроить прерывание, вызывающееся с частотой приблизительно 1000 - 500 Гц. Как это реализовать? Все уже перепробовал, замучился просто...

С учетом того что на первом таймере висит аппаратный ШИМ, если можно так выразится. Не знаю, помешает ли он использовать нулевой таймер.

Текст программы на текущем этапе, если нужен:

 
HiSERДата: Среда, 02.06.2010, 04:27 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
PWM у тебя не на первом таймере, а на нулевом!
первый таймер настраиваешь как, например:
CTC top=OCR1A с частотой 1MHz

В OCR1A заносишь 1000000/1000=1000 (0x03E8)
OCR1AH=3;
OCR1AL=0xE8;

Прерывание TIM1_COMPA,TIM1_OVF и TIM_CAPT будет срабатывать где-то 1000Гц

Сообщение отредактировал HiSER - Среда, 02.06.2010, 04:28
 
UpgraderДата: Среда, 02.06.2010, 14:59 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 1
Статус: Offline
Но оно никак не работает (( Прерывания не разу не срабатывает.
Проверяю в Proteus.
Code

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=0x03E8;
OCR1AH=3;
OCR1AL=0xE8;
OCR1BH=0x00;
OCR1BL=0x00;

Прерывания:

Code

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{  
   st++;
   PIND.6=1;
}

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
st++;
PIND.6=1;
}

Добавлено (02.06.2010, 14:59)
---------------------------------------------
Посоветовали сделать вот так:

Code
TCCR1A=0x40;
TCCR1B=0x0A;
OCR1A=1000;
TIMSK=0x40;

Заработало!
 
HiSERДата: Четверг, 03.06.2010, 03:35 | Сообщение # 4
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
Ерунду насоветовали!!!
TCCR1A=0x40; - здесь будет будет меандр на PORTB.3 с половинной частотой

Если интересно вот:
tiny2313.rar в симуляторе работает.

 
UpgraderДата: Четверг, 03.06.2010, 15:46 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 1
Статус: Offline
Спасибо!!! smile
А нет возможности сделать еще одно прерывание используя нулевой таймер, который для ШИМ уже используется (текст программы в первом сообещнии)?
 
HiSERДата: Пятница, 04.06.2010, 04:05 | Сообщение # 6
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
Если честно вопроса не понял...
 
Форум » Микроконтроллеры » Вопросы по МК » ATtiny2313 - помогите настроить таймер, перывания (Нужно прерывание, подскажите как его сделать)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz