Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [avr] Проблемка с ATTiny2313


Автор: AndreyKharkov 6.12.2010, 17:43
Народ проблема в следующем:
Использую проц Tiny2313 
 на порт B повесил семисигментный индикатор на пять символов а на D делаю динамику по совпадению короткого таймера.
Как только включаю прерывание INT 0 или INT1 динамика гаснет (впечатление что проц заходит в прерывание и не может выйти)
Прерывание по падающему фронту.
 Может кто сталкивался с пробелмой прерываний в данной процессоре? подскажите кто чего может!

Программа такая
Конфигурация
Код

//-------------------------------------------------------------------------
void INITIAL_CPU(void)
{
// init ports
DDRD=0xFF;                  // output/input 
!!!!!!пробовал и int-ы конфигурировать как входы
//DDRD=0xFF;                // output/input
DDRB=0xFF;                  // output
// init Timers              // Fuse xtal - internal 1ЬПс CTC mode 2kGc
TCCR0A=(1<<WGM01);          // 
TCCR0B=(1<<CS01);           // div 8
OCR0A=0x3e;                 // set count time      
TIMSK=(1<<OCIE0A);          // set sourse of interrupt
//
//init ext interrupt INT1 on falling
//MCUCR=(1<<ISC11);           // 
//GIMSK=0;
// задание начальных значений прееменным и регистрам модулей
TCNT0=0;                    //
}
//-------------------------------------------------------------

динамика
Код

//--------------------------------------------------------------------------------------------
#pragma vector = INT1_vect
__interrupt void OnSchet(void)
{
    unsigned char sreg=SREG;
    EIFR=(1<<INTF1)|(1<<INTF0);
    if(Fl_Pause==0xFF)  {FL_chet=0;}
    else                {FL_chet=0xFF;}
    SREG=sreg;
}
//--------------------------------------------------------------------------------------------
#pragma vector = TIMER0_COMPA_vect
__interrupt void OnT0(void)
{
  unsigned char sreg=SREG;

//  PORTD=0x73;  
  PORTD=0x7F;  
  pointer_ind++;
  if(pointer_ind>=5)  {pointer_ind=0;}
  
  PORTB=IND[pointer_ind];
 
  if(pointer_ind==0)  {PORTD=0x72;}
  if(pointer_ind==1)  {PORTD=0x71;}
  if(pointer_ind==2)  {PORTD=0x63;}
  if(pointer_ind==3)  {PORTD=0x53;}
  if(pointer_ind==4)  {PORTD=0x33;}
/* 
  if(pointer_ind==0)  {PORTD=0x7e;}
  if(pointer_ind==1)  {PORTD=0x7d;}
  if(pointer_ind==2)  {PORTD=0x6F;}
  if(pointer_ind==3)  {PORTD=0x5F;}
  if(pointer_ind==4)  {PORTD=0x3F;}
*/
  Fl_count=0xFF;
  SREG=sreg;
}


В жизне не работал с такими маленькими процами мож я чего не знаю! просвятите!

Добавлено @ 17:46
и еще  в рогргамме в последней строчке запрещено прерівание  - оно разрешается в теле 



M
UniBomb
Не забываем пользоваться кнопкой код

Автор: UniBomb 7.12.2010, 00:47
1. Зачем в кажом прерывании ты используешь эти две строки:

Код

    unsigned char sreg=SREG;
//...
    SREG=sreg;

?

2. Какой смысл ты вкладываешь в строку " EIFR=(1<<INTF1)|(1<<INTF0);"?

Автор: Vezd 11.7.2014, 15:46
 В МК ATtiny2313 частота синхронизации ввода-вывода clkI/O равняется частоте встроенного RC-генератора (тактовой частоте) или отличается от нее? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)