Epikur 0 13 января, 2006 Опубликовано 13 января, 2006 · Жалоба День добрый. Есть система, построенная на базе PIC18F4520. В качестве тактового генератора был выбран кварц на частоте 4 Мгц, режим: HS-PLL. К кварцу приделаны 2 конденсатора по 15 пФ. Чего бы ни выбирать с режимах работы внутренних и внешних генераторах, (Fail-safe clock, two speed startup, startup timers, watchdog итд.), чего бы ни отключать, система периодически при старте уходит в глубокий ступор. Были выявлены следующие "закономерности" * При выключенном FSCM (Fail-safe clock monitoring), TSS (Two-speed startup) - вне зависимости от PTMR (Power-up Timer) и WDT, система просто иногда не стартует. Обычно после цикла " программирование (ICD-2)-> выключение питания (снятие ICD) -> включение питания) первый раз стартует всегда, а второй раз после включения-выключения - где-то только в 20% случаев. * При включенном TSS система, в общем, ведёт себя схожим образом, только стартует чаще. А иногда стартует на частоте примерно раз в 16 ниже (видимо, на встроенном генераторе, который по умолчанию настроен на 1 Мгц). И на основную частоту не переходит. * При включённом FSCM и TSS система иногда стартует (обычно), иногда не стартует вообще, иногда стартует на частоте 1 Мгц, иногда - где-то видимо в диапазоне 32 кГц (тоже там такой генератор есть). * При сбросе по WDT система всегда стартует нормально. Если дёрнуть MCLR - аналогично. * С добавлением в программе кода защиты от сбоев (приведён ниже), система стала 95% стабильной. Но иногда всё равно не стартует, и хоть ты тресни. Что самое неприятное, так это что глюк стал почти невоспроизводим. Вот сегодня я с ним долбался, раз 50 программировал, включал, выключал - и ни разу ни одного сбоя. А понёс девайс на приёмку, так он со второго раза повесился. А потом опять начал нормально работать. Я даже посоветовал включить в инструкцию по эксплуатации строчку, мол "если устройство не подаёт признаков жизни, выдердните его из сети, подождите минуту и включите опять". (после такого перерыва устройство обычно включалось) Но это как-то несолидно. Привожу код защиты (на HT-PIC C18) // функция вызывается из main - в первой строке. void DeviceInitialize (void) { u16 Temp; // Выражения вроде BitN и xBitN определны как байт с одной единицей или одним нулём соответственно OSCCON |= Bit4 | Bit5 | Bit6; // Выбираем частоту внутреннего генератора 8 Мгц while (!OSTS) asm ("\tclrwdt"); // Ожидаем, пока внешний генератор не стабилизируется OSCCON &= xBit0 & xBit1; // Выбираем режим работы: от основного (внешнего) генератора // Подозреваю, что эта строка не будет иметь эффекта. // Проверка, чтобы устройство работало на основной частоте. Иначе - сброс по Watchdog // Длительность одного цикла декремента: 3 мкс (12 тактов). // Период таймера устанавливаем около 16 млс (делитель 1:4) // Получаемая задержка: 12 млс либо гораздо больше, если основной генератор не завёлся. Temp = 4000; while (Temp--); asm ("\tclrwdt"); // Дальнейший код инициализации... return; } Ещё стоит заметить, что этот же проект на PIC18F458 работает безо всяких проблем, но это старая версия, в новой мы перешли на 4520. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex B._ 0 13 января, 2006 Опубликовано 13 января, 2006 · Жалоба Либо кварц убогий, либо программная ошибка. И вообще, орекомендую почитать даташит, чтобы понять, что означают конфигурационные биты, а не от балды их щелкать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 14 января, 2006 Опубликовано 14 января, 2006 · Жалоба Благодарю за несомненно ценный совет. Только вот кварц нормальный (он не один такой, и на другом проце нормально работает), а программной ошибкой это быть не может - программа просто ещё не исполняется. Да и вот даташит я читал, хотя возможно Вам это и покажется странным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 17 января, 2006 Опубликовано 17 января, 2006 · Жалоба Проблема, похоже, решилась установкой резистора по питанию контроллера об землю. Похоже, раньше стабильно не запускался кварц, и система чуть ли не каждый второй раз работала от внутреннего генератора, и, ясное дело, не то, чтобы очень хорошо (разница в частоте в 4 раза, как-никак). Видимо, после выключения, на полупроводниках оставалось ихние 0.6 В, которые непонятно как, но поддерживали процессор в неизвестном состоянии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dm_mur 2 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Несмотря на то, что проблема решилась: Как вы фомируете сигнал сброса? Используете монитор питания или просто RC-цепью? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 21 января, 2006 Опубликовано 21 января, 2006 · Жалоба Дело в том, что ради удобства же пользователей нашего устойства, кнопки сброса нет - можно только вынять вилку из розетки. Так что на !MCLR сидит постоянное +5В, а приходит оно туда - да,через RC- фильтр. Это раньше. Сейчас к нему добавился ещё один резистор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vm1 0 22 января, 2006 Опубликовано 22 января, 2006 · Жалоба У нас была такая же проблема и тоже с 18 пиком. В одном из изделий мы впервые применили простейший трансформаторный блок питания на 220 с кренкой на 5в. Пик стал запускаться неустойчиво. После аппаратного сброса кнопкой работал нормально. Перенос первого call в программе на более позднее время однозначно устранил эту проблему. Я писал на Микрочип и они утверждали что у нас слишком большое время подъема напряжения питания. Я так не считаю, какого черта это поправляется переносом call? Похоже в пике есть какой-то баг, который проявляется при медленном старте. Вобщем вопрос довольно мутный, но сейчас работает устойчиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mazayac 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба To Epikur: А у Вас все рекомендации общего порядка выполнены? - Если у ПИКа несколько ног земли / питания то все они должны быть соединены по кратчайшему пути без переходных отверстий. - Непосредственно под кристаллом дОлжно быть земляному полигону. - любая соседняя пара ног питания должна быть зашунтирована SMD керамикой не далее чем в 3 мм от ног. - земля на конденсаторы кварца должна идти от ближайшей земляной ноги ПИКа индивидуально и не иметь ответвлений на другие потребители / источники. - максимально короткие выводы от МК к ножкам кварца и кондерам - желательно все это хозяйство (землю, выводы XTAL1, XTAL2 и кондеры) окружить ободком обычной земли - Земля на RC-цепочку сброса - также по кратчайшему пути от ног питания ПИКа. Всё почерпнуто с форума microchip.ru. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex B._ 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба 2Алексей Непочатов Весьма ценные замечания. 2Epikur Проблема, похоже, решилась установкой резистора по питанию контроллера об землю. Я в приборах которые от сети работают автоматическое переключение источника тактирования выключаю. У вас очевидная проблема - тактовый генератор при понижении питания умирает, контроллер переходит на INT RC, начинает потреблять меньше, RAM не сбрасывается. Резистором вы просто емкость по питанию разряжаете быстрее. Так на всякий случай, по поводу кварцевых генераторов: http://www.microchip.com/stellent/idcplg?I...90&filterID=414 Особенно AN943. 2vm1 После аппаратного сброса кнопкой работал нормально. Перенос первого call в программе на более позднее время однозначно устранил эту проблему. Я писал на Микрочип и они утверждали что у нас слишком большое время подъема напряжения питания. Я так не считаю, какого черта это поправляется переносом call? Разбирайтесь с настройками источника тактирования и своей программой. Какой контроллер использовали? Из 18-х я работал с 4550, 4520, 6525, 6490, 8490 и т д и т п, нигде никогда таких проблем не было, если они не описаны в ERRAT'е. Точнее были, но виноват был я. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба После аппаратного сброса кнопкой работал нормально. Перенос первого call в программе на более позднее время однозначно устранил эту проблему. Я писал на Микрочип и они утверждали что у нас слишком большое время подъема напряжения питания. Я так не считаю, какого черта это поправляется переносом call? К слову сказать, нечто похожее было и у меня - иногда контроллер при старте входил в другой цикл, пропустив при этом процедуру инициализации. Явно - стартовал откуда-то не сначала. Тогда я поставил проверку в каждом цикле (там у меня 3 основных бесконечных цикла) на одну из переменных (назначение одной из ног в TRIS), и если оно было неверное - отправлял на резет. Это немного повысило стабильность, но полностью проблему тогда не исправило. А у Вас все рекомендации общего порядка выполнены? С определёнными небольшими допущениями, но в целом выполнены. (Тут ещё нужно учитывать, что эти рекомендации написаны, всё-таки, для наиболее тяжёлых режимов, наивысшей частоте, итд). Какой контроллер использовали? В той партии, с которой были проблемы - 4520LF. В общем-то, действительно похоже на то, что RAM сохранялся... хотя на Vdd было где-то 0.5 В, что явно ниже рабочих пределов. Чёрт его знает, что там в процессоре при таких условиях ещё было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex B._ 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба 4520LF LF не LF отбирается на фабрике тестированием кристалла. Вполне возможно что и некоторые не-LF будут работать от 2,0В, если BOD выключить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FPGA 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба День добрый. Есть система, построенная на базе PIC18F4520. В качестве тактового генератора был выбран кварц на частоте 4 Мгц, режим: HS-PLL. К кварцу приделаны 2 конденсатора по 15 пФ. Кварц на 4 МГц может неустойчиво запускаться с 15 пФ. Увеличьте до 33-47 пик, и все должно получиться и без резистора по питанию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mazayac 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба Каковы, интересно, "небольшие допущения"? Некорректно говорить, что рекомендации для тяжёлых режимов, несоблюдение какой-нибудь мелочи может к таким результатам привести - хоть плачь. Есть у меня экземпляр контроллера одного, так у него периодически содержимое памяти "съезжает" - и при этом никакие BOR-ы не отрабатываются :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vm1 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба 2vm1 После аппаратного сброса кнопкой работал нормально. Перенос первого call в программе на более позднее время однозначно устранил эту проблему. Я писал на Микрочип и они утверждали что у нас слишком большое время подъема напряжения питания. Я так не считаю, какого черта это поправляется переносом call? Разбирайтесь с настройками источника тактирования и своей программой. Какой контроллер использовали? Из 18-х я работал с 4550, 4520, 6525, 6490, 8490 и т д и т п, нигде никогда таких проблем не было, если они не описаны в ERRAT'е. Точнее были, но виноват был я. У нас две сетевых "OS" для 16 пиков и для 18. Та OS(18) которая не работает на простом источнике работает в 20 изделиях, выпускаемых тысячами, без проблем. PLL,кварцы, конденсаторы, все одинаково, разные только блоки питания, в этом кренка а в остальных импульсники. Все ераты давно известны и пройдены, с переносом call работает железно. Багг очевидный, потому и писали на фирму. Использовался PIC18F452. Ограничение по медленности нарастания напряжения нарушено не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 25 января, 2006 Опубликовано 25 января, 2006 (изменено) · Жалоба Каковы, интересно, "небольшие допущения"? Например: любая соседняя пара ног питания должна быть зашунтирована MD керамикой не далее чем в 3 мм от ног. Если я не ошибаюсь, на плате там реально миллиметров 5. Кварц на 4 МГц может неустойчиво запускаться с 15 пФ. Увеличьте до 33-47 пик, и все должно получиться и без резистора по питанию. Ага, это тоже сделали, вместе с резистором по питанию. Изменено 25 января, 2006 пользователем Epikur Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться