Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Порты ввода\вывода - ШИМ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
jjjjjjein
Подскажите, как настроить ножку Р1.2 так, чтобы выводить на неё ШИМ сигнал?
Код
  // Инициализация порта ввода/вывода №1
       P1SEL = 0x00;                         // Все выводы порта настроены как цыфровые линии      
       P1DIR = 0x04;                         // 3 вывод порта настроен как выход
E.V.G.
Переключение на любую альтернативную функцию любого вывода у любого порта выглядит так: PxSEL |= BITx.
До переключения на альтернативную функцию желательно установить необходимый для Вашей схемы потенциал на выходе порта.

Например, вывожу ноль:

// В самом начале программы
P1OUT &= BIT2; // пишем ноль в регистр для выдачи
P1DIR |= BIT2; // выводим его на вывод

// Там, где в программе нужно будет начать выводить ШИМ
P1SEL |= BIT2 // начался вывод ШИМ

//Там, где в программе нужно будет закончить выводить ШИМ
P1SEL &= ~BIT2 // закончился вывод ШИМ. выводится ноль

rezident
Цитата(E.V.G. @ Feb 14 2012, 10:07) *
Переключение на любую альтернативную функцию любого вывода у любого порта выглядит так: PxSEL |= BITx.
Это высказывание не является полностью корректным. Настройка альтернативной функции может потребовать изменения не только в регистрах модуля GPIO (PxSEL), но и в регистрах другого модуля, функцию которого вы собираетесь использовать. В конце datasheet конкретного МК имеются таблички для настроек основных и альтернативных функций пинов, где указаны имена регистров и битов, которые влияют на их функционирование.
Конкретно для использования выхода TA1 в качестве сигнала PWM таймера на выводе P1.2 в MSP430F135 требуется как минимум 4 команды, а для полной определенности следует проинициализировать все регистры таймера.
Код
//минимальный набор
P1SEL |= 1U<<2; //альтернативная функция пина
P1DIR |= 1U<<2; //выход TA1 от TimerA
TACCR1 = pwm_value;
TACCTL1 = OUTMOD_x; //выбор режима COMPARE и типа работы PWM, число x должно отличаться от 0, определяя тип PWM
//полный набор включает еще задание периода PWM и режим счета таймера - Up или Up/Down
TACCR0 = period_pwm; //значение периода PWM в режимах Up и Up/Down
TACCTL |= MC1; //запустить таймер в режиме Count Up

jjjjjjein, я бы не написал в вашем топике, если бы не резанула глаз неточность формулировки высказывания E.V.G. . Причиной моего нежелания писать в ваших топиках является тот факт, что вы упорно игнорируете все мои рекомендации
а) внимательно читать документацию, а именно: User's Guide и datasheet;
б) смотреть примеры, имеющиеся в поставке компиляторов (ссылка1, ссылка2, ссылка3) и на сайте производителя;
в) не плодить новые топики по каждому вопросу, а задавать их в одном топике, созданном вами ранее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.