реклама на сайте
подробности

 
 
> PWM на LPC2294, не получается запустить в режиме PWM
andrvisht
сообщение Aug 11 2009, 16:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



нужно менять значение ШИМ на лету, задачка вроде стандартная, и для ней предлагается решение в виде PWM.
тестовый код для инициализации канала 2
Код
    PINSEL0 = 0x00008000; // PWM 2
    PWMMCR = 0x00000081; // MR2 - Reset, MR0 - interrupt
    PWMPCR = 0x00000404; // PWMSEL 2 = 1, PWMENA 2 = 1
    PWMMR1 = 0x80;
    PWMMR2 = 0x100;
    PWMMR0 = 0x50;
    PWMLER = 0x07;
    PWMTCR = 0x09; // PWM enable, Count start

работает только в симуляторе, в железе никак.
если поставить PWMTCR = 0x01; - все вертиться, но это уже не PWM ...
проверил даташит на предмет хитростей - ничего не нашел.

в книге Тревора Мартина обнаружил подобный пример, но там есть регистр PWMEMR а в LPC2294 его нет cranky.gif
причем значимость данного регистра как раз то чего не хватает.
вырезку из книги прикрепляю (стр. 100)

Если кто сталкивался, поделитесь опытом как бороться crying.gif
Прикрепленные файлы
Прикрепленный файл  p0100_sel.bmp ( 957.09 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Aug 11 2009, 22:14
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



А я в своих проектах обычно всегда прерывание от ШИМа использовал. Так что нужно PWMMCR = 0x02, остальные биты прерываний по вкусу smile.gif

Цитата(andrvisht @ Aug 12 2009, 03:42) *
а насчет 03 я все таки не согласен, это 0 и 1 бит в 1, кусок даташита приложил.

Однако я писал про PWMMCR = 0x03, а не про PWMTCR, который на картинке.

И ещё, я перед любыми изменениями в управляющих регистрах (MRx и LER это не касается) делаю PWMTCR = 0x02.

Цитата(andrvisht @ Aug 12 2009, 03:42) *
вот как всегда пару слов и описание возможностей сброса любым шимом, но уже без сноски по поводу того что MR0 должен быть больше чем любой сбрасывающий ... причем только в режиме PWM, без теневых он то работает ...!

На самом деле записывать в "рабочие" MRx можно абсолютно любые значения, даже большие MR0. Никаких глюков не будет. Например чтобы полностью включить пин в "1" в соответствующий MRx можно записать число большее MR0. При равном же значении (я не проверял, но) возможно будет иголка на пине. Чтобы полностью обнулить пин нужно записать в MRx = 0.

Сообщение отредактировал GetSmart - Aug 11 2009, 22:01


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 15:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016