Двухканальный ШИМ без таймеров.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Двухканальный ШИМ без таймеров.
Здравствуйте. Возникла задача создать двухканальный ШИМ с разными периодами каналов и меняющейся скважностью. Возможно ли это сделать на МК без таймеров? Пока интересует именно без таймеров
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25223
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Двухканальный ШИМ без таймеров.
Еще бы желательно о требованиях к ШИМу рассказать: частота, разрядность...
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Период первого канала 1с, второго - .5с. Максимальное знкчение скважности первого канала .7, второго - .8. Минимальное знкчение скважности первого - .2, второго - .3. Еще есть начальное смещение второго канала относительно первогг на .25с
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Двухканальный ШИМ без таймеров.
Для генерации временных интервалов вместо таймера можно использовать свободные интерфейсы SPI, UART, I2C. По сути теже самые счётчики только менее удобный вариант. Раньше, когда и того не было, считали такты процессора.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Да, я про это знаю. Тут дело в другом. Можно ли сделать это на тупых циклах? Подозреваю, что нет.
- Реклама
Re: Двухканальный ШИМ без таймеров.
Что мешает на циклах? Сиди считай, в нужный момент дрыгай ногами. Нужно знать частоту МК и команды с их временем исполнения. Эта тайна раскрыта в даташите .
- КРАМ
- Друг Кота
- Сообщения: 25223
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Двухканальный ШИМ без таймеров.
Осталось Вам раскрыть секрет отказа от таймеров.FireProoF писал(а):Да, я про это знаю. Тут дело в другом. Можно ли сделать это на тупых циклах? Подозреваю, что нет.
Re: Двухканальный ШИМ без таймеров.
Судя по ТЗ - что-то связанное с получением образования.. Прям как из методы переписано.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Двухканальный ШИМ без таймеров.
Если не ошибаюсь, то этим во всю пользовались во времена спектрумов и прочих самодельных компьютеров даже для получения звуков и музыки.
Целесообразность действительно под вопросом. Даже примитивные PIC10F имеют хотябы 1 таймер.
Целесообразность действительно под вопросом. Даже примитивные PIC10F имеют хотябы 1 таймер.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Да, действительно пора раскрыть карты)
По лабе надо на aduc812 смоделировать двухканальный ШИМ с параметрами (см. выше). Предварительно его надо смоделировать на ПК без применения многопоточности (вот отсюда начались проблемы), а потом уже на МК. Причем про таймеры в методичке ничего не сказано. Я, конечно аам понимаю, что без них никак, но вдруг я чего-то тут не знаю)
По лабе надо на aduc812 смоделировать двухканальный ШИМ с параметрами (см. выше). Предварительно его надо смоделировать на ПК без применения многопоточности (вот отсюда начались проблемы), а потом уже на МК. Причем про таймеры в методичке ничего не сказано. Я, конечно аам понимаю, что без них никак, но вдруг я чего-то тут не знаю)
Re: Двухканальный ШИМ без таймеров.
С такими параметрами (канала 1с, второго - .5с -черепахоходный) никаких проблем хош энное число "ШИМОВ" программно натворить.

- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Обещали мне уже возможность поднятия такого ШИМ, но этим то всё и ограничивалось.
Re: Двухканальный ШИМ без таймеров.
А на то и студентам задачки дают, чтоб они СВОИМИ МОЗГАМИ ШЕВЕЛИЛИ.
Сделай на таймере опроный интервал меньше наименьшего требуемого раза в два и по прерыванию от этого маркера крути программные циклы по каждому из каналов ШИМ.

Сделай на таймере опроный интервал меньше наименьшего требуемого раза в два и по прерыванию от этого маркера крути программные циклы по каждому из каналов ШИМ.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Еще раз призываю вновь отвечающих прочитать сообщения в теме.
С таймером и так всё понятно. Можно без него?
Нужен ДВУХканальный ШИМ.
С таймером и так всё понятно. Можно без него?
Нужен ДВУХканальный ШИМ.
Re: Двухканальный ШИМ без таймеров.
Можно и на циклах сделать. В цикле 1-го канала проверяем состояние второго канала: не обнулился? - ничего не делаем; обнулился? - выполняем соответствующие действия (меняем состояние пинов порта для формирования ШИМ во 2-м канале). Аналогично - для цикла 2-го канала, там проверяем состояние 1-го канала. Для контроля состояния каналов лучше всего использовать флаги, например: 1 = счётчик обнулился, 0 = пока ещё не обнулился. Установка флагов состояния происходит в телах циклов, как только цикл закончил счёт. Установленный флаг нужно сбрасывать только после выполнения действий по формированию сигнала ШИМ.
Таким образом, с помощью подобного механизма флагов, мы можем отслеживать состояние другого канала и выполнять действия по формированию сигнала в этом другом канале.
Менять скважность можно кнопками, повешенными на RB7...RB4. В прерывании по изменении состояния этих линий можно изменять числовые значения длительности импульсов ШИМ (разумеется, не забывая про подавление дребезга контактов кнопок). А в телах вышеупомянутых циклов мы используем эти - изменяемые в прерываниях - значения.
Таким образом, с помощью подобного механизма флагов, мы можем отслеживать состояние другого канала и выполнять действия по формированию сигнала в этом другом канале.
Менять скважность можно кнопками, повешенными на RB7...RB4. В прерывании по изменении состояния этих линий можно изменять числовые значения длительности импульсов ШИМ (разумеется, не забывая про подавление дребезга контактов кнопок). А в телах вышеупомянутых циклов мы используем эти - изменяемые в прерываниях - значения.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Двухканальный ШИМ без таймеров.
Вам же уже сказали - можно. Даже описали как. В чём проблема ?FireProoF писал(а):Можно без него?
А менять то как собрались ?FireProoF писал(а):и меняющейся скважностью
И что будет, если Вы попытаетесь ещё что-нибудь добавить в программу ? У Вас же все времена, периоды, скважности, ... уплывут хз куда.
Re: Двухканальный ШИМ без таймеров.
"...Предварительно его надо смоделировать на ПК без применения многопоточности (вот отсюда начались проблемы), а потом уже на МК..."
А если не использовать сами прерывания от таймера а в главном цикле просто проверять флаг таймера, то это вроде не должно относится к многопоточности? Ну а дальше как рассказывал BOB51.
А если не использовать сами прерывания от таймера а в главном цикле просто проверять флаг таймера, то это вроде не должно относится к многопоточности? Ну а дальше как рассказывал BOB51.
- КРАМ
- Друг Кота
- Сообщения: 25223
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Двухканальный ШИМ без таймеров.
Ну и что?FireProoF писал(а): Нужен ДВУХканальный ШИМ.
ШИМ очень медленный, поэтому не составит труда найти наименьшее общее кратное (НОК) к ОБОИМ тактовым частотам ШИМов.
И с этим НОК построить цикл формирования ДВУХ ШИМов одновременно.
Re: Двухканальный ШИМ без таймеров.
FireProoF, лови:
PS: таким макаром можно хоть 10 шим каналов наворотить, только один минус чем больше каналов тем меньше частота шимов получается,
да кстати с тебя пиво
Код: Выделить всё
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;
}
}да кстати с тебя пиво


