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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> PIC18F4520 - проблемы с запуском
Epikur
сообщение Jan 13 2006, 08:05
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



День добрый.
Есть система, построенная на базе 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.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Jan 13 2006, 09:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Либо кварц убогий, либо программная ошибка.
И вообще, орекомендую почитать даташит, чтобы понять, что означают конфигурационные биты, а не от балды их щелкать.
Go to the top of the page
 
+Quote Post
Epikur
сообщение Jan 14 2006, 16:20
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Благодарю за несомненно ценный совет.
Только вот кварц нормальный (он не один такой, и на другом проце нормально работает), а программной ошибкой это быть не может - программа просто ещё не исполняется.
Да и вот даташит я читал, хотя возможно Вам это и покажется странным.
Go to the top of the page
 
+Quote Post
Epikur
сообщение Jan 17 2006, 21:14
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Проблема, похоже, решилась установкой резистора по питанию контроллера об землю. Похоже, раньше стабильно не запускался кварц, и система чуть ли не каждый второй раз работала от внутреннего генератора, и, ясное дело, не то, чтобы очень хорошо (разница в частоте в 4 раза, как-никак). Видимо, после выключения, на полупроводниках оставалось ихние 0.6 В, которые непонятно как, но поддерживали процессор в неизвестном состоянии.
Go to the top of the page
 
+Quote Post
dm_mur
сообщение Jan 18 2006, 03:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 255
Регистрация: 10-03-05
Из: Омск
Пользователь №: 3 195



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

Как вы фомируете сигнал сброса? Используете монитор питания или просто RC-цепью?
Go to the top of the page
 
+Quote Post
Epikur
сообщение Jan 21 2006, 22:54
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Дело в том, что ради удобства же пользователей нашего устойства, кнопки сброса нет - можно только вынять вилку из розетки.
Так что на !MCLR сидит постоянное +5В, а приходит оно туда - да,через RC- фильтр. Это раньше. Сейчас к нему добавился ещё один резистор.
Go to the top of the page
 
+Quote Post
vm1
сообщение Jan 22 2006, 01:19
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



У нас была такая же проблема и тоже с 18 пиком.
В одном из изделий мы впервые применили
простейший трансформаторный блок питания на 220 с кренкой на 5в.
Пик стал запускаться неустойчиво.
После аппаратного сброса кнопкой работал нормально.
Перенос первого call в программе на более позднее время однозначно
устранил эту проблему.
Я писал на Микрочип и они утверждали что у нас слишком
большое время подъема напряжения питания.
Я так не считаю, какого черта это поправляется переносом call?
Похоже в пике есть какой-то баг, который проявляется при медленном старте.
Вобщем вопрос довольно мутный, но сейчас работает устойчиво.
Go to the top of the page
 
+Quote Post
Алексей Непочато...
сообщение Jan 23 2006, 08:57
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 20-01-06
Из: Нижний Новгород
Пользователь №: 13 414



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

- Если у ПИКа несколько ног земли / питания то все они должны быть соединены по
кратчайшему пути без переходных отверстий.
- Непосредственно под кристаллом дОлжно быть земляному полигону.
- любая соседняя пара ног питания должна быть зашунтирована SMD керамикой не далее
чем в 3 мм от ног.
- земля на конденсаторы кварца должна идти от ближайшей земляной ноги ПИКа
индивидуально и не иметь ответвлений на другие потребители / источники.
- максимально короткие выводы от МК к ножкам кварца и кондерам
- желательно все это хозяйство (землю, выводы XTAL1, XTAL2 и кондеры) окружить ободком обычной
земли
- Земля на RC-цепочку сброса - также по кратчайшему пути от ног питания ПИКа.

Всё почерпнуто с форума microchip.ru.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Jan 23 2006, 09:39
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



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'е. Точнее были, но виноват был я.
Go to the top of the page
 
+Quote Post
Epikur
сообщение Jan 24 2006, 15:01
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Цитата
После аппаратного сброса кнопкой работал нормально.
Перенос первого call в программе на более позднее время однозначно
устранил эту проблему.
Я писал на Микрочип и они утверждали что у нас слишком
большое время подъема напряжения питания.
Я так не считаю, какого черта это поправляется переносом call?

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

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

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

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

В той партии, с которой были проблемы - 4520LF.
В общем-то, действительно похоже на то, что RAM сохранялся... хотя на Vdd было где-то 0.5 В, что явно ниже рабочих пределов. Чёрт его знает, что там в процессоре при таких условиях ещё было.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Jan 24 2006, 16:55
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата
4520LF

LF не LF отбирается на фабрике тестированием кристалла. Вполне возможно что и некоторые не-LF будут работать от 2,0В, если BOD выключить.
Go to the top of the page
 
+Quote Post
FPGA
сообщение Jan 24 2006, 17:34
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 341
Регистрация: 6-12-04
Пользователь №: 1 352



Цитата(Epikur @ Jan 13 2006, 11:05) *
День добрый.
Есть система, построенная на базе PIC18F4520. В качестве тактового генератора был выбран кварц на частоте 4
Мгц, режим: HS-PLL. К кварцу приделаны 2 конденсатора по 15 пФ.

Кварц на 4 МГц может неустойчиво запускаться с 15 пФ. Увеличьте до 33-47 пик, и все должно получиться и без резистора по питанию.
Go to the top of the page
 
+Quote Post
Алексей Непочато...
сообщение Jan 24 2006, 19:06
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 20-01-06
Из: Нижний Новгород
Пользователь №: 13 414



Каковы, интересно, "небольшие допущения"?
Некорректно говорить, что рекомендации для тяжёлых режимов, несоблюдение какой-нибудь мелочи может к таким результатам привести - хоть плачь. Есть у меня экземпляр контроллера одного, так у него периодически содержимое памяти "съезжает" - и при этом никакие BOR-ы не отрабатываются sad.gif
Go to the top of the page
 
+Quote Post
vm1
сообщение Jan 24 2006, 19:45
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



Цитата(Alex B._ @ Jan 23 2006, 12:39) *
2vm1
Цитата
После аппаратного сброса кнопкой работал нормально.
Перенос первого call в программе на более позднее время однозначно
устранил эту проблему.
Я писал на Микрочип и они утверждали что у нас слишком
большое время подъема напряжения питания.
Я так не считаю, какого черта это поправляется переносом call?

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


У нас две сетевых "OS" для 16 пиков и для 18.
Та OS(18) которая не работает на простом источнике работает в 20 изделиях,
выпускаемых тысячами, без проблем.
PLL,кварцы, конденсаторы, все одинаково,
разные только блоки питания, в этом кренка а в остальных импульсники.
Все ераты давно известны и пройдены, с переносом call работает железно.
Багг очевидный, потому и писали на фирму.
Использовался PIC18F452.
Ограничение по медленности нарастания напряжения нарушено не было.
Go to the top of the page
 
+Quote Post
Epikur
сообщение Jan 25 2006, 06:27
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 17-04-05
Из: Минск
Пользователь №: 4 215



Каковы, интересно, "небольшие допущения"?
Например:
любая соседняя пара ног питания должна быть зашунтирована MD керамикой не далее чем в 3 мм от ног.
Если я не ошибаюсь, на плате там реально миллиметров 5.

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

Сообщение отредактировал Epikur - Jan 25 2006, 06:28
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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