Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; 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;


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сколько миллиампер в одном ампере ?:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru