|
не стартует программа, после заливки в чип |
|
|
|
Jul 1 2014, 11:09
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890

|
Цитата(Dubov @ Jul 1 2014, 02:32)  нажимаю кнопку аппаратного сброса - программа работает. После повторного нажатия кнопки программа не стартует. Как сконфигурированн в Вашей программе вывод RST/NMI и есть ли обработчик события по NMI если этот вывод настроен как вход немаскируемого прерывания? Если у Вас MSP430 конечно
|
|
|
|
|
Jul 4 2014, 06:31
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Цитата(O.L. @ Jul 1 2014, 15:09)  Как сконфигурированн в Вашей программе вывод RST/NMI Кажется, никак не настроен.
|
|
|
|
|
Jan 17 2015, 06:37
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

|
Не буду затевать новую тему, мой вопрос похожий.
Я из категории любителей, использующих MSP430G2 для "бытовых" целей. Естественно, что начинал со светодиодов. Сейчас сделал программку управления шаговым двигателем. Формирую временную диаграмму двигателя. За "один проход" программа должна сделать 1000 оборотов и останавиться. Предполагал, что после нажатия RESET программа будет повторно запускаться, делая 1000 оборотов. Но ничего не получается. Чтобы снова заработало, надо опять делать DEBUG и запуск. Если подать питание на LaunchPad, то запуска программы не происходит, не помогает и кнопка сброса. Зато программы, в которых бесконечный цикл (зависание), те же светодиоды, при подаче питания начинают работать. Можно попробовать сделать бесконечный цикл для ожидания нажатия кнопки, подключенной к одному из портов, но хотелось бы понять как использовать сброс. Почитал про работу сброса и возникла пара вопросов.
Надо ли программно конфигурировать вход RST, чтобы была реакция на нажатие кнопки сброса или это предопределенная установка.
Судя по описанию, после сброса управление передается по адресу, находящемуся в векторе 0FFFEh. Если я программно не определял этот вектор, куда передается управление? Передастся ли на начало моей программы?
|
|
|
|
|
Jan 19 2015, 12:47
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309

|
1. Есть-ли резистор 47К на ноге Reset, на сделанной вами плате (кроме того что есть на Ланчпаде)? Если нет, то без Ланчпада из состояния сброса не выйдет. 2. Есть-ли вначале программы инициализация стека (регистр SP)? Если нет, то в случае вызова подпрограммы или другого обращения к стеку - программа "вылетит" в неизведанную даль. А простая линейная программа типа светодиодной мигалки будет работать. 3. Остановлен-ли вначале программы сторожевой таймер? При сбросе сторожевой таймер в MSP активируется, и чтоб он не пересбросил систему, его вначале программы нужно отключить. 4. Считайте прошивку контроллера с помощью Ланчпада и программы FET-Pro430 Lite version на сайте http://www.elprotronic.com/download.html и посмотрите что в векторе сброса, и куда записана основная программа. 5. В настройках проекта IAR - правильно-ли указана модель текущего процессора?
Сообщение отредактировал controller_m30 - Jan 19 2015, 12:53
|
|
|
|
|
Jan 19 2015, 15:04
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

|
До своей платы пока не дорос, пользуюсь Ланчпадом, никаких перепаек на ней не делал. Инициализации стека в программе нет. Программа линейная, без подпрограмм. Разница между моей и мигалкой в том, что мигалка работает в бесконечном цикле, а моя делает один проход и мне хотелось бы чтобы она повторялась с начала по нажатию Reset. Но этого не происходит. Сторожевой таймер в начале программы выключается. Пункт 4 для меня сложноват, но попробую осмыслить. Тип микросхемы в IAR указан правильно. Самодельной платы, как уже сказал, пока нет.
Из всех советов пока делаю вывод: сосредоточиться и осмыслить происходящее при помощи п. 4 от controller_m30
|
|
|
|
|
Jan 21 2015, 08:43
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

|
Спасибо за советы, особенно в личке. Получил немало информации для чтения мануалов. Не капризна ли Ланчпад к подключению осциллографа или мультиметра? Не грохну Ланчпад? По поводу моей ситуации я понял, что надо сделать свою платочку с панелькой, куда переставлю микросхему. Посмотрю какая будет реакция на сброс. Насколько я понимаю, в обвязке должно быть питание 3,7 в, от ножки сброса 47 к на питание и кнопку об землю.
|
|
|
|
|
Jan 25 2015, 10:24
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309

|
Не. 3,7в не надо! У MSP430 питание в пределах 1,8-3,6 в. Полно стабилизаторов на 3.3 В в продаже (L78L33, корпус TO-92 как у транзистора), или даже запитать от двух батареек 1,5В включенных последовательно.
Вы уточните, какой контроллер используете, на чем пишете программу (АSM, Cи), можно текст программы выложить - она скорее всего не секретная для простого кручения шагового двигателя.
У меня есть Ланчпад, и несколько свободных контроллеров: G2211, G2231, G2452. Если программа написана для одного из них, то могу залить в свой контроллер и проверить как у меня будет работать.
|
|
|
|
|
Jan 25 2015, 14:36
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

|
Использую 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 - Jan 26 2015, 05:44
|
|
|
|
|
Jan 25 2015, 20:47
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

|
По поводу текста, который дал. Я сейчас на суточном дежурстве и код дал по варианту, с которым когда-то работал. Завтра дома проверю на макете и скажу о работоспособности конкретного текса. Работу программулины я оцениваю по тому, что происходит с шаговым двигателем – а он все-таки вертится!!! По поводу формирования задержек. Это как раз тот момент, по которому не хочется показывать свой текст. Я не профессионал. Вполне возможно, что написано глупо, но работает. Так что не судите строго за уровень профессионализма. Цитата P1OUT ^= 0x01; // Не понял что это? Если совет, то к каким строкам?
|
|
|
|
|
Jan 26 2015, 05:46
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 25-11-11
Пользователь №: 68 522

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