Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сбой при включении
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Lexdaw
Прибор (mega8515) опрашивает по USART, производит вычисления,выдает управляющий сигнал.
При подаче питания иногда(1 из 3..5 раз) не вычисляет один из параметров(=0).Есть кнопка перехода в стартовый режим.
По ней всё работает - всегда.При переходе в стартовый режим производиться обнуление ОЗУ,полная иницилизация всех таймеров,Usart и тп(всё как и при включении).Даже завел этот переход на старт МК.Добиться устойчивого этого сбоя тоже не получается.
По Reset тоже всё работает.
Где туплю?
какая травка поможет словить этот глюк? sm.gif
AlexFTF
Цитата(Lexdaw @ Sep 29 2011, 15:04) *
При подаче питания иногда(1 из 3..5 раз) не вычисляет один из параметров(=0).......
По Reset тоже всё работает.


Не совсем понятно, так как при подаче питания происходит аппаратный сброс мк.. Проблема как мне видится в коде...
Палыч
Насколько я понял: неверное вычисление параметра получается из-за неверных принятых данных по USART. Следовательно - какая-то "беда" при первом опросе: получаете неверные данные. Кнопка перехода в стартовый режим - это "не честный" сброс: USART уже проинициализирован...
Вероятно, какая-то помеха проходит по линиям USART от момента включения устройства (подачи питания) до инициализации USART.
Lexdaw
Видимо не точно объяснил.До вычисления, по USART принимается куча данных и не один раз и правильно.
А вход в стартовый режим специально делал чтобы сбить - не выходит.
Сам в шоке.
Xenia
Цитата(Lexdaw @ Sep 29 2011, 12:35) *
Видимо не точно объяснил.До вычисления, по USART принимается куча данных и не один раз и правильно.
А вход в стартовый режим специально делал чтобы сбить - не выходит.
Сам в шоке.

Если у вас по ресету работает нормально, а сбоит только при подаче питания, то причина сбоя может быть в том, что напряжение питания нарастает слишком медленно, и МК пытается делать вычисления на напряжении питания, которое еще не достигло номинала. Поставьте нужный BODLEVEL в фузах, чтобы МК не просыпался при недостаточном напряжении. Или поставьте аппаратный супервизор.
Палыч
Цитата(Xenia @ Sep 29 2011, 12:43) *
Поставьте нужный BODLEVEL в фузах, чтобы МК не просыпался при недостаточном напряжении.
BODEN запрограммировать не забудьте.
AlexFTF
Цитата(Xenia @ Sep 29 2011, 15:43) *
причина сбоя может быть в том, что напряжение питания нарастает слишком медленно и МК пытается делать вычисления на напряжении питания, которое еще не достигло номинала.


Вряд ли, ведь в мк есть POR и если напряжение питания не достигнет определенного уровня, мк даже не запуститься.

ILYAUL
QUOTE (Xenia @ Sep 29 2011, 12:43) *
..... и МК пытается делать вычисления на напряжении питания, которое еще не достигло номинала.

Что-то не так. МК не начнёт вычисления, пока напряжение питания не достигнет минимально допустимого предела , при котором он работоспособен.
Значит он вычисления сделает правильно и reset по питанию в любом случае отработает , пока он не достигнет порогового значения за которым МК работает надёжно . Можно просто удлинить SUT.
Палыч
Цитата(NSTU @ Sep 29 2011, 13:05) *
в мк есть POR и если напряжение питания не достигнет определенного уровня, мк даже не запуститься.
Не факт, что после достижения Vpot и запуска МК напряжение питания не просядет вследствии запуска МК и увеличения потребления. Кроме того, типичное значение Vpot=1.4V, когда производитель гарантирует работоспособность МК при напряжении питания 2.7V.
ILYAUL
QUOTE (Палыч @ Sep 29 2011, 13:31) *
Не факт, что после достижения Vpot и запуска МК напряжение питания не просядет вследствии запуска МК и увеличения потребления. Кроме того, типичное значение Vpot=1.4V, когда производитель гарантирует работоспособность МК при напряжении питания 2.7V.

Но и мин. напряжения BOD 1.8V и ставить его на этот уровень смысла не имеет , если MK, при таком питании, не запускает генератор - стоит. Порог выше , не означает , что
QUOTE
напряжение питания не просядет вследствии запуска МК
и будет опять reset. Всё таки проще "затянуть" timeout reset
Lexdaw
Ещё раз все вычисления происходят через 3- 5 мин. инфа по USART читается.
Только что сделал эксперимент Вкл питние - Reset пинцетом - сбой
Не выключая питания - Reset - все нормально.
Питание нормальное.
Цепочка расчета до последнего действия верна(тем паче всё работает потом )
менял действия местами - эффект тот же.
Бьюсь неделю.Уже начинаю глупо ххихикать.
AlexFTF
Цитата(Lexdaw @ Sep 29 2011, 17:04) *
Ещё раз все вычисления происходят через 3- 5 мин. инфа по USART читается.
Только что сделал эксперимент Вкл питние - Reset пинцетом - сбой
Не выключая питания - Reset - все нормально.
Питание нормальное.
Цепочка расчета до последнего действия верна(тем паче всё работает потом )
менял действия местами - эффект тот же.
Бьюсь неделю.Уже начинаю глупо ххихикать.


Зачем резет пинцетом? Кнопки нет? Схему можно глянуть?

Lexdaw, если я правильно понял сбой возникает иногда и только после включения питания?
ILYAUL
QUOTE (Lexdaw @ Sep 29 2011, 14:04) *
Только что сделал эксперимент Вкл питние - Reset пинцетом - сбой

Это значит , что при вкл. питания reset удерживали пинцетом? Поясните
Палыч
1. Убедиться, что при неверных расчетах данные, принятые по USART - верны.
2. Внимательно просмотреть глобальные и статические переменные на предмет их начальной инициализации.
Lexdaw
Понимаю, что звучит как бред. Но я, честное слово, пишу не из психушки.
Итак.
1. Подаю питание на прибор, запускаю в работу(по кнопке).Дойдя до нужного места нет расчета параметра.
Делаю Reset (или по кнопке переход в начальное состояние),запускаю в работу - параметр расчитан.
2. Подаю питание на прибор, запускаю в работу(по кнопке).НЕ Доходя до нужного места
делаю Reset (или по кнопке переход в начальное состояние),запускаю в работу - нет расчета параметра.

Но при переходе на старт ,я очищаю ОЗУ,и РОН.По новой инициализирую счетчики и USART.
Использую прерывания по переполнению сч Т0, компаратор А сч Т1, и прерывания для USART.
Где я упускаю.
Палыч
Цитата(Lexdaw @ Sep 29 2011, 14:54) *
Где я упускаю.

Ну, очень похоже, что что-то не инициировано при старте программы. Попробуйте при неверных расчетах произвести расчет ещё раз не принимая новых данных. Если при повторном расчете всё пройдёт верно - что-то не проинициализировали/не дотёрли/не установили....
ILYAUL
А у Вас переход на старт и reset это одна и та же метка?
QUOTE
при переходе на старт ,я очищаю ОЗУ,и РОН.

Обычно это делается и по reset
Палыч
Очень похоже, что при расчетах используется некая переменная/флаг, котороя не инициируется при старте программы. При выполнении расчетов в эту переменную/флаг попадает "разумное" значение и остаётся в памяти при ресете, поэтому все последующие расчеты после первого расчета и последующего ресета проходят нормально. При выключении питания - память (ОЗУ) портится и первый расчет опять производится с ошибкой. Нестабильность неверных расчетов после включения питания объясняется "случайным" содержимым неинициированной ячейки, которое может восприниматься программой как "хорошее".
Lexdaw
Я это как бы понимаю,но глаз замылился.Все вроде чищу,ан нет.
Видать нужны капли покрепче.(Вот оно то самое где без 100 грамм никак)! sm.gif
Палыч
Цитата(Lexdaw @ Sep 29 2011, 16:08) *
Я это как бы понимаю,но глаз замылился.Все вроде чищу,ан нет.

Если программа - "не секретная", хорошо структурированная и откоментированная, то выложите проект - может быть кто свежим взглядом "баг" найдёт...
zhevak
Забудьте про 100 г. Вообще. Навсегда.
Алкоголь -- это не пищевой продукт, а слабо действующий яд, который при даже небольших дозах все равно разрушает организм хоть и минимально. Зачем это Вам надо? У Вас в жизни проблем нет? Приходится придумывать, изобретать?

Задавайте вопросы не тут на форуме, а самому себе. Разгадывать Ваши шарады наверно кому-то и будет интересно, но ядреные специалисты вряд ли будут вестись на Ваши "кроссворды", у них своих дел выше крыши. Они, конечно, помогут Вам, но при условии -- максимально предоставленная информация с Вашей стороны.А пока от Вас исходят одни только эмоции. Загадки угадывать -- не интересно. Интересно исследовать.

Как самому бороться с проблемой? -- Копать. Копать глубже. Не происходит инициализация чего-то там к указанному сроку? Хорошо! Почему не происходит? Кто эту инициализацию осуществляет? Что является критерием правильно инициализации? Как проверить? Достаточно-ли просто для этого повесить на свободную гогу ЛЭД и зажечь его или нужно "вывести наружу" целый блок информации?

Думайте, стройте предположения, проверяйте. Запаяйте два ЛЭДа. Выводите на них разные данный из разных частей программы.

Откуда нам знать, что там у Вас твориться? Играть в угадайку -- неблагодарное занятие. Жизнь и без этих Что-Где-Куда быстро проходит.
Уважайте тех, кто может Вам помочь. Не пытайтесь захомутать в свою игру. Либо мы работаем, и помогаем друг другу решать проблемы, либо мы балаганим.

Я очень надеюсь, что Вы не обидитесь на мои нравоучения, а сделаете правильный вывод. Пожалуйста, добавьте серьезности и у Вас все начнет получаться.

Итак. С чего начнем?
Lexdaw
Благодарю всех за участие. Проблема, хм , глупость побеждена.
Моя истерика была конечно неуместна, но принцип «пытаясь объяснить другим –наконец-то сам поймешь чего творишь» сработал.
Выкладывать текст кода посчитал неоправданной жестокостью Я ж не садист заставлять бродить по этим сумеречным лабиринтам.
Оказалось в одной из п/п математики(пользуемой давно и часто) не было предварительной очистки одного из рабочих регистров.
Ёще раз всем спасибо.
P.S.А обижаться, я давно такой глупой привычки не умею.sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.