Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RESET LPС1768
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
TAutomatic
Непонятки получились с ресетом. При подаче питания контроллер не стартует, только при нажатии на кнопку сброса, она предусмотрена для обновления прошивки. Ножка ресет подтянута на 3.3В резистором 10кОм. Поставил керамику на землю 0,1мкФ, ноль результата. Супервизор питания - тоже самое. Сброс и старт программы только через нажатие кнопки. Да и то не сразу, бывает пару-тройку раз приходится нажать или подержать нажатой 3-4 сек. В чем тут может быть дело?
Altemir
А что на ножке P2.10 при старте? Куда подтянута?
TAutomatic
Ножка P2.10 тоже подтянута на питание 3.3В через резистор 47кОм. Это моя первая работа на ARM, многих нюансов не знаю. Есть отладочная плата китайского производства, на ней проц стартует без проблем. В разводке на моей плате вроде все нормально, я не новичек. Дляна проводника до кнопки Сброс и резистор около 15мм, не думаю, что это много
shreck
Очень многие ARM'ы требуют от источника питания определенной скорости нарастания напряжения. Обеспечивает ли ваш источник это? Неоднократно с таким сталкивался.
TAutomatic
Цитата(shreck @ Aug 22 2012, 09:38) *
Очень многие ARM'ы требуют от источника питания определенной скорости нарастания напряжения. Обеспечивает ли ваш источник это? Неоднократно с таким сталкивался.

Ваш вопрос вполне уместен. ИП - импульсник на LM2576. Я бы тоже так подумал и гадал. Но свои точки над и ставит супервизор, я его ставил, фронт включения у супервизора, естественно, крутой. Но это не помогает. В том то и проблема. Какая-то строанная ситуация. На первый взгляд - простая.
theBMV
Вот мой вариант. Использую постоянно. 10 из 10 при включении. Тот же LM2576, но на 5В и степдаун на 3,3 В 1 А на стабилизаторе IRU1206. Но у меня много периферии на 5 В и на 3,3 В поэтому такие токи. супервизор DS1816 со слежением за 3,3 В. Внутри у него подтяжка 5к на 3,3 В и дергает полевиком на землю. R29 10кОм, у Вас 47 кОм. R30 шунтирующий для правильной работы ISP (чтоб супервизор не мешался программатору ISP). Ну и C39 от нечистой силы biggrin.gif
TAutomatic
Цитата(theBMV @ Aug 24 2012, 11:08) *
Вот мой вариант. Использую постоянно. 10 из 10 при включении. Тот же LM2576, но на 5В и степдаун на 3,3 В 1 А на стабилизаторе IRU1206. Но у меня много периферии на 5 В и на 3,3 В поэтому такие токи. супервизор DS1816 со слежением за 3,3 В. Внутри у него подтяжка 5к на 3,3 В и дергает полевиком на землю. R29 10кОм, у Вас 47 кОм. R30 шунтирующий для правильной работы ISP (чтоб супервизор не мешался программатору ISP). Ну и C39 от нечистой силы biggrin.gif

Спасибо, надо разобраться. Уже в понедельник опробую Ваш вариант.
TAutomatic
Цитата(TAutomatic @ Aug 24 2012, 20:52) *
Спасибо, надо разобраться. Уже в понедельник опробую Ваш вариант.

Похоже, у меня схема практически идентичная. У меня только вопрос к Вам. У Вас используется супервизор с открытым коллектором, судя по документации. А подтяжки наверх нет. Есть толко резистор на ресет, это я так понял, защита от втекающего тока на выход супервизора при использовании ISP. Тогда достаточно было бы и 100 ом, зачем там 10 кОм? Это просто, вопрос для общего развития, зачем вы так сделали? Может я чего то не понимаю.
theBMV
В супервизоре внутри подтяжка 5 кОм. Он не с открытым коллектором

Ну а 10 кОм последовательно - так туда можно меньше, всё правильно. Это шунтирующий, чтобы втекающий в супервизор ток в момент сброса супервизором не влиял на Reset при подключенном ISP.
TAutomatic
Цитата(theBMV @ Aug 27 2012, 22:28) *
В супервизоре внутри подтяжка 5 кОм. Он не с открытым коллектором
Ну а 10 кОм последовательно - так туда можно меньше, всё правильно. Это шунтирующий, чтобы втекающий в супервизор ток в момент сброса супервизором не влиял на Reset при подключенном ISP.

Просто в даташите написано 3.3v Econoreset With Open Drain Output. Ну да Бог с ним, не в этом дело. У Вас работает так, да и хорошо. Дело в другом, собрали второй экземпляр устройства-там сброс работает нормально. Интересно, в чем разница. Схема и номиналы элементов, естественно, одинаковые.
stoker
Была похожая проблема. Из 5 плат одна показывала все выше описанные симптомы, кстати, проявились они не сразу. Причину проблемы не нашел, просто перепаял контроллер и всё заработало как часы.
kan35
Не уверен про LPC, но к STM32 категорически запрещено цеплять внешние конденсаторы на ресет (или только для фильтрации помех если сигнал ресета на длинной линии и то - не боле 10нФ). Внутренний источник сброса дергает линию вниз на несколько десятков мкс и в вашем случае, возможно, конденсатор не успевает разрядиться через слабенький мосфет внутреннего ресета и сброса не случается.
AlexPo
Смущает очень медленный внешний сброс у LPC1768. Приблизительно 5-7 секунд! Для сброса используется формирователь MCP130T-300I, который формирует 300 ms импульс. Какие догадки?
KnightIgor
Цитата(TAutomatic @ Aug 20 2012, 19:38) *
Непонятки получились с ресетом. При подаче питания контроллер не стартует, только при нажатии на кнопку сброса, она предусмотрена для обновления прошивки. Ножка ресет подтянута на 3.3В резистором 10кОм. Поставил керамику на землю 0,1мкФ, ноль результата. Супервизор питания - тоже самое. Сброс и старт программы только через нажатие кнопки. Да и то не сразу, бывает пару-тройку раз приходится нажать или подержать нажатой 3-4 сек. В чем тут может быть дело?

