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

Проблема С Прерываниями На 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
Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

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

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

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

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

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

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

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

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

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

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

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

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

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 пользователей онлайн

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

    • Всем привет. Как-то видел на ютубе ролик, где показывали чип, вроде 8-ми выводной, трансивер со встроенным модулятором/демодулятором и минимумом обвеса. Последние пару дней искал и не нашёл, может кто знает ФИО этой микросхемы? Суть такова. Ещё в начале 90-х делал проводное дистанционное управление на микросхемах LM567. Работает безотказно, помехоустойчивость высокая, ни одного сбоя за всё Время эксплуатации. Упрощенная схема верхняя, в приложенном файле. Теперь хочу перевести на беспроводную связь, как на нижнем рисунке. В общем, нужен совет по выбору, микросхемы с минимумом обвеса или готового модуля, чтобы в режиме передачи он/а имел/а вход для подачи сигнала, а при приёме выход НЧ. Пояснение к схеме. Не стал писать порядковые номера элементов. Там, где написано С1, там везде конденсатор одного номинала, как и резисторы. Т.е. где указан R1 там тоже везде стоит один номинал. Если кто не в теме, то LM567 - микросхема тонального декодера со встроенным генератором. Нажимаем в передатчике DA1 одну из кнопок и на выходе имеем некоторую частоту, определяемую элементами задающей RC цепи. Приёмники DA2 - DA4 тоже генерируют частоту и тоже определяемую этими же по схеме элементами. Срабатывает та микросхема, на входе которой частота совпадает с выходной частотой передатчика. В принципе, в верхней схеме хватило бы и два ключа, т.к. нажатие сразу двух кнопок включает резисторы R1 и R2 в параллель и формируется своя частота. Т.е. в приёмнике DA4 нужно ставить номинал резистора, равный параллельному включению двух резисторов R1 и R2. Но тема не об этом. Я понимаю, что сейчас есть цифра и можно передавать коды, но, что имею, то имею и хочу запустить такую схему, что на приложенном рисунке внизу. Вопрос стоит о более простом решении ВЧ части - трансивера. Надеюсь, что поможете решить поставленную задачу. Спасибо.          
    • Это же балалайка-потаскушка  Там все просто,по даташитам микросхем можно сориентироваться. @zezar ,а в чем дефект то?
    • какой размер колец? или проще, можно ссылочку чтобы посмотреть
    • @Romanchek82 в данной ситуации скорее "подложена под ножку стола у дядюшки Ляо")
    • КИТ на Озоне, 2 канала за 500р. РФ. Я сам с конструктора начинал, там и опыт паять получите.  не надо с платы, схемы начинать, блок питания сначала соберёте, КИТ распаяйте, в корпус всё оформите. Одно до ума изделие доведите. Там и поймёте, куда дальше двигаться. А по схеме, ЕЩЁ раз, они есть на любое ОУ в даташит. По "ушникам", пятиножки в бОльшем случае - достаточно (по ссылке) прежде, чем Сухову, Нечаеву,.. в ж. "Радио" писать, готовился, после школы в библиотеку, вечерами за паяльник... пока обратная связь приходила (письма), уже многое исправил, да, не методом тыка, а через понимание физических процессов.  Быстро это только ЕГЭ, описательный, творческий процесс отсутвует (мозгами шевелить, статьи анализировать, углубляться и видеть перспективу).  Паять совет не нужен, ручками, ручками, готовый кит и в корпус.
    • Привет!  Мне не известно, есть ли другие варианты формата прошивки. Почитайте ветку , может кто то и выкладывал.
×
×
  • Создать...