Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Не настаиваю, но. Алгоритмус например для 8 каналов такой. Таймер тикает. В прерывании >>
Отправлено
VasilyS
16 июня 2008 г. 19:21
В ответ на:
А что бы не использовать ШИМ на сумматорах? Никаких сравнений чисел, только...{+}
отправлено <font color=gray>VasilyS</font> 16 июня 2008 г. 18:38
к аккумуляторам прибавляю граничные значения(waterlevel) ШИМов.
Переполнение разрядной сетки в результате суммирования (здесь - 12 разрядов) - выводим в ШИМ единичьку, иначе - нолик. Плюс такого метода - частота ШИМ выше, фильтровать ее проще.
// Глобальные переменные.
u16 Summ_0,...Summ7; // аккумуляторы
u16 Duty_PWM_0...Duty_PWM_7; // Waterlevel для каждого канала PWM
u8 out;
//// Timer interrupt handler ///////
1. обнуляю переменную out (ее потом выведу в порт).
2. Для всех каналов последовательно:
Summ_0 += Duty_PWM_0;
if( Summ_0 & 0x1000 )
{
out = 1; // channel_0 на PORTB.0
Summ_0 &= 0x0fff;
}
Summ_1 += Duty_PWM_1;
if( Summ_1 & 0x1000 ) &= 0x0fff;
}
{
out += 2; // channel_1 на PORTB.1
Summ_1 &= 0x0fff;
}
.......
Summ_7 += Duty_PWM_7;
if( Summ_7 & 0x1000 )
{
out += 128; // channel_7 на PORTB.7
Summ_7 &= 0x0fff;
}
3. Вывод на порт
PORTB = out;
Составить ответ
|
Вернуться на конференцию
Ответы
Cкрибт собако код изуродовал. Воттак: >>
—
VasilyS
(16.06.2008 23:07:31
80.92.96.25
, 452 байт)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 2 вдвое:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru