Перейти к содержанию

Ошибка В Pwm В Атмега16


-=gga=-

Рекомендуемые сообщения

Я пишу код для шима, на атмеге 16, но мне выдаёт ошибку :( Вот код, пишу на С в CodeVisionAVR C Compiler

#include <mega16.h>
#include <m8_128.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 << PD7);
 PORTD = 0;
}

void main ()
{
 timer2_init();
 timer1_init();
 io_init();
 while(1)
 {
 }
}

// Заставляет лампу плавно загораться и гаснуть раз в 8 секунд
#pragma vector = TIMER1_COMPA_vect  // **************************ошыбку выдаёт вот тут, пишет invilid #pragma directive***********************************************************************************************
__interrupt void PWM_change()
{
 if (inc == 1) 
 {
if (pwm < 254)
{
  pwm++;  // Увеличиваем яркость лампы, пока не достигнем максимума
  OCR2 = pwm;
}
else
{
  inc = 0;
}
 }
 else
 {
if (pwm > 1)
{
  pwm--;  // Уменьшаем яркость лампы, пока не остигнем минимума
  OCR2 = pwm;
}
else
{
  inc = 1;
}
 }
}

Как можно исправить ошибку ?

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я же в самом коде отметил ошибку :) Ну ладно, вынесу на ружу6

// Заставляет лампу плавно загораться и гаснуть раз в 8 секунд

#pragma vector = TIMER1_COMPA_vect // **************************ошыбку выдаёт вот тут, пишет invilid #pragma directive***

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Эта строка вообше не имеет смысла :wacko:

интересно зачем ты ее написал...

pragma это не тип.. это препроцессорная директива которая

отключает или включает какие то действия компилятора

например #pragma warn- если хотите отключить вонинги

и #pragma warn+ если хотите включить вонинги......

1 километр = 1024 метр

Ссылка на комментарий
Поделиться на другие сайты

Её писал не я, этот код я взял вот отсюда http://www.pcports.ru/articles/avr3.php но там компилятор другой по этому я заменил строчку :

#include "iom16.h"

на

#include <mega16.h>

#include <m8_128.h> //хидер для битов

Если убрать эту строчку, то опять выдаёт ошибку, но уже на следующей строчке, если убрать и следующую, то ошибка будет на следующей, и так, до конца программы.

Как это можно исправить ?

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Да там просто компилятор неможет понять что за вектор эта ваша обработка ШИМ... Директива "прагма" в вашем случае обьясняет компилятору что нужно подключить к следующей функции вектор прерывания.. Чтобы это исправить почитайте как это делается в вашем комиляторе...

Изменено пользователем wowa
Ссылка на комментарий
Поделиться на другие сайты

Дело в том, что мне нужно, именно на CodeVisionAVR. Мне не нужно само устройство, мне нужен принцып работы, для самообучения

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

это запрет\разрешение прерываний. смотри как указать обработчик прерывания... вопщям выбрал си.. вот и грызи ее ))))

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

Если я не ошибаюсь то #define это оператор замены, то что с лева, он заменяет на то что справа

УВот я сделал вот так #define vector TIMER1_COMPA_vect но теперь мне выдаёт ошибку на следующей строчке missing'('

Ну в общем, этот код вроде безнадёжен, или я безнадёжен :)

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Да нет в вашем коде TIMER1_COMPA_vect... Я смотрел в хедер от CodeVisionAVR и там написано TIM1_COMPA !!!

Вобщем надо начать с примеров... Там есть примеры в которых настраиваются вектора.. Даже я разобрался... Только небуду подсказывать :) Неспортивно :)

Изменено пользователем wowa
Ссылка на комментарий
Поделиться на другие сайты

Привет,решил воспользоваться темой чтоб не создавать новую)

У меня возникла проблемма из за нехватки знаний я не могу забацать плавный ШИМ сигнал.

Из книг я всё не как не могу понять

Ребят если не сложно пожалуйста помогите кто нить сделать код чтоб светодиод плавно загорался и затухал каждые 30 сек.На базе ATmega8/язык Си"

И если я его увижу то наконец пойму как это делается и буду отталкиваться от него для других задачь.

Огромное спаисбо

Ссылка на комментарий
Поделиться на другие сайты

Ребят если не сложно пожалуйста помогите кто нить сделать код чтоб светодиод плавно загорался и затухал каждые 30 сек.На базе ATmega8/язык Си"

Могу дать кучу примеров, но они все не для Атмеги.

Попробуем на словах.

Для простоты возьмем 8-битный таймер.

С его помощью можно реализовать примерно 250 градаций яркости.

Делим 30 на 250, получаем 0.12 секунды.

Это время, через которое мы должны увеличить/уменьшить значение в таймере ШИМ.

Для формирования этого интервала можно взять еще один таймер и в его п/п прерывания изменять значение для ШИМ

Какие регистры прописывать в таймере, отвечающем за ШИМ смотри в даташите.

Я с АТ уже больше 4 лет не работаю, поэтому подробностей не помню

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Ребят если не сложно пожалуйста помогите кто нить сделать код чтоб светодиод плавно загорался и затухал каждые 30 сек.На базе ATmega8/язык Си"

Могу дать кучу примеров, но они все не для Атмеги.

Попробуем на словах.

Для простоты возьмем 8-битный таймер.

С его помощью можно реализовать примерно 250 градаций яркости.

Делим 30 на 250, получаем 0.12 секунды.

Это время, через которое мы должны увеличить/уменьшить значение в таймере ШИМ.

Для формирования этого интервала можно взять еще один таймер и в его п/п прерывания изменять значение для ШИМ

Какие регистры прописывать в таймере, отвечающем за ШИМ смотри в даташите.

Я с АТ уже больше 4 лет не работаю, поэтому подробностей не помню

У меня сообственно и проблема вся в том что я не знаю как написать код И из книг понять не могу(

Но всёравно спасибо

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...