Перейти к содержанию
    

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем controller_m30

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не. 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); // Сброс всех фаз
}

 

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

Изменено пользователем Syber

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Syber

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

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

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

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

 

P1OUT ^= 0x01; //

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

P1OUT ^= 0x01; //

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

#include <msp430G2211.h>

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

int timex=620;

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

Жму Restart Debugger

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...