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

PIC18F4520 - проблемы с запуском

День добрый.

Есть система, построенная на базе 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.

Поделиться сообщением


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

Либо кварц убогий, либо программная ошибка.

И вообще, орекомендую почитать даташит, чтобы понять, что означают конфигурационные биты, а не от балды их щелкать.

Поделиться сообщением


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

Благодарю за несомненно ценный совет.

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

Да и вот даташит я читал, хотя возможно Вам это и покажется странным.

Поделиться сообщением


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

Проблема, похоже, решилась установкой резистора по питанию контроллера об землю. Похоже, раньше стабильно не запускался кварц, и система чуть ли не каждый второй раз работала от внутреннего генератора, и, ясное дело, не то, чтобы очень хорошо (разница в частоте в 4 раза, как-никак). Видимо, после выключения, на полупроводниках оставалось ихние 0.6 В, которые непонятно как, но поддерживали процессор в неизвестном состоянии.

Поделиться сообщением


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

Несмотря на то, что проблема решилась:

 

Как вы фомируете сигнал сброса? Используете монитор питания или просто RC-цепью?

Поделиться сообщением


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

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

Так что на !MCLR сидит постоянное +5В, а приходит оно туда - да,через RC- фильтр. Это раньше. Сейчас к нему добавился ещё один резистор.

Поделиться сообщением


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

У нас была такая же проблема и тоже с 18 пиком.

В одном из изделий мы впервые применили

простейший трансформаторный блок питания на 220 с кренкой на 5в.

Пик стал запускаться неустойчиво.

После аппаратного сброса кнопкой работал нормально.

Перенос первого call в программе на более позднее время однозначно

устранил эту проблему.

Я писал на Микрочип и они утверждали что у нас слишком

большое время подъема напряжения питания.

Я так не считаю, какого черта это поправляется переносом call?

Похоже в пике есть какой-то баг, который проявляется при медленном старте.

Вобщем вопрос довольно мутный, но сейчас работает устойчиво.

Поделиться сообщением


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

To Epikur:

А у Вас все рекомендации общего порядка выполнены?

 

- Если у ПИКа несколько ног земли / питания то все они должны быть соединены по

кратчайшему пути без переходных отверстий.

- Непосредственно под кристаллом дОлжно быть земляному полигону.

- любая соседняя пара ног питания должна быть зашунтирована SMD керамикой не далее

чем в 3 мм от ног.

- земля на конденсаторы кварца должна идти от ближайшей земляной ноги ПИКа

индивидуально и не иметь ответвлений на другие потребители / источники.

- максимально короткие выводы от МК к ножкам кварца и кондерам

- желательно все это хозяйство (землю, выводы XTAL1, XTAL2 и кондеры) окружить ободком обычной

земли

- Земля на RC-цепочку сброса - также по кратчайшему пути от ног питания ПИКа.

 

Всё почерпнуто с форума microchip.ru.

Поделиться сообщением


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

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'е. Точнее были, но виноват был я.

Поделиться сообщением


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

После аппаратного сброса кнопкой работал нормально.

Перенос первого call в программе на более позднее время однозначно

устранил эту проблему.

Я писал на Микрочип и они утверждали что у нас слишком

большое время подъема напряжения питания.

Я так не считаю, какого черта это поправляется переносом call?

К слову сказать, нечто похожее было и у меня - иногда контроллер при старте входил в другой цикл, пропустив при этом процедуру инициализации. Явно - стартовал откуда-то не сначала. Тогда я поставил проверку в каждом цикле (там у меня 3 основных бесконечных цикла) на одну из переменных (назначение одной из ног в TRIS), и если оно было неверное - отправлял на резет. Это немного повысило стабильность, но полностью проблему тогда не исправило.

 

А у Вас все рекомендации общего порядка выполнены?

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

 

Какой контроллер использовали?

В той партии, с которой были проблемы - 4520LF.

В общем-то, действительно похоже на то, что RAM сохранялся... хотя на Vdd было где-то 0.5 В, что явно ниже рабочих пределов. Чёрт его знает, что там в процессоре при таких условиях ещё было.

Поделиться сообщением


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

4520LF

LF не LF отбирается на фабрике тестированием кристалла. Вполне возможно что и некоторые не-LF будут работать от 2,0В, если BOD выключить.

Поделиться сообщением


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

День добрый.

Есть система, построенная на базе PIC18F4520. В качестве тактового генератора был выбран кварц на частоте 4

Мгц, режим: HS-PLL. К кварцу приделаны 2 конденсатора по 15 пФ.

Кварц на 4 МГц может неустойчиво запускаться с 15 пФ. Увеличьте до 33-47 пик, и все должно получиться и без резистора по питанию.

Поделиться сообщением


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

Каковы, интересно, "небольшие допущения"?

Некорректно говорить, что рекомендации для тяжёлых режимов, несоблюдение какой-нибудь мелочи может к таким результатам привести - хоть плачь. Есть у меня экземпляр контроллера одного, так у него периодически содержимое памяти "съезжает" - и при этом никакие BOR-ы не отрабатываются :(

Поделиться сообщением


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

2vm1

После аппаратного сброса кнопкой работал нормально.

Перенос первого call в программе на более позднее время однозначно

устранил эту проблему.

Я писал на Микрочип и они утверждали что у нас слишком

большое время подъема напряжения питания.

Я так не считаю, какого черта это поправляется переносом call?

Разбирайтесь с настройками источника тактирования и своей программой. Какой контроллер использовали? Из 18-х я работал с 4550, 4520, 6525, 6490, 8490 и т д и т п, нигде никогда таких проблем не было, если они не описаны в ERRAT'е. Точнее были, но виноват был я.

 

У нас две сетевых "OS" для 16 пиков и для 18.

Та OS(18) которая не работает на простом источнике работает в 20 изделиях,

выпускаемых тысячами, без проблем.

PLL,кварцы, конденсаторы, все одинаково,

разные только блоки питания, в этом кренка а в остальных импульсники.

Все ераты давно известны и пройдены, с переносом call работает железно.

Багг очевидный, потому и писали на фирму.

Использовался PIC18F452.

Ограничение по медленности нарастания напряжения нарушено не было.

Поделиться сообщением


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

Каковы, интересно, "небольшие допущения"?

Например:

любая соседняя пара ног питания должна быть зашунтирована MD керамикой не далее чем в 3 мм от ног.

Если я не ошибаюсь, на плате там реально миллиметров 5.

 

Кварц на 4 МГц может неустойчиво запускаться с 15 пФ. Увеличьте до 33-47 пик, и все должно получиться и без резистора по питанию.

Ага, это тоже сделали, вместе с резистором по питанию.

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

Поделиться сообщением


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

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...