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

 
 
> 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
 
Start new topic
Ответов
Alex B._
сообщение Jan 23 2006, 09:39
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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
vm1
сообщение Jan 24 2006, 19:45
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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   PIC18F4520 - проблемы с запуском   Jan 13 2006, 08:05
- - Alex B._   Либо кварц убогий, либо программная ошибка. И вооб...   Jan 13 2006, 09:20
- - Epikur   Благодарю за несомненно ценный совет. Только вот к...   Jan 14 2006, 16:20
- - Epikur   Проблема, похоже, решилась установкой резистора по...   Jan 17 2006, 21:14
|- - dm_mur   Несмотря на то, что проблема решилась: Как вы фом...   Jan 18 2006, 03:25
- - Epikur   Дело в том, что ради удобства же пользователей наш...   Jan 21 2006, 22:54
|- - vm1   У нас была такая же проблема и тоже с 18 пиком. В ...   Jan 22 2006, 01:19
|- - dm_mur   Цитата(Epikur @ Jan 22 2006, 01:54) Дело ...   Jan 25 2006, 07:01
- - Алексей Непочатов   To Epikur: А у Вас все рекомендации общего порядка...   Jan 23 2006, 08:57
- - Epikur   ЦитатаПосле аппаратного сброса кнопкой работал нор...   Jan 24 2006, 15:01
- - Alex B._   Цитата4520LF LF не LF отбирается на фабрике тестир...   Jan 24 2006, 16:55
- - FPGA   Цитата(Epikur @ Jan 13 2006, 11:05) День ...   Jan 24 2006, 17:34
- - Алексей Непочатов   Каковы, интересно, "небольшие допущения...   Jan 24 2006, 19:06
- - Epikur   Каковы, интересно, "небольшие допущения...   Jan 25 2006, 06:27


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:01
Рейтинг@Mail.ru


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