Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не стартует программа
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Dubov
Естьп роект под IAR, нажимаю Download, отсоединяю JTAG, нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.

в чем может быть проблема?
den_po
Если проект заливался иаром, после отключения отладчика могут быть самые разные неприятности в работе. Это касается не только MSP, но и других микроконтроллеров. Для работы без отладчика лучше заливать проект чем-нибудь другим. Например FET-Pro430.
O.L.
Цитата(Dubov @ Jul 1 2014, 02:32) *
нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.


Как сконфигурированн в Вашей программе вывод RST/NMI и есть ли обработчик события по NMI если этот вывод настроен как вход немаскируемого прерывания? Если у Вас MSP430 конечно wink.gif
Dubov
Цитата(O.L. @ Jul 1 2014, 15:09) *
Как сконфигурированн в Вашей программе вывод RST/NMI

Кажется, никак не настроен.
Shread
Вариантов несколько.
Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.
Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.
Syber
Не буду затевать новую тему, мой вопрос похожий.

Я из категории любителей, использующих MSP430G2 для "бытовых" целей. Естественно, что начинал со светодиодов. Сейчас сделал программку управления шаговым двигателем. Формирую временную диаграмму двигателя. За "один проход" программа должна сделать 1000 оборотов и останавиться. Предполагал, что после нажатия RESET программа будет повторно запускаться, делая 1000 оборотов. Но ничего не получается. Чтобы снова заработало, надо опять делать DEBUG и запуск.
Если подать питание на LaunchPad, то запуска программы не происходит, не помогает и кнопка сброса. Зато программы, в которых бесконечный цикл (зависание), те же светодиоды, при подаче питания начинают работать.
Можно попробовать сделать бесконечный цикл для ожидания нажатия кнопки, подключенной к одному из портов, но хотелось бы понять как использовать сброс. Почитал про работу сброса и возникла пара вопросов.

Надо ли программно конфигурировать вход RST, чтобы была реакция на нажатие кнопки сброса или это предопределенная установка.

Судя по описанию, после сброса управление передается по адресу, находящемуся в векторе 0FFFEh. Если я программно не определял этот вектор, куда передается управление? Передастся ли на начало моей программы?
controller_m30
1. Есть-ли резистор 47К на ноге Reset, на сделанной вами плате (кроме того что есть на Ланчпаде)? Если нет, то без Ланчпада из состояния сброса не выйдет.
2. Есть-ли вначале программы инициализация стека (регистр SP)? Если нет, то в случае вызова подпрограммы или другого обращения к стеку - программа "вылетит" в неизведанную даль. А простая линейная программа типа светодиодной мигалки будет работать.
3. Остановлен-ли вначале программы сторожевой таймер? При сбросе сторожевой таймер в MSP активируется, и чтоб он не пересбросил систему, его вначале программы нужно отключить.
4. Считайте прошивку контроллера с помощью Ланчпада и программы FET-Pro430 Lite version на сайте http://www.elprotronic.com/download.html и посмотрите что в векторе сброса, и куда записана основная программа.
5. В настройках проекта IAR - правильно-ли указана модель текущего процессора?
k155la3
Цитата(Shread @ Jul 30 2014, 08:47) *
Вариантов несколько.
Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.
Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.


если плата самодельная - я бы проверил корректность подводки линий JTAG от разъема программатора.
Кабель и его длина тоже критичны.
Syber
До своей платы пока не дорос, пользуюсь Ланчпадом, никаких перепаек на ней не делал.
Инициализации стека в программе нет. Программа линейная, без подпрограмм. Разница между моей и мигалкой в том, что мигалка работает в бесконечном цикле, а моя делает один проход и мне хотелось бы чтобы она повторялась с начала по нажатию Reset. Но этого не происходит.
Сторожевой таймер в начале программы выключается.
Пункт 4 для меня сложноват, но попробую осмыслить.
Тип микросхемы в IAR указан правильно.
Самодельной платы, как уже сказал, пока нет.

Из всех советов пока делаю вывод: сосредоточиться и осмыслить происходящее при помощи п. 4 от controller_m30
Syber
Спасибо за советы, особенно в личке. Получил немало информации для чтения мануалов.
Не капризна ли Ланчпад к подключению осциллографа или мультиметра? Не грохну Ланчпад?
По поводу моей ситуации я понял, что надо сделать свою платочку с панелькой, куда переставлю микросхему. Посмотрю какая будет реакция на сброс. Насколько я понимаю, в обвязке должно быть питание 3,7 в, от ножки сброса 47 к на питание и кнопку об землю.
controller_m30
Не. 3,7в не надо! У MSP430 питание в пределах 1,8-3,6 в. Полно стабилизаторов на 3.3 В в продаже (L78L33, корпус TO-92 как у транзистора), или даже запитать от двух батареек 1,5В включенных последовательно.

Вы уточните, какой контроллер используете, на чем пишете программу (АSM, Cи), можно текст программы выложить - она скорее всего не секретная для простого кручения шагового двигателя.

У меня есть Ланчпад, и несколько свободных контроллеров: G2211, G2231, G2452. Если программа написана для одного из них, то могу залить в свой контроллер и проверить как у меня будет работать.
Syber
Использую G2211. Проверил на Ланчпаде мультиметром ножку 10 (RST) - нормально. При нажатии - 0 в, отпускаю - 3,5 в.
Програмка секретна в том смысле, что неловко показывать подобное, когда вокруг говорят о солидных проектах.
Использую IAR. Программка, с которой работаю - зациклена, но ниже привожу вариант на 10 оборотов без цикла.
Как я предполагаю: после запуска делает 10 оборотов и останавливается. Хотел бы увидеть, что программка перезапускается после нажатия кнопки сброс.
В окончательном варианте программка будет "висячей". Будет три кнопки: влево, стоп, вправо. И в этом варианте будет постоянное ожидание нажатия кнопки.

Код
#include <msp430G2211.h>
void main(void)
//Вариант для двухобмоточного ШД со средней точкой.

{
WDTCTL = WDTPW + WDTHOLD;  //выключаем сторожевой таймер
P1DIR |= (BIT0 + BIT1 + BIT2+BIT3); // Установка портов 0-:-3 на вывод
P1OUT &= ~(BIT0 + BIT1 + BIT2+BIT3); // Сброс всех фаз

int step = 0;
while (step < 120)// 1 оборот - 12 циклов
{
//Такт 1
P1OUT |= BIT0;          // включить
P1OUT &=~BIT1;      // выключить
P1OUT &=~BIT2;      // выключить
P1OUT |= BIT3;          // включить
int timex=620;
while (timex != 0) //пока не уменьшили до нуля
{
timex--;  //скорость
}

//Такт 2
P1OUT |= BIT0;          // включить
P1OUT &=~BIT1;      // выключить
P1OUT |= BIT2;          // включить
P1OUT &=~BIT3;      // выключить
timex=620;
while (timex != 0) //пока не уменьшили до нуля
{
timex--;  //скорость
}

//Такт 3
P1OUT &=~BIT0;      // выключить
P1OUT |= BIT1;          // включить
P1OUT |= BIT2;          // включить
P1OUT &=~BIT3;      // выключить
timex=620;
while (timex != 0) //пока не уменьшили до нуля
{
timex--;  //скорость
}

//Такт 3
P1OUT &=~BIT0;      // выключить
P1OUT |= BIT1;          // включить
P1OUT &=~BIT2;      // выключить
P1OUT |= BIT3;          // включить
timex=620;
while (timex != 0) //пока не уменьшили до нуля
{
timex--;  //скорость
}
step ++;
}
P1OUT &= ~(BIT0 + BIT1 + BIT2+BIT3); // Сброс всех фаз
}



Странное форматирование кода. Привести к формату текста сообщения не получилось.
k155la3
to Syber
"Меня терзают смутные сомненья".
А Вы абсолютно уверены, что программулина не работает ?
Этот вопрос мне навеял стиль формирования временных задержек.
Развеять это Вы можете промониторив точки прохода программы осцилографом, на любом пине порта

P1OUT ^= 0x01; //
Syber
По поводу текста, который дал. Я сейчас на суточном дежурстве и код дал по варианту, с которым когда-то работал. Завтра дома проверю на макете и скажу о работоспособности конкретного текса.
Работу программулины я оцениваю по тому, что происходит с шаговым двигателем – а он все-таки вертится!!!
По поводу формирования задержек. Это как раз тот момент, по которому не хочется показывать свой текст. Я не профессионал. Вполне возможно, что написано глупо, но работает. Так что не судите строго за уровень профессионализма.
Цитата
P1OUT ^= 0x01; //

Не понял что это? Если совет, то к каким строкам?
Syber
Да, на работе я вытащил вариант с ошибками.
Первая строка должна быть:
#include <msp430G2211.h>
Строка 18 (в такте 1) должна быть:
int timex=620;
В приведенном выше коде эти ошибки я исправил.
Жму Restart Debugger
Затем Go на появившейся панели отладки. ШД делает 10 оборотов и останавливается. Далее не получается повторно запустить. Не помогает RESET на ланчпаде, нет реакции на GO панели отладки IAR. Помогает только повторная Restart Debugger
controller_m30
Запустил программу - работает нормально. После выполнения программы, кнопкой сброса на Ланчпаде не перезапускается. А в IAR доступны: либо "Restart Debugger" в меню "Project", либо кнопка "Reset" на панели отладки.

В общем у меня такая же ситуация со сбросом в IAR, как и у вас. И данная программа здесь ни причём. Чтоб снова активировать кнопку сброса на плате, надо передёрнуть питание USB Ланчпада, и тогда сброс заработает как обычно и сколько угодно раз.
Я думаю это какая-то недоработка IAR-овцев, что после сеанса программирования\отладки с кнопки сброса не снимается блокировка.

Есть ещё программа Lite FET-Pro430, при работе с которой Ланчпад не реагирует на кнопку сброса, если выполнить хотя бы одну операцию: чтение, запись, верификацию. Но в отличие от IAR здесь можно разблокировать "кнопочный" сброс с помощью имеющейся на панели виртуальной кнопки "Reset".
Также, аппаратный сброс разблокируется и при выходе из Lite FET-Pro430. Т.е. можно сказать, что разработчики этой программы отнеслись более ответственно к удобству пользователей чем IAR-овцы, вот и всё rolleyes.gif

Может где-то в настройках IAR и есть пункт касающийся сброса, но я его не нашёл. Я думаю это недоработка разработчиков IAR.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.