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

 
 
 
Closed TopicStart new topic
> Не стартует 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
V.K
сообщение Dec 21 2012, 11:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 6-05-06
Из: РФ
Пользователь №: 16 841



Цитата(Kompot @ Dec 21 2012, 16:03) *
Есть у кого подобный опыт?


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

При программировании никаких проблем не наблюдалось. Вот это и сбивало с толку.

Сообщение отредактировал V.K - Dec 21 2012, 11:49
Go to the top of the page
 
+Quote Post
stfrd
сообщение Dec 21 2012, 11:52
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 203
Регистрация: 1-10-07
Пользователь №: 30 978



А найти участок, где происходит залип? Может дело не в микроконтроллере, а в драйвере 485, какой-нибудь интеррупт от него на старте, и программа убежала в бесконечность принимать несуществующий пакет. Короче, - возможно контроллер стартует сразу, а драйвер на этой плате запаздывает, и из-за неотслеживания ситуации, что внешнеее оборудование может быть ещё не готово к работе, программа уходит в неверное состояние. Сделайте в main в самом начале паузу в 100мс.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 21 2012, 11:57
Сообщение #4


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

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



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


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kompot
сообщение Dec 21 2012, 13:46
Сообщение #5


Местный
***

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



Цитата(stfrd @ Dec 21 2012, 15:52) *
А найти участок, где происходит залип? Может дело не в микроконтроллере, а в драйвере 485, какой-нибудь интеррупт от него на старте, и программа убежала в бесконечность принимать несуществующий пакет. Короче, - возможно контроллер стартует сразу, а драйвер на этой плате запаздывает, и из-за неотслеживания ситуации, что внешнеее оборудование может быть ещё не готово к работе, программа уходит в неверное состояние. Сделайте в main в самом начале паузу в 100мс.

Так собственно весь вопрос в том, можно ли так написать программу, чтобы она вот так выделывалась только на одной плате из тридцати.

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

Буду дальше продолжать пинать программистов, они очень не любят отладку.

Цитата(ILYAUL @ Dec 21 2012, 15:57) *
64К на управление светодиодами - кон. гениально!! Вы сами ответили на свой вопрос. Продолжайте избиение программистов и запишите Ваш код не через boot, а любым программатором. Можете загнать код в студию и посмотреть где виснет.

Ладно-ладно...
Светодиодов около 700. Такой же процессор в целях унификации (хотя и избыточно) применяется во всех остальных модулях. Цена (не поверите) - не волнует. Зато два последовательных порта весьма востребованы.
При попытке скомпилировать DEBUG версию размер прошивки превышает размер флеши.
Студия не имеет периферии. И 29 таких же плат работают. Да и эта работает, если резче подать питание.
А вы не из программистов будете? cranky.gif

Я больше всего опасался проблем со стартом CPU, особенно при медленном нарастании питания. Оказалось не оно.
Тогда что?
Go to the top of the page
 
+Quote Post
zombi
сообщение Dec 21 2012, 13:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Поменяйте процессоры с этой и любой из 29-ти рабочих плат.
И все сразу станет ясно.

А "зависнуть" программа вообще не может при условии работоспособности всего изделия.
"Зависла" - значит программист при написании не учёл всех возможных условий работы изделия.
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 21 2012, 13:50
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Kompot @ Dec 21 2012, 17:46) *
Я больше всего опасался проблем со стартом CPU, особенно при медленном нарастании питания. Оказалось не оно.
Тогда что?

Неинициализированная переменная?
Go to the top of the page
 
+Quote Post
Kompot
сообщение Dec 21 2012, 14:58
Сообщение #8


Местный
***

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



Цитата(adnega @ Dec 21 2012, 16:50) *
Неинициализированная переменная?

А почему на 29 остальных работает?
Уж тогда скорее разрешенное прерывание по смене пина без обработчика при наличии пинов, болтающихся в воздухе.
Это бы все объяснило. В том числе физическое различие плат - как там защитные диоды на входах борются за уровень.

Цитата(zombi @ Dec 21 2012, 16:49) *
Поменяйте процессоры с этой и любой из 29-ти рабочих плат.
И все сразу станет ясно.

А "зависнуть" программа вообще не может при условии работоспособности всего изделия.
"Зависла" - значит программист при написании не учёл всех возможных условий работы изделия.


Спасибо за идею! Следовало самому догадаться. Сразу исключаются и плата и процессор. Осталось только аккуратненько снять.

А насчет "не может" - еще как может biggrin.gif
Вот "не должна" - это да, правда.

santa2.gif
Go to the top of the page
 
+Quote Post
eug
сообщение Dec 21 2012, 15:15
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 11-01-05
Из: Сибирь
Пользователь №: 1 893



Однако была подобная тема с контроллерами AT91SAM7S.
Часть плат не стартовали при температуре корпуса ниже +20 градусов цельсия.
Требовали повторного включения питания.
Из 150 плат проблемма проявилась на 4 (фабричный монтаж),
из 10 плат не стартовали 5 ( сборка вручную, феном).
Проблемма оказалась в "перегреве" при сборке.
По даташиту микросхема выдерживает +260С однократно.
Практически нагрев до +250С приводил к нарушению внутренних цепей старта микросхемы.
Подобный эффект в меньшем обьёме наблюдался так же у микросхем AT91RM9200-QI-002.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 21 2012, 15:24
Сообщение #10


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

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



Цитата(Kompot @ Dec 21 2012, 18:58) *
Спасибо за идею! Следовало самому догадаться. Сразу исключаются и плата и процессор. Осталось только аккуратненько снять.

Ответ
Цитата(Kompot)
Пришлось написать свой тестовый кусочек кода моргание светодиода, используя другой компилятор (ImageCraft). Так вот этот тестовый код стартует всегда, независимо от скорости нарастания. Даже на 15 миллисекундах! Прихожу к выводу, что железо-то - рабочее!

Или Вы сами себе не верите biggrin.gif
Цитата
Студия не имеет периферии.

Какой?
Цитата
При попытке скомпилировать DEBUG версию размер прошивки превышает размер флеши.
Это в студии?


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
stfrd
сообщение Dec 21 2012, 18:24
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 203
Регистрация: 1-10-07
Пользователь №: 30 978



Цитата
Так собственно весь вопрос в том, можно ли так написать программу, чтобы она вот так выделывалась только на одной плате из тридцати.

Да раз плюнуть. Допустим сразу же после старта ловите низкий уровень на каком-нибудь выводе. При этом ошибочно считаете, что при включении платы на этот вывод моментально подаётся высокий уровень, а на деле именно на этой плате какой-то компонент запаздывает на 1 миллисекунду. Программа-то выполняется на реальном железе, и надо учитывать что есть переходное состояние, когда на входах может быть всё что угодно. Я ещё раз намекаю - сделайте элементарную паузу на старте. Если спасёт, значит проблема именно в этом.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 21 2012, 19:04
Сообщение #12


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

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



Цитата
Так собственно весь вопрос в том, можно ли так написать программу, ч.......

Запросто, вот написал. На 2313 постоянно перегружается , а на 4313 работает при этом код и фьюзы один в один и плата одна (панелька). А всего лишь последовательность двух команд идущих друг за другом , надо было поменять местами. Теперь работает и там и там.


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kompot
сообщение Jan 8 2013, 15:13
Сообщение #13


Местный
***

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



Докладываю результат:
При прошивке очередной "улучшенной версии" программы не заработали уже 5 плат из 9. Начальство в панике и начало чехвостить потенциальных виновных.
Тут же причина была найдена, баг исправлен.

На свою голову дал этим прекрасным людям (программистам) возможность общаться с железкой через отдельный последовательный порт (отладочный, никаких иных функций не несущий). Вот у них и был отладочный билд, когда в железку можно было достучаться извне и получить ответ.
Во-первых, эти умнейшие создания (ну да, программисты) никак сами себе объяснить не могут, как в релиз попала эта функциональность, предназначенная только для отладки.
А во-вторых, использовался вызов функции scanf() для чтения из отладочного порта. Разумеется, никакого кастомного getch() и в помине не было. Вот на этом scanf() происходила перезагрузка с вероятностью, зависящей от скорости нарастания питающего напряжения.
Также при более тщательном досмотре нашлись куча неинициализированных переменных.
Убрали вызов scanf() - все стало работать правильно.

Вывод: железо полностью рабочее. А за scanf() надо бы железной линейкой по рукам... Вот им и не хватает 64к флеша.

P.S. Как эта фирмварь писалась: супер-пупер программер (Qt, GUI, физик по образованию) пол-года мусолил, так и не написал, съехал (типа, мало времени, очень загружен). Дали приходящему на 1 день в неделю студенту. Тот за месяц написал кое-что кое-как работающее. И вот это "кое-что" зарелизили. А искать ошибки посадили третьего, который впервые (как и первые два) видит АВР.
P.P.S. А я предлагал менеджеру, давай мол я напишу фирмварь, но поскольку числюсь электроником, заплатите мне за это премию. Отказался наотрез. Типа, "это шантаж".

Думаете, гирлянды делаем? Неа, медицинское оборудование. Думаете, в Тамбове в сарае? Нифига, центр Европы.
Думаете, китайцы на коленках нам платы паяют? Опять мимо, сам Филипс.

Блин, каждый раз дрожат колени когда вхожу в самолет. Одна надежда - а вдруг у Боинга не так, как у нас...
А мы ведь людям в глаз 20mW лазером светим...
Как жить дальше...


тему, наверное, можно закрыть.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 8 2013, 17:25
Сообщение #14


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Kompot @ Jan 8 2013, 19:13) *
...Думаете, гирлянды делаем? Неа, медицинское оборудование. Думаете, в Тамбове в сарае? Нифига, центр Европы. Думаете, китайцы на коленках нам платы паяют? Опять мимо, сам Филипс....



Вы это.... уважаемый... не пугайте так. я грешным делом думал про россию описалово идёт. в ней родёмой на энтузиазме, упорстве и совести конечных исполнителей частенько всё держится. софтверные конторы на этом и выезжают частенько.

да уж... там у вас не програмисты вообще, чисто по моим меркам. то что описали - это студенческие потуги (я на полном серьёзе). рассмотрите фриланс либо удалённый филиал - толку больше будет, при тех же(либо меньших) затратах. да и на этом форуме любой толковый разработчик сделает вам софт на должном уровне при должном финансировании. экономия на спичках у вас там...

и менагер ничего не мыслит в производстве, если элементарный контроль на производстве не может обеспечить.

да уж...
если желание будет - организовать филиал, обращайтесь - это моё sm.gif

Сообщение отредактировал kolobok0 - Jan 8 2013, 17:31
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th June 2025 - 11:51
Рейтинг@Mail.ru


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