Полная версия этой страницы:
не стартует программа
Естьп роект под IAR, нажимаю Download, отсоединяю JTAG, нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.
в чем может быть проблема?
Если проект заливался иаром, после отключения отладчика могут быть самые разные неприятности в работе. Это касается не только MSP, но и других микроконтроллеров. Для работы без отладчика лучше заливать проект чем-нибудь другим. Например FET-Pro430.
Цитата(Dubov @ Jul 1 2014, 02:32)
нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.
Как сконфигурированн в Вашей программе вывод RST/NMI и есть ли обработчик события по NMI если этот вывод настроен как вход немаскируемого прерывания? Если у Вас MSP430 конечно
Цитата(O.L. @ Jul 1 2014, 15:09)
Как сконфигурированн в Вашей программе вывод RST/NMI
Кажется, никак не настроен.
Shread
Jul 30 2014, 05:47
Вариантов несколько.
Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.
Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.
Не буду затевать новую тему, мой вопрос похожий.
Я из категории любителей, использующих MSP430G2 для "бытовых" целей. Естественно, что начинал со светодиодов. Сейчас сделал программку управления шаговым двигателем. Формирую временную диаграмму двигателя. За "один проход" программа должна сделать 1000 оборотов и останавиться. Предполагал, что после нажатия RESET программа будет повторно запускаться, делая 1000 оборотов. Но ничего не получается. Чтобы снова заработало, надо опять делать DEBUG и запуск.
Если подать питание на LaunchPad, то запуска программы не происходит, не помогает и кнопка сброса. Зато программы, в которых бесконечный цикл (зависание), те же светодиоды, при подаче питания начинают работать.
Можно попробовать сделать бесконечный цикл для ожидания нажатия кнопки, подключенной к одному из портов, но хотелось бы понять как использовать сброс. Почитал про работу сброса и возникла пара вопросов.
Надо ли программно конфигурировать вход RST, чтобы была реакция на нажатие кнопки сброса или это предопределенная установка.
Судя по описанию, после сброса управление передается по адресу, находящемуся в векторе 0FFFEh. Если я программно не определял этот вектор, куда передается управление? Передастся ли на начало моей программы?
controller_m30
Jan 19 2015, 12:47
1. Есть-ли резистор 47К на ноге Reset, на сделанной вами плате (кроме того что есть на Ланчпаде)? Если нет, то без Ланчпада из состояния сброса не выйдет.
2. Есть-ли вначале программы инициализация стека (регистр SP)? Если нет, то в случае вызова подпрограммы или другого обращения к стеку - программа "вылетит" в неизведанную даль. А простая линейная программа типа светодиодной мигалки будет работать.
3. Остановлен-ли вначале программы сторожевой таймер? При сбросе сторожевой таймер в MSP активируется, и чтоб он не пересбросил систему, его вначале программы нужно отключить.
4. Считайте прошивку контроллера с помощью Ланчпада и программы
FET-Pro430 Lite version на сайте
http://www.elprotronic.com/download.html и посмотрите что в векторе сброса, и куда записана основная программа.
5. В настройках проекта IAR - правильно-ли указана модель текущего процессора?
k155la3
Jan 19 2015, 14:47
Цитата(Shread @ Jul 30 2014, 08:47)
Вариантов несколько.
Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.
Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.
если плата самодельная - я бы проверил корректность подводки линий JTAG от разъема программатора.
Кабель и его длина тоже критичны.
До своей платы пока не дорос, пользуюсь Ланчпадом, никаких перепаек на ней не делал.
Инициализации стека в программе нет. Программа линейная, без подпрограмм. Разница между моей и мигалкой в том, что мигалка работает в бесконечном цикле, а моя делает один проход и мне хотелось бы чтобы она повторялась с начала по нажатию Reset. Но этого не происходит.
Сторожевой таймер в начале программы выключается.
Пункт 4 для меня сложноват, но попробую осмыслить.
Тип микросхемы в IAR указан правильно.
Самодельной платы, как уже сказал, пока нет.
Из всех советов пока делаю вывод: сосредоточиться и осмыслить происходящее при помощи п. 4 от controller_m30
Спасибо за советы, особенно в личке. Получил немало информации для чтения мануалов.
Не капризна ли Ланчпад к подключению осциллографа или мультиметра? Не грохну Ланчпад?
По поводу моей ситуации я понял, что надо сделать свою платочку с панелькой, куда переставлю микросхему. Посмотрю какая будет реакция на сброс. Насколько я понимаю, в обвязке должно быть питание 3,7 в, от ножки сброса 47 к на питание и кнопку об землю.
controller_m30
Jan 25 2015, 10:24
Не. 3,7в не надо! У MSP430 питание в пределах 1,8-3,6 в. Полно стабилизаторов на 3.3 В в продаже (L78L33, корпус TO-92 как у транзистора), или даже запитать от двух батареек 1,5В включенных последовательно.
Вы уточните, какой контроллер используете, на чем пишете программу (АSM, Cи), можно текст программы выложить - она скорее всего не секретная для простого кручения шагового двигателя.
У меня есть Ланчпад, и несколько свободных контроллеров: G2211, G2231, G2452. Если программа написана для одного из них, то могу залить в свой контроллер и проверить как у меня будет работать.
Использую 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
Jan 25 2015, 17:05
to Syber
"Меня терзают смутные сомненья".
А Вы абсолютно уверены, что программулина не работает ?
Этот вопрос мне навеял стиль формирования временных задержек.
Развеять это Вы можете промониторив точки прохода программы осцилографом, на любом пине порта
P1OUT ^= 0x01; //
По поводу текста, который дал. Я сейчас на суточном дежурстве и код дал по варианту, с которым когда-то работал. Завтра дома проверю на макете и скажу о работоспособности конкретного текса.
Работу программулины я оцениваю по тому, что происходит с шаговым двигателем – а он все-таки вертится!!!
По поводу формирования задержек. Это как раз тот момент, по которому не хочется показывать свой текст. Я не профессионал. Вполне возможно, что написано глупо, но работает. Так что не судите строго за уровень профессионализма.
Цитата
P1OUT ^= 0x01; //
Не понял что это? Если совет, то к каким строкам?
Да, на работе я вытащил вариант с ошибками.
Первая строка должна быть:
#include <msp430G2211.h>
Строка 18 (в такте 1) должна быть:
int timex=620;
В приведенном выше коде эти ошибки я исправил.
Жму Restart Debugger
Затем Go на появившейся панели отладки. ШД делает 10 оборотов и останавливается. Далее не получается повторно запустить. Не помогает RESET на ланчпаде, нет реакции на GO панели отладки IAR. Помогает только повторная Restart Debugger
controller_m30
Jan 26 2015, 16:49
Запустил программу - работает нормально. После выполнения программы, кнопкой сброса на Ланчпаде не перезапускается. А в IAR доступны: либо "Restart Debugger" в меню "Project", либо кнопка "Reset" на панели отладки.
В общем у меня такая же ситуация со сбросом в IAR, как и у вас. И данная программа здесь ни причём. Чтоб снова активировать кнопку сброса на плате, надо передёрнуть питание USB Ланчпада, и тогда сброс заработает как обычно и сколько угодно раз.
Я думаю это какая-то недоработка IAR-овцев, что после сеанса программирования\отладки с кнопки сброса не снимается блокировка.
Есть ещё программа
Lite FET-Pro430, при работе с которой Ланчпад не реагирует на кнопку сброса, если выполнить хотя бы одну операцию: чтение, запись, верификацию. Но в отличие от IAR здесь можно разблокировать "кнопочный" сброс с помощью имеющейся на панели виртуальной кнопки "Reset".
Также, аппаратный сброс разблокируется и при выходе из
Lite FET-Pro430. Т.е. можно сказать, что разработчики этой программы отнеслись более ответственно к удобству пользователей чем IAR-овцы, вот и всё
Может где-то в настройках IAR и есть пункт касающийся сброса, но я его не нашёл. Я думаю это недоработка разработчиков IAR.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.