Страница 1 из 1

Параллельная работа 2-х каналов счётчика ATmega48

Добавлено: Чт дек 05, 2013 15:36:32
nephist
Доброго времени суток, уважаемые!
Вот продолжаю ломать голову над контроллерами, и столкнулся с "ситуацией", так сказать.
При работе у меня используются оба канала OCIE0A и OCIE0B. Для каждого своё прерывание написано, но когда доходит до симуляции, работает только OCIE0B, а OCIE0A молчит в тряпочку.
Комментирую канал 'B', всё становится хорошо, 'A' работает, как надо. В чём затык, как думаете? Заранее благодарю!




#define F_CPU 16000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>
#include <util/delay.h>

int a = 0;


//----- Прерывания


ISR (TIMER1_COMPA_vect)
{
TCNT1 = 0;
if (a==0)
{
a = 1;
PORTB|=(1<<1);
}
else
{
PORTB&=~(1<<1);
a =0;
}
OCR0A = 0x77;
OCR0B = 0xFA;
OCR2A = 0x29;
TIMSK0 = (1<<OCIE0A)|(1<<OCIE0B);
TIMSK2 = (1<<OCIE2A);
PORTB|=(1<<2);
PORTB|=(1<<3);
PORTB|=(1<<4);
}

ISR (TIMER2_COMPA_vect)
{
PORTB&=~(1<<4);
TIMSK2 = (0<<OCIE2A);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}

ISR (TIMER0_COMPB_vect)
{
PORTB&=~(1<<3);
TIMSK0 = (0<<OCIE0B);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}

ISR (TIMER0_COMPA_vect)
{
PORTB&=~(1<<2);
TIMSK0 = (0<<OCIE0A);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}

int main(void)
{


DDRB = 0xFF;
PORTB = 0;


TIMSK1 = (1<<OCIE1A);
OCR1A = 0xFFF0;
TCCR1B = (1<<CS10);


TCCR0B = (1<<CS00);
TCCR2B = (1<<CS20) ;

sei();


while(1)
{

}
}

Re: Параллельная работа 2-х каналов счётчика ATmega48

Добавлено: Чт дек 05, 2013 16:21:28
ibiza11
у вас в обработчике прерывания (что А, что В) выключаются оба прерывания этой строчкой

Код: Выделить всё

TIMSK0 = (0<<OCIE0B); // Это равносильно записи : TIMSK0 = 0  
а надо вот так:

Код: Выделить всё

TIMSK0 &= ~(1<<OCIE0B); 

Re: Параллельная работа 2-х каналов счётчика ATmega48

Добавлено: Чт дек 05, 2013 19:42:29
nephist
Ой благодарю, прямо даже не знаю как, спасибо огромное! Надеюсь заработает! Нажал все плюсы, которые нашёл))




Заработало, шикаааарно))))Ещё раз благодарю)

Re: Параллельная работа 2-х каналов счётчика ATmega48

Добавлено: Пт дек 06, 2013 08:55:46
ibiza11
Рад, что помог!) Удачи!