Может у вас генератор нестабилен?
theBMV
Цитата(AlexPo @ Oct 3 2012, 20:38) *
Смущает очень медленный внешний сброс у LPC1768. Приблизительно 5-7 секунд! Для сброса используется формирователь MCP130T-300I, который формирует 300 ms импульс. Какие догадки?


Частота токового генератора в пределах нормы? Могу Вам предложить замерять время захвата PLL. Т.е. инициализируете МК на внутреннем RC, инициализируете TMR0, и
Код
.
.
.
T0TC = 0;
while(!PLL0STAT_bit.PLOCK);
uTime = T0TC;
.
.
.

потом uTime посмотрите.
AlexPo
Решил отписаться по по поводу медленного сброса. Возможно будет полезно.
В программе была объявлена глобальная переменная (экземпляр класса) с инициализацией большого массива. Вызов конструктора осуществлялся в low_level_init до (!!!) включения основного генератора и инициализации PLL. Таким образом, большой объем работы выполнялся на частоте IRC. Естественно, решил создавать переменную динамически после инициализации PLL. Вся работа теперь осуществляется на частоте 100 МГц вместо 4-х!
Кстати! Некорректная работа с указателями при инициализации переменных в low_level_init может приводить к выбросу исключения. А поскольку, состояние памяти случайно, то и ошибка может возникать нерегулярно.

P.S. Спасибо theBMV.
Terminator
Не стал заводить ещё одну тему. Спрошу тут.

Как правильно программно перезапустить lpc1768 ?
Щас используется такой код:
Код
    DBGSTRINFO("Reset!\n\n\n\n");
    portDISABLE_INTERRUPTS();
    for (int i = 0; i < 35; i++)
    {
        NVIC_DisableIRQ((IRQn_Type) i);
        NVIC_ClearPendingIRQ((IRQn_Type) i);
    }
    SCB->VTOR = 0x0; //bootloader_start_addr;
    asm volatile
    (
        "ldr r0, =0    \n"
        "msr control, r0 \n" // init control reg like reset did
        "ldr r0, =0x0 \n"
        "ldr sp, [r0] \n"//init stack pointer reg on start_bootloader_addr
        "ldr r0, =0x4 \n"
        "ldr pc, [r0] \n"//init program counter reg on start_bootloader_addr+4 - jump to user code
    );


Прошивка перезапускается, но виснет в процессе загрузки. Если передёрнуть питания, то стартует нормально.
Сергей Борщ
QUOTE (Terminator @ Oct 22 2012, 08:24) *
Как правильно программно перезапустить lpc1768 ?
Использовать бит SYSRESETREQ регистра AIRCR или сброс по срабатыванию собаки путем ее запуска и записи в нее неправильного ключа.

QUOTE (Terminator @ Oct 22 2012, 08:24) *
Прошивка перезапускается, но виснет в процессе загрузки
Значит где-то в процессе инициализации предполагается начальное состояние какого-либо регистра, а после вашего "перезапуска" состояние этого регистра изменено. Например, в настройках PLL. А некоторые регистры вообще не реагируют на повторную запись, например - регистр управления собакой. Поэтому программно вернуть проц полностью в исходное состояние другими методами невозможно - только вызвав честный сброс одним из двух вышеупомянутых методов.
jcxz
Цитата(Terminator @ Oct 22 2012, 11:24) *
for (int i = 0; i < 35; i++)
{
NVIC_DisableIRQ((IRQn_Type) i);
NVIC_ClearPendingIRQ((IRQn_Type) i);
}

Ужас просто....
К чему приводит нежелание учить матчасть и упорное пользование всякими либами.... smile3046.gif
На вышеозначенном проце данные операции (и disable и clearpending) выполняются всего по две пары записей в регистры NVIC.
Terminator
Цитата(Сергей Борщ @ Oct 22 2012, 13:07) *
Использовать бит SYSRESETREQ регистра AIRCR или сброс по срабатыванию собаки путем ее запуска и записи в нее неправильного ключа.


Цитата
Note: support for
SYSRESETREQ is not included in LPC17xx devices.
This bit reads as 0.

Это из мануала к процу.

Цитата(Сергей Борщ @ Oct 22 2012, 13:07) *
Значит где-то в процессе инициализации предполагается начальное состояние какого-либо регистра, а после вашего "перезапуска" состояние этого регистра изменено. Например, в настройках PLL. А некоторые регистры вообще не реагируют на повторную запись, например - регистр управления собакой. Поэтому программно вернуть проц полностью в исходное состояние другими методами невозможно - только вызвав честный сброс одним из двух вышеупомянутых методов.

Вроде всё уже перерыл.
Буду копать дальше ...

P. S. однако SYSRESETREQ сработал.
stoker
я использую для сброса NVIC_SystemReset();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.