Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не каждый раз запускается PWM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
нуда
У MSP430F2234 на P4 выведен PWM от таймера B, так вот, при включении питания (даже через дебагер) не каждый раз PWM не каждый раз выводится наружу (подключен светодиод чечрез 10к и полевик) - то есть таймер B. счетчик считает, все настройки порта правильные - настроен на выход, селекшн выбран, OUTMOD_7, все нормально, но на выходе 0 (точнее типа IN), переустановка и обнуление этих битов во время работы в любой последовательности не помогает (если он не запустился при включении, если запустился, то выставление битов работает как надо), подскажите, что можно посмотреть еще, как исправить такой вот баг?
O.L.
Утверждение - "У MSP430F2234 на P4 выведен PWM от таймера B, так вот, при включении питания (даже через дебагер) не каждый раз PWM не каждый раз выводится наружу" вступает в противоречие с утверждением "таймер B. счетчик считает, все настройки порта правильные", это судя по симптомам.

Какую хотели получить частоту PWM?
Хорошо бы увидеть настройки таймера и всей причастной к Р4 периферии. Весь код сюда постить не нужно, только основное.
Есть ли работа с таймером В в прерывании? Если есть - неплохо бы увидеть код.
Кроме светодиода есть еще у Вас какой нибудь инструментарий, что бы определить работу PWM? Осциллограф например...
нуда
Цитата(O.L. @ Aug 23 2010, 14:26) *
Утверждение - "У MSP430F2234 на P4 выведен PWM от таймера B, так вот, при включении питания (даже через дебагер) не каждый раз PWM не каждый раз выводится наружу" вступает в противоречие с утверждением "таймер B. счетчик считает, все настройки порта правильные", это судя по симптомам.

Какую хотели получить частоту PWM?
Хорошо бы увидеть настройки таймера и всей причастной к Р4 периферии. Весь код сюда постить не нужно, только основное.
Есть ли работа с таймером В в прерывании? Если есть - неплохо бы увидеть код.
Кроме светодиода есть еще у Вас какой нибудь инструментарий, что бы определить работу PWM? Осциллограф например...



Load mov.b &CALBC1_1MHZ,&BCSCTL1 ; Set DCO to 1MHz
mov.b &CALDCO_1MHZ,&DCOCTL ;
;
.....................................................;
;

SetupTB mov.w #256-1,&TBCCR0 ;PWM period
mov.w #TBSSEL_2 + MC_1, &TBCTL ;SMCLK, up mode
mov.w #OUTMOD_7, &TBCCTL1 ; CCR1 reset/set
mov.w #0128, &TBCCR1 ; CCR1 PWM duty cycle
mov.w #OUTMOD_7, &TBCCTL2 ; CCR1 reset/set
SetupP4 mov.b #0bfh, &P4DIR ; P4.1 - P4.6 output
mov.b #000h, &P4OUT
mov.b #070h, &P4SEL ; P4.1 - P4.6 TBx options
mov.w #0128, &TBCCR2 ; CCR1 PWM duty cycle


По прерыванию P1 изменял &TBCCR1
Осцил есть, (да вот кста противоречий не вижу - работу таймера можно проследить в дебагере - по изменению состояния счетчика, а вот порт иногда при включении оказывается в положении IN - по непотреблении тока при замыкании на землю и питание
O.L.
Не нравится мне вот эта строчка
"
mov.b #070h, &P4SEL ; P4.1 - P4.6 TBx options
"
из условия что
mov.w #OUTMOD_7, &TBCCTL1 ; CCR1 reset/set"
...
mov.w #OUTMOD_7, &TBCCTL2 ; CCR1 reset/set
"
выходы TimerB ТВ0 ТВ1 и ТВ2 подключены к P4.0, P4.1 и P4.2.
и со значением, которое записывается в P4SEL --> 01110000 (#070h) это ни как не совпадает. Либо в регистрах TBCCTLх переключите выходы на нужную секцию, либо в P4SEL запишите правильное значение.

А вот почему, модуль то работает то нет - из приведенного листинга понять невозможно. Но скорее всего кристалл тут не при чем...
нуда
Цитата(O.L. @ Aug 23 2010, 15:39) *
"
выходы TimerB ТВ0 ТВ1 и ТВ2 подключены к P4.0, P4.1 и P4.2.
и со значением, которое записывается в P4SEL --> 01110000 (#070h) это ни как не совпадает. Либо в регистрах TBCCTLх переключите выходы на нужную секцию, либо в P4SEL запишите правильное значение.

А вот почему, модуль то работает то нет - из приведенного листинга понять невозможно. Но скорее всего кристалл тут не при чем...

Так ведь у MSP430F2234 ТВ0 ТВ1 и ТВ2 имеют выход и на P4.3 P4.4 и P4.5 соответственно?
rezident
Цитата(нуда @ Aug 23 2010, 18:51) *
Так ведь у MSP430F2234 ТВ0 ТВ1 и ТВ2 имеют выход и на P4.3 P4.4 и P4.5 соответственно?

Вообще-то они сдублированы. TB0 можно выводить на P4.0 и на P4.3, TB1 можно выводить на P4.1 и на P4.4, TB0 можно выводить на P4.2 и на P4.5.
нуда
Цитата(rezident @ Aug 23 2010, 16:44) *
Вообще-то они сдублированы. TB0 можно выводить на P4.0 и на P4.3, TB1 можно выводить на P4.1 и на P4.4, TB0 можно выводить на P4.2 и на P4.5.


Ну тогда у меня все правильно?
А какие соображения по возможным глюкам?
Может дело в порядке активации порта и таймера?
нуда
Ха, PWM после каждого ресета случайным образом работает/не работает, точнее не совсем случайным - если после предыдущего ресета он работал, то больше вероятность, что и в этот раз будет работать (для неработы - та же картина)
rezident
Чудес не бывает. Изучайте тщательнее User's Guide. Мнится мне, что вы при перезагрузке новых значений длительности/периода нарушаете последовательность их или у вас неправильно обработчик прерывания описан или какое-то другое "лишнее" необрабатываемое прерывание вылетает. Поставьте "заглушки" вида for(;;); на все неиспользуемые вектора прерываний.
нуда
Цитата(rezident @ Aug 23 2010, 18:35) *
Чудес не бывает. Изучайте тщательнее User's Guide. Мнится мне, что вы при перезагрузке новых значений длительности/периода нарушаете последовательность их или у вас неправильно обработчик прерывания описан или какое-то другое "лишнее" необрабатываемое прерывание вылетает. Поставьте "заглушки" вида for(;;); на все неиспользуемые вектора прерываний.

Косяк в другом оказался, я P4.6 использовал как вход 15 ADC10 и кроме всего прочего выставлял P4SEL 040h (привычка от PICа) и поскольку аналоговый сигнал около 0,2-0,5 Vcc то иногда это приводило "switch all TB0 to TB3 outputs to high impedance"
а я и Вы, таки, на это бит не обратили внимание
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.