Jump to content

    

не стартует программа

Естьп роект под IAR, нажимаю Download, отсоединяю JTAG, нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.

 

в чем может быть проблема?

Share this post


Link to post
Share on other sites

Если проект заливался иаром, после отключения отладчика могут быть самые разные неприятности в работе. Это касается не только MSP, но и других микроконтроллеров. Для работы без отладчика лучше заливать проект чем-нибудь другим. Например FET-Pro430.

Share this post


Link to post
Share on other sites
нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.

 

Как сконфигурированн в Вашей программе вывод RST/NMI и есть ли обработчик события по NMI если этот вывод настроен как вход немаскируемого прерывания? Если у Вас MSP430 конечно ;)

 

Share this post


Link to post
Share on other sites
Как сконфигурированн в Вашей программе вывод RST/NMI

Кажется, никак не настроен.

Share this post


Link to post
Share on other sites

Вариантов несколько.

Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.

Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.

Share this post


Link to post
Share on other sites

Не буду затевать новую тему, мой вопрос похожий.

 

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

Если подать питание на LaunchPad, то запуска программы не происходит, не помогает и кнопка сброса. Зато программы, в которых бесконечный цикл (зависание), те же светодиоды, при подаче питания начинают работать.

Можно попробовать сделать бесконечный цикл для ожидания нажатия кнопки, подключенной к одному из портов, но хотелось бы понять как использовать сброс. Почитал про работу сброса и возникла пара вопросов.

 

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

 

Судя по описанию, после сброса управление передается по адресу, находящемуся в векторе 0FFFEh. Если я программно не определял этот вектор, куда передается управление? Передастся ли на начало моей программы?

Share this post


Link to post
Share on other sites

1. Есть-ли резистор 47К на ноге Reset, на сделанной вами плате (кроме того что есть на Ланчпаде)? Если нет, то без Ланчпада из состояния сброса не выйдет.

2. Есть-ли вначале программы инициализация стека (регистр SP)? Если нет, то в случае вызова подпрограммы или другого обращения к стеку - программа "вылетит" в неизведанную даль. А простая линейная программа типа светодиодной мигалки будет работать.

3. Остановлен-ли вначале программы сторожевой таймер? При сбросе сторожевой таймер в MSP активируется, и чтоб он не пересбросил систему, его вначале программы нужно отключить.

4. Считайте прошивку контроллера с помощью Ланчпада и программы FET-Pro430 Lite version на сайте http://www.elprotronic.com/download.html и посмотрите что в векторе сброса, и куда записана основная программа.

5. В настройках проекта IAR - правильно-ли указана модель текущего процессора?

Edited by controller_m30

Share this post


Link to post
Share on other sites
Вариантов несколько.

Проверьте напряжение на линии после того, как кнопку отпустили. Думаю по какой-то причине оно остается недостаточным, чтоб процессор вышел из сброса.

Еще может быть - кривая первичная инициализация. Была похожая ситуация когда-то очень давно, когда некоторые регистры модуля тактирования были недоинициализированы. В итоге при первичном старте - работало, после сброса - переставало.

 

если плата самодельная - я бы проверил корректность подводки линий JTAG от разъема программатора.

Кабель и его длина тоже критичны.

Share this post


Link to post
Share on other sites

До своей платы пока не дорос, пользуюсь Ланчпадом, никаких перепаек на ней не делал.

Инициализации стека в программе нет. Программа линейная, без подпрограмм. Разница между моей и мигалкой в том, что мигалка работает в бесконечном цикле, а моя делает один проход и мне хотелось бы чтобы она повторялась с начала по нажатию Reset. Но этого не происходит.

Сторожевой таймер в начале программы выключается.

Пункт 4 для меня сложноват, но попробую осмыслить.

Тип микросхемы в IAR указан правильно.

Самодельной платы, как уже сказал, пока нет.

 

Из всех советов пока делаю вывод: сосредоточиться и осмыслить происходящее при помощи п. 4 от controller_m30

 

Share this post


Link to post
Share on other sites

Спасибо за советы, особенно в личке. Получил немало информации для чтения мануалов.

Не капризна ли Ланчпад к подключению осциллографа или мультиметра? Не грохну Ланчпад?

По поводу моей ситуации я понял, что надо сделать свою платочку с панелькой, куда переставлю микросхему. Посмотрю какая будет реакция на сброс. Насколько я понимаю, в обвязке должно быть питание 3,7 в, от ножки сброса 47 к на питание и кнопку об землю.

 

Share this post


Link to post
Share on other sites

Не. 3,7в не надо! У MSP430 питание в пределах 1,8-3,6 в. Полно стабилизаторов на 3.3 В в продаже (L78L33, корпус TO-92 как у транзистора), или даже запитать от двух батареек 1,5В включенных последовательно.

 

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

 

У меня есть Ланчпад, и несколько свободных контроллеров: G2211, G2231, G2452. Если программа написана для одного из них, то могу залить в свой контроллер и проверить как у меня будет работать.

Share this post


Link to post
Share on other sites

Использую 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); // Сброс всех фаз
}

 

Странное форматирование кода. Привести к формату текста сообщения не получилось.

Edited by Syber

Share this post


Link to post
Share on other sites

to Syber

"Меня терзают смутные сомненья".

А Вы абсолютно уверены, что программулина не работает ?

Этот вопрос мне навеял стиль формирования временных задержек.

Развеять это Вы можете промониторив точки прохода программы осцилографом, на любом пине порта

 

P1OUT ^= 0x01; //

 

Share this post


Link to post
Share on other sites

По поводу текста, который дал. Я сейчас на суточном дежурстве и код дал по варианту, с которым когда-то работал. Завтра дома проверю на макете и скажу о работоспособности конкретного текса.

Работу программулины я оцениваю по тому, что происходит с шаговым двигателем – а он все-таки вертится!!!

По поводу формирования задержек. Это как раз тот момент, по которому не хочется показывать свой текст. Я не профессионал. Вполне возможно, что написано глупо, но работает. Так что не судите строго за уровень профессионализма.

P1OUT ^= 0x01; //

Не понял что это? Если совет, то к каким строкам?

 

Share this post


Link to post
Share on other sites

Да, на работе я вытащил вариант с ошибками.

Первая строка должна быть:

#include <msp430G2211.h>

Строка 18 (в такте 1) должна быть:

int timex=620;

В приведенном выше коде эти ошибки я исправил.

Жму Restart Debugger

Затем Go на появившейся панели отладки. ШД делает 10 оборотов и останавливается. Далее не получается повторно запустить. Не помогает RESET на ланчпаде, нет реакции на GO панели отладки IAR. Помогает только повторная Restart Debugger

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this