Двухканальный ШИМ без таймеров.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Здравствуйте. Возникла задача создать двухканальный ШИМ с разными периодами каналов и меняющейся скважностью. Возможно ли это сделать на МК без таймеров? Пока интересует именно без таймеров
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Двухканальный ШИМ без таймеров.

Сообщение КРАМ »

Еще бы желательно о требованиях к ШИМу рассказать: частота, разрядность...
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Период первого канала 1с, второго - .5с. Максимальное знкчение скважности первого канала .7, второго - .8. Минимальное знкчение скважности первого - .2, второго - .3. Еще есть начальное смещение второго канала относительно первогг на .25с
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Двухканальный ШИМ без таймеров.

Сообщение uk8amk »

Для генерации временных интервалов вместо таймера можно использовать свободные интерфейсы SPI, UART, I2C. По сути теже самые счётчики только менее удобный вариант. Раньше, когда и того не было, считали такты процессора.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Да, я про это знаю. Тут дело в другом. Можно ли сделать это на тупых циклах? Подозреваю, что нет.
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Двухканальный ШИМ без таймеров.

Сообщение hybroid »

Что мешает на циклах? Сиди считай, в нужный момент дрыгай ногами. Нужно знать частоту МК и команды с их временем исполнения. Эта тайна раскрыта в даташите .
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Двухканальный ШИМ без таймеров.

Сообщение КРАМ »

FireProoF писал(а):Да, я про это знаю. Тут дело в другом. Можно ли сделать это на тупых циклах? Подозреваю, что нет.
Осталось Вам раскрыть секрет отказа от таймеров.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Двухканальный ШИМ без таймеров.

Сообщение hybroid »

:)))
Судя по ТЗ - что-то связанное с получением образования.. Прям как из методы переписано.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Двухканальный ШИМ без таймеров.

Сообщение uk8amk »

Если не ошибаюсь, то этим во всю пользовались во времена спектрумов и прочих самодельных компьютеров даже для получения звуков и музыки.
Целесообразность действительно под вопросом. Даже примитивные PIC10F имеют хотябы 1 таймер.
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Да, действительно пора раскрыть карты)
По лабе надо на aduc812 смоделировать двухканальный ШИМ с параметрами (см. выше). Предварительно его надо смоделировать на ПК без применения многопоточности (вот отсюда начались проблемы), а потом уже на МК. Причем про таймеры в методичке ничего не сказано. Я, конечно аам понимаю, что без них никак, но вдруг я чего-то тут не знаю)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Двухканальный ШИМ без таймеров.

Сообщение BOB51 »

С такими параметрами (канала 1с, второго - .5с -черепахоходный) никаких проблем хош энное число "ШИМОВ" программно натворить.
8)
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Обещали мне уже возможность поднятия такого ШИМ, но этим то всё и ограничивалось.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Двухканальный ШИМ без таймеров.

Сообщение BOB51 »

А на то и студентам задачки дают, чтоб они СВОИМИ МОЗГАМИ ШЕВЕЛИЛИ. :)))
Сделай на таймере опроный интервал меньше наименьшего требуемого раза в два и по прерыванию от этого маркера крути программные циклы по каждому из каналов ШИМ.
8)
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Двухканальный ШИМ без таймеров.

Сообщение Mishany »

Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Еще раз призываю вновь отвечающих прочитать сообщения в теме.
С таймером и так всё понятно. Можно без него?
Нужен ДВУХканальный ШИМ.
Аватара пользователя
Guaho_150
Открыл глаза
Сообщения: 59
Зарегистрирован: Чт сен 12, 2013 17:10:37

Re: Двухканальный ШИМ без таймеров.

Сообщение Guaho_150 »

Можно и на циклах сделать. В цикле 1-го канала проверяем состояние второго канала: не обнулился? - ничего не делаем; обнулился? - выполняем соответствующие действия (меняем состояние пинов порта для формирования ШИМ во 2-м канале). Аналогично - для цикла 2-го канала, там проверяем состояние 1-го канала. Для контроля состояния каналов лучше всего использовать флаги, например: 1 = счётчик обнулился, 0 = пока ещё не обнулился. Установка флагов состояния происходит в телах циклов, как только цикл закончил счёт. Установленный флаг нужно сбрасывать только после выполнения действий по формированию сигнала ШИМ.
Таким образом, с помощью подобного механизма флагов, мы можем отслеживать состояние другого канала и выполнять действия по формированию сигнала в этом другом канале.
Менять скважность можно кнопками, повешенными на RB7...RB4. В прерывании по изменении состояния этих линий можно изменять числовые значения длительности импульсов ШИМ (разумеется, не забывая про подавление дребезга контактов кнопок). А в телах вышеупомянутых циклов мы используем эти - изменяемые в прерываниях - значения.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Двухканальный ШИМ без таймеров.

Сообщение Аlex »

FireProoF писал(а):Можно без него?
Вам же уже сказали - можно. Даже описали как. В чём проблема ?
FireProoF писал(а):и меняющейся скважностью
А менять то как собрались ?
И что будет, если Вы попытаетесь ещё что-нибудь добавить в программу ? У Вас же все времена, периоды, скважности, ... уплывут хз куда.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Двухканальный ШИМ без таймеров.

Сообщение pokk »

"...Предварительно его надо смоделировать на ПК без применения многопоточности (вот отсюда начались проблемы), а потом уже на МК..."
А если не использовать сами прерывания от таймера а в главном цикле просто проверять флаг таймера, то это вроде не должно относится к многопоточности? Ну а дальше как рассказывал BOB51.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25223
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Двухканальный ШИМ без таймеров.

Сообщение КРАМ »

FireProoF писал(а): Нужен ДВУХканальный ШИМ.
Ну и что?
ШИМ очень медленный, поэтому не составит труда найти наименьшее общее кратное (НОК) к ОБОИМ тактовым частотам ШИМов.
И с этим НОК построить цикл формирования ДВУХ ШИМов одновременно.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Двухканальный ШИМ без таймеров.

Сообщение alex_ »

FireProoF, лови:

Код: Выделить всё

int i1,i2,s1,s2;         // s-скважность от 0 до k
const int k1=20, k2=30;  // периоды каналов

void main()
{
  i1=0;
  i2=0;
  PORTA.B0=0;
  PORTA.B1=0;
  
  while(1)
  {
    if(i1<k1) i1++;
    else      i1=0;
   
    if(i1<s1)PORTA.B0=0;
    else     PORTA.B0=1;
   
    // тоже самое для второго
    if(i2<k2) i2++;
    else      i2=0;

    if(i2<s2)PORTA.B1=0;
    else     PORTA.B1=1;
  }
}
PS: таким макаром можно хоть 10 шим каналов наворотить, только один минус чем больше каналов тем меньше частота шимов получается,
да кстати с тебя пиво :beer:
Ответить

Вернуться в «Разные вопросы по МК»