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

Проблема С Прерываниями На Atmega8


ARV.net

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

Всем привет. Пишу программу ампер-вольтметра на ATmega8, в программе есть два прирывания, одно по оканчанию преобразований АЦП, второе по прерыванию таймерасчетчика 2 которое выводит данные на семисегментную индикацию на сдвиговых регистрах, это всё работает. Проблема в том что кроме прерываний не чего больше в прграмме не выполняется, т.е. в бесконечном цикле главной функции будет ещё ряд задач по упровлению, а цикл выполняется только один раз после запуска. Если запретить прерывания то всё работает. Я ещё только учусь программированию на МК и не как не могу догнать в чём дело. Подскажите, зарание спасибо.

Проект в CodeVision 2.05.0 + Proteus 7.10 Project_AVR (7 segment).rar

Скрины из протеуса на всякий случай scrin.rar

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

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

Использовать delay в обработчике прерывания, мягко говоря, не совсем правильно. Думаю поэтому ничего кроме прерываний не выполняется, потому как delay может прервать только прерывание, и так по кругу..

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

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

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

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

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

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

Использовать delay в обработчике прерывания, мягко говоря, не совсем правильно.

А что посоветуешь?

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

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

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

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

Вот не смог понять, если задержку между переключениями сегментов делает таймер, зачем там в обработчике ещё дополнительные программные задержки ? Что они делают ?

Использование задержки в обработчике АЦП тоже для меня осталось загадкой. Зачем это нужно ?

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

Вот не смог понять, если задержку между переключениями сегментов делает таймер, зачем там в обработчике ещё дополнительные программные задержки ? Что они делают ?

Я то же не знаю зачем они там но без них на индикацию выводится что попало

post-165242-0-56708000-1352985484_thumb.png

первый сегмент вообще не отображается и второй мерцает с большой переодичностью

Использование задержки в обработчике АЦП тоже для меня осталось загадкой. Зачем это нужно ?

А здесь, я гдето вычетал что задержка нужна для уменьшения погрешности АЦП, :unknw:

Да и их удаление проблемы не решает.

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

Попробуй сконфигурировать таймер чтоб он переполнялся раз в 5 мс(приблизительно) и убрать задержки из обработчика прерывания.

Для уменьшения погрешности АЦП нужно делать несколько замеров, а затем вычислять среднее арифметическое.

На какой частоте работает МК ?

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

Попробуй установить предделитель таймера на 256 (получится задержка около 8мс) и удали задержку из обработчика.

TCCR2 |= (1 << CS22)|(1 << CS21);	    // Предделитель на 256

Иван Сусанин - первый полупроводник

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

1. поменял предделитель, убрал задержки на индикацию выводятся данные вообще не соответствующие действительности, запустил пошаговую отладку в переменную amper_out записывается то ток, то напряжение, в переменную volt_out показания тока. Цикл не выполняется

2. поменял предделитель, оставил задержки, всё отображается. Цикл не выполняется

:wall:

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

Задержку удалил из обработчика прерывания таймера, а в АЦП оставил ?

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

Тогда уже теплее. От задержки в переключении сегментов мы избавились. Теперь надо думать что делать с АЦП.

Иван Сусанин - первый полупроводник

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

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

Иван Сусанин - первый полупроводник

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

Нет, с делителем АЦП все нормально, он задает частоту АЦП 125кГц.

Самый простой способ, это отключить прерывание АЦП, и из его обработчика перенести всё в главный цикл.

Можно задействовать еще один таймер. И перенести в его обработчик то, что было в обработчике прерывания АЦП.

Правда непонятно почему не сработал вариант просто убрать задержку из обработчика АЦП...

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

Вычесление показаний тока и напряжения вынес в главный цикл, всё заработало без прерываний,

в цикл набросал небольшой код для проверки всё в норме

Это получается что МК слишком долго обрабатывал прерыание по АЦП?

Ну в общем спасибо, очень помог!

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

Не слишком долго обрабатывал, а вечно. Пока МК обрабатывает задержку в прерывании уже будет сгенерирована целая очередь прерываний в каждом из которых опять задерка...... (время за которое возникает прерывание у нас намного меньше чем длительность задержки).

Поэтому никогда нельзя использовать программные задержки в прерывании.

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

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

  • 9 лет спустя...
В 15.11.2012 в 17:45, TDSS сказал:

Сам делал нечто похожее

Я так понимаю это блок питания? Я вот тоже недавно сделал с автопереключением обмоток. Но т. к.  переключениями занимается Atmega8 я все никак не успокоюсь и думаю какие новые функции прикрутить в новой версии прошивки. Посмотрел в протеусе Ваш проект и это тоже натолкнуло на определенные мысли. Думаю нужно добавить настраиваемый уровень напряжения переключения обмоток. 

Экспереминтатор должен быть достаточно ленив, чтобы не копаться в мелочах!

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

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

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

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

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

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

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

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

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

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

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