Непонятки с launchpad?

Начал освоение launchpad-a. Пытался сделать програмку с ШИМ для светодиода, запускаемого с кнопки. Столкнулся с проблемой, что как-то неправильно плата реагирует на кнопку s2, подключенную к ноге p1.3

простейший код
#include "io430.h"

void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT6; //P1.6 назначаем выходом, т.к. там светодиод
P1DIR &= ~BIT3; //P1.3 назначаем входом, т.к. там кнопка
P1REN |= BIT3; //подключаем внутр. резистор к P1.3 и к +
//Теперь на P1.3 высокий уровень всегда, пока кнопка НЕ нажата
while(1)
{
//Если кнопка нажата на P1.3 будет логич. 0
if((P1IN & BIT3) == 0)
P1OUT |= BIT6; //Включаем светодиод
else
P1OUT &= ~BIT6; //Отпустили кнопку - выкл. светодиод
}
}



Этот код не работает правильно. После ресета светодиод просто горит и на кнопку не реагирует.


Вместо io430.h пробовал и io430g2553.h и msp430g2553.h

при дебаге значение P1IN остается неизменным, вне зависимости от того, нажата кнопка s2 или нет.


З.ы. Абсолютно непонятным образом плата, просто полежавшая отключенной от USB, а затем вновь подключенная, стала работать как надо. Прошита другая программа (с ШИМ) — снова не работает. Прошита опять вышеприведенная — и опять не работает, после 5-6 отключений-подключений от USB — начинает работать. Это выше моего понимания))
  • Вопрос задан
  • 5070 просмотров
Пригласить эксперта
Ответы на вопрос 4
@constv
в примерах для MSP430 для подключение внутренних резисторов такая последовательность
// Configure Switch on P1.2
P1REN |= BIT2; // P1.2 Enable Pullup/Pulldown
P1OUT = BIT2; // P1.2 pullup

Ответ написан
Комментировать
@RiffKazan Автор вопроса
Хммм… уж не знаю, как это объяснить, но проблема решилась добавлением P1OUT |= BIT3; перед P1REN |= BIT3;
Ответ написан
Комментировать
некоторые биты при подаче питания не принимают фиксированные значения. их нужно принудительно инициализировать. На pic-контроллерах, например, есть отдельная таблица, показывающая какие биты при сбросе или подаче питания принимают какие значения. некоторые принудительно не меняются. думаю у msp430 должна быть подобная таблица. надо смотреть туда.
Ответ написан
Комментировать
@Barcooler
В зависимости от версии Launchpad'а разводка кнопок разная, в первых версиях (до 1,4 вроде) спользовались подтягивающие резисторы, в последних их из схемы исключили и подтяжку надо было делать программно.
Это кстати видно из примеров к разным версиям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы