Помогите адаптировать код

Обсуждаем контроллеры компании Atmel.
Ответить
zzontt
Открыл глаза
Сообщения: 54
Зарегистрирован: Чт дек 13, 2012 19:31:00
Откуда: Санкт-Петербург
Контактная информация:

Помогите адаптировать код

Сообщение zzontt »

Добрый день. Я только только начинаю изучать микроконтроллеры и естественно делаю это по различным примерам. В данный момент пытаюсь освоить ШИМ на Atmega16. Нашел пример кода для компилятора IAR, пытаясь скомпилировать в CVAVR смог устранить все ошибки компиляции кроме одной. Вот собственно и вопрос помогите устранить ошибку. Код ниже и ошибка тоже ниже.

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

#include <mega16.h>
unsigned char pwm = 1;
unsigned char inc = 1; // inc = 0 - уменьшать, inc = 1 - увеличивать яркость
void timer2_init()
{
  OCR2 = 1; //ШИМ почти выключена
  // Быстрая ШИМ, переключать OC2 (PD7), увеличение таймера каждые 64 такта
  TCCR2 |= (1 << WGM20) | ( 1 << WGM21) | (1 << COM21) | (1 << CS22);
}
void timer1_init()
{
  OCR1A = 43200; //Прерывание 32 раза в секунду
  TCCR1A = 0;
  // СТС режим, увеличение таймера каждые 8 тактов
  TCCR1B |= (1 << WGM12) | (1 << CS11);
  // Прерывание по совпадению А таймера1
  TIMSK |= (1 << OCIE1A);
  SREG |= (1 << 7); //Разрешить прерывания
}
void io_init() //Инициализация портов ввода-вывода
{
  DDRD |= 1 << 7;
  PORTD = 0;
}
void main ()
{
  timer2_init();
  timer1_init();
  io_init();
  while(1)
  {
  }
}
// Заставляет лампу плавно загораться и гаснуть раз в 8 секунд 
 interrupt [TIMER1_COMPA_vect] void PWM_change(void)
{
  if (inc == 1) 
  {
    if (pwm < 254)
    {
      pwm++;  // Увеличиваем яркость лампы, пока не достигнем максимума
      OCR2 = pwm;                 
    }
    else
    {
      inc = 0;
    }
  }
  else
  {
    if (pwm > 1)
    {
      pwm--;  // Уменьшаем яркость лампы, пока не остигнем минимума
      OCR2 = pwm;
    }
    else
    {
      inc = 1;
    }
  }
}

Ошибку мне компилятор выдает следующую:
Error: C:\Users\Sahechka\Desktop\1\1.c(70): undefined symbol 'TIMER1_COMPA_vect'
interrupt [TIMER1_COMPA_vect] void PWM_change(void) // в этой строке проявляется ошибка

Очень жду совета =)
Последний раз редактировалось zzontt Чт дек 13, 2012 20:21:00, всего редактировалось 1 раз.
Не бейте за глупости, я только учусь)
Реклама
Аватара пользователя
vem566
Друг Кота
Сообщения: 4736
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Помогите адаптировать код

Сообщение vem566 »

Компилятор внятно объясняет
zzontt писал(а): undefined symbol 'TIMER1_COMPA_vect'
неизвестный символ(переменная). Поищи, где и как описано это системное прерывание.
Реклама
zzontt
Открыл глаза
Сообщения: 54
Зарегистрирован: Чт дек 13, 2012 19:31:00
Откуда: Санкт-Петербург
Контактная информация:

Re: Помогите адаптировать код

Сообщение zzontt »

vem566 писал(а):Компилятор внятно объясняет
zzontt писал(а): undefined symbol 'TIMER1_COMPA_vect'
неизвестный символ(переменная). Поищи, где и как описано это системное прерывание.
это я понял, просто разобраться не получилось с эти прерыванием (не могу понять где искать), вы не сможете подсказать?
Нашел в даташите его описание: там указанно "TIMER1 COMPA", собственно заменил в коде на эти данные из даташита, однако все равно компиляция не проходит и выдается ошибка:
Error: C:\Users\Sahechka\Desktop\1\1.c(70): undefined symbol 'TIMER1'
По суть воз и ныне там.
Не бейте за глупости, я только учусь)
Аватара пользователя
vem566
Друг Кота
Сообщения: 4736
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Помогите адаптировать код

Сообщение vem566 »

Скорее всего в файле "mega16.h". Поступи проще - поищи все файлы вложений (include) со строкой внутри.
При таких залипухах я особо не заморачиваюсь. Просканировал всю папку и быстро определяется, где описана переменная.
Чаще всего ошибка в написании(пропущена или не та буква в коде написана). Обычная орфография при написании.
Реклама
Эиком - электронные компоненты и радиодетали
zzontt
Открыл глаза
Сообщения: 54
Зарегистрирован: Чт дек 13, 2012 19:31:00
Откуда: Санкт-Петербург
Контактная информация:

Re: Помогите адаптировать код

Сообщение zzontt »

vem566 писал(а):Скорее всего в файле "mega16.h". Поступи проще - поищи все файлы вложений (include) со строкой внутри.
При таких залипухах я особо не заморачиваюсь. Просканировал всю папку и быстро определяется, где описана переменная.
Чаще всего ошибка в написании(пропущена или не та буква в коде написана). Обычная орфография при написании.
я правильно понимаю, по скольку у меня только один фаил include "mega16.h", мне надо найти его в папке CVAVR и в нем найти то как записанна эта переменная?
Не бейте за глупости, я только учусь)
Реклама
Аватара пользователя
vem566
Друг Кота
Сообщения: 4736
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Помогите адаптировать код

Сообщение vem566 »

Именно так.
Реклама
zzontt
Открыл глаза
Сообщения: 54
Зарегистрирован: Чт дек 13, 2012 19:31:00
Откуда: Санкт-Петербург
Контактная информация:

Re: Помогите адаптировать код

Сообщение zzontt »

vem566 писал(а):Скорее всего в файле "mega16.h". Поступи проще - поищи все файлы вложений (include) со строкой внутри.
При таких залипухах я особо не заморачиваюсь. Просканировал всю папку и быстро определяется, где описана переменная.
Чаще всего ошибка в написании(пропущена или не та буква в коде написана). Обычная орфография при написании.
Спасибо большое, действительно все дело в написании в инклюде это прерывание описано не много отлично от даташитного "TIM1_COMPA" вместо указанного в даташите "TIMER1 COMPA".
Тему можно закрывать или удалять.
Не бейте за глупости, я только учусь)
zzontt
Открыл глаза
Сообщения: 54
Зарегистрирован: Чт дек 13, 2012 19:31:00
Откуда: Санкт-Петербург
Контактная информация:

Re: Помогите адаптировать код

Сообщение zzontt »

vem566 писал(а):Именно так.
Спасибо большое, действительно все дело в написании в инклюде это прерывание описано не много отлично от даташитного "TIM1_COMPA" вместо указанного в даташите "TIMER1 COMPA".
Тему можно закрывать или удалять.
Не бейте за глупости, я только учусь)
Ответить

Вернуться в «AVR»