Помогите поправить прошивку под attiny45 с attiny2313

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

Помогите поправить, есть прошивка и там прерывания под аттини2313 настроенны, как выставить таймер под аттини45 я не знаю, помогите пожалуйста.

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

PORTA=0x01;
DDRA=0x00;


UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=25;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 0.977 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05; //Clock Value
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0xE4; //прерывание каждую 
OCR1AL=0xFC; //минуту
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

 
delay_ms (10);
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x40;
MCUCR=0x02;
EIFR=0x40;
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение pyzhman »

В отладчике подгоните нужные параметры.
Docendo discimus
Реклама
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

если бы я умел я бы подогнал и не просил мне помоч. :(
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение Мастер Ломастер »

а тот факт, что у 45-й тиньки ножек в 5 раз меньше - это ничего, на прошивке не скажется?
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Эиком - электронные компоненты и радиодетали
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

думаю не должно, так как там половина ног не используется и юарта нет.
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение Engineer_Keen »

Во-первых в 45-й только 8-битные таймеры, значит нужно делить на 256. А в оригинале уже стоит делитель 1024, значит в сумме делитель получается - 262144, а у 45 максимум - 16384. Значит нужно еще и значение OCR уменьшить в 16 раз.
Что касается включения прерывания, то оно так и останется - TIMSK=0x40, потому что этот бит совпадает у обоих МК...
У 45-й нет порта А, есть только B. Нет уарта, а в прошивке он зачем-то настраивается.
Глобального разрешения прерываний нету, смысл включать прерывание по совпадению? Собственно подпрограммы обработки прерывания тоже нет. Вообще ничего нет. Программа ничего не делает такого, чтобы можно было заметить вне контроллера. Или это только кусок кода?
Реклама
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

это кусок кода конфигурация прерываний и портов в конце.
вот функция самого таймера.

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

interrupt [TIM1_COMPA] void timer1_compa_isr(void) //????????????? ???????
{

    time_mm++;
    if (time_mm==60) {
    time_hh++;
    time_mm=0;
    }
 } 
подскажите какие значения нужно выставить чтобы было правильно.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение phanis »

Настройки на Атини 2313 были здесь

OCR1AH=0xE4; //прерывание каждую
OCR1AL=0xFC; //минуту

У 45

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

OCR1A= 0xFC;//подгонять этим
//объявляем еще одну глобальну переменную time_x

unsigned char time_x;

interrupt [TIM1_COMPA] void timer1_compa_isr(void) //????????????? ???????
             {
              time_x++;
              if( time_x >= 0xE4)   //и этим
                 {
                  time_mm++;
                  time_x = 0;

                  if (time_mm==60) 
                      {
                        time_hh++;
                        time_mm=0;
                       }
                  } 
              }
Что то вроде этого
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

как именно подгонять не подскажите? по даташиту глядеть или как ?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение pyzhman »

Естественно по шиту. Смотреть соответствие и что за что отвечает.
Docendo discimus
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение pyzhman »

Обращаем внимание на то, что у 45-ой регистр OCR1A восьмибитный, а у 2313 - 16-тибитный. Так что просто переписыванием не решить. Надо пересчитать прескалер.
Docendo discimus
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

есть какие то доки по этому почитать как это сделать? я в программировании не дуб дубом просто хочу эту прошивку засунуть в более меньший размер потому что не вижу смысла для 2313 её использовать там ноги лишние абсолютно не нужные.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение pyzhman »

Так смотрите даташит и по логике программы переделывайте.
Docendo discimus
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

легко сказать смотрите, если бы я понимал что смотреть и как что менять, яж говорю я тупой :( если бы кто показал хоть раз что именно по шиту глядеть и что менять и как.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение pyzhman »

В тини2313 по таймеру1 организовано прерывание, используя регистр сравнения. На определенной частоте тактирования. Такое же прерывание нужно организовать на тини45. Вот отсюда и танцуем: частота тактирования проца, частота тактирования таймера, нужное время срабатывания, нужная обработка прерывания.
Docendo discimus
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение phanis »

Пример для 1 МГц

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

unsigned char time_sec;//объявляем еще одну глобальную переменную time_sec  секунды

void main(void)
{
TIMSK = 0x40;	
TCCR1 = 0x0A;	
TCNT1 = 0x0F;

#asm("sei"); // Разрешение глобальных прерываний
}
// прерывание раз в секунду
interrupt [TIM1_COMPA] void timer1_compa_isr(void) //????????????? ???????
             {
             TCNT1 = 0x0F; // скорость
              time_x++;
              if( time_sec > 59)   // можно еще и здесь
                 {
                  time_mm++;
                  time_sec = 0;

                  if (time_mm==60)
                      {
                        time_hh++;
                        time_mm=0;
                       }
                  }
              }
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

спасибо большое!!! подскажите а на 8мгц какие значения будут? чтобы прерывание было каждую минуту. спс.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение phanis »

На атини45 при тактовой 8 МГц получить прерывание в 1 минуту не получится. Кстати пример был с запрограммированным делителем на 8.
Вот без делителя на 8 МГЦ прерывание 0,5 сек

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

unsigned char time_sec;//объявляем еще одну глобальную переменную time_sec  секунды

void main(void)
{
TIMSK = 0x40;   
TCCR1 = 0x0F;   
TCNT1 = 0x0F;

#asm("sei"); // Разрешение глобальных прерываний
}
// прерывание раз в пол секунды
interrupt [TIM1_COMPA] void timer1_compa_isr(void) //????????????? ???????
             {
             TCNT1 = 0x0F; // скорость
              time_x++;
              if( time_sec > 119)   // можно еще и здесь
                 {
                  time_mm++;
                  time_sec = 0;

                  if (time_mm==60)
                      {
                        time_hh++;
                        time_mm=0;
                       }
                  }
              }
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение kotriks »

спасибо люди добрые!
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Помогите поправить прошивку под attiny45 с attiny2313

Сообщение phanis »

И вот еще вариант
на 8 МГЦ прерывание 0,5 сек

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

unsigned char time_sec;//объявляем еще одну глобальную переменную time_sec  секунды

void main(void)
{
TIMSK = 0x40;   
TCCR1 = 0x8F;   
OCR1A = 0xF4;// настройка скорости
OCR1C = OCR1A;

#asm("sei"); // Разрешение глобальных прерываний
}
// прерывание раз в пол секунды
interrupt [TIM1_COMPA] void timer1_compa_isr(void) //????????????? ???????
             {
              time_x++;
              if( time_sec > 119)   // можно еще и здесь
                 {
                  time_mm++;
                  time_sec = 0;

                  if (time_mm==60)
                      {
                        time_hh++;
                        time_mm=0;
                       }
                  }
              }
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»