реклама на сайте
подробности

 
 
> Не стартует Atmega644P
Kompot
сообщение Dec 21 2012, 11:03
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192



Стороннее производство смонтировало нам 30 одинаковых контроллеров на вышеуказанном чипе. То есть техпроцесс, комплектующие - все идентичное. Питание чипа 5В. Ресет на питание через резистор 4К7 и на землю 0.1мкФ керамика. Ага, присутствует еще интерфейс RS485 в виде драйвера ST485. Управляет контроллер несколькими светодиодами. Проще некуда.
Проблема - на одной плате из 30 не стартует прошивка. Используется самописный (нашими программистами) бутлоадер и далее переход на собственно исполняемый код. Бутлоадер не использует прерываний и является отдельным проектом, с исполняемым кодом не связан.
В этой ситуации логично было предположить, что чип бракован, перегрели при пайке, плата дохлая и тд, то есть отказ железа. На кварце генерация есть. Вариант с неправильными фьюзами исключен. Правда грыз червячок сомнения, тем более что случайно удалось установить, что при некоторой критической скорости нарастания напряжения питания чип все-таки заводится и работает. Примерно так: если питание выросло от нуля до 5В за время, меньшее 2 мС, то чип стартует. Если больше 3-х - гарантированно не стартует. Вроде железячная проблема. Манипулирование с BOD, параметрами кварца и тд. ничего не изменили. А поскольку питается весь модуль от 12В через линейный стабилизатор и фильтры, то скорость нарастания в реальной системе порядка 4 мС, вот он и не стартует. А почему тогда стартует на остальных 29 платах?
Но червячок сомнения все грыз... Пришлось написать свой тестовый кусочек кода моргание светодиода, используя другой компилятор (ImageCraft). Так вот этот тестовый код стартует всегда, независимо от скорости нарастания. Даже на 15 миллисекундах! Прихожу к выводу, что железо-то - рабочее! Тут нужно уточнить, что наши программисты используют GCC из состава WinAVR.
Путем морального избиения программистов удалось установить, что чип стартует всегда и попадает в бутлоадер, откуда управление всегда передается на main() (установлено по отладочному светодиоду). А там либо работает, либо виснет.

Почему та же прошивка работает без проблем на 29 платах?
Почему она не стартует на одной плате если питание нарастает медленно?
Почему она таки стартует, если питание нарастает быстро?
Кто\что может быть виноват(о): GCC, железо, программист?
Есть у кого подобный опыт?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Dec 21 2012, 11:57
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



64К на управление светодиодами - кон. гениально!! Вы сами ответили на свой вопрос. Продолжайте избиение программистов и запишите Ваш код не через boot, а любым программатором. Можете загнать код в студию и посмотреть где виснет.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post



Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 18:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016