Перейти к содержанию

Atmega64a максимальная частота программного шим


artos5

Рекомендуемые сообщения

Добрый вечер Всем!

Такой вопрос :

Нужно организовать 40 каналов шим 8бит как можно большей частоты .

Как лучше сделать ?

В прерывании по переполнению вставить switch() и в нем переключать выходы по программному таймеру , а порты переключать уже ассемблерных и командами cbi sbi.

Или полностью выполнить этот участок на асм?

У кого есть пример кода на asm ? (аналог switch ) помогите пожалуйста .

Ps кварц у меня 16МГц . И ещё будет dmx512 декодер он уже почти дописан.

С уважением Артем.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

для получения максимальной частоты нужно ВСЮ программу делать на ассемблере.

расчет и вывод 40 каналов, даже на ассемблере, даже с кварцем на 16 МГц, займет много времени, и частота получится не высокая.

программный таймер, задающий цикл работы, нужно делать с запасом по времени, чтобы перекрыть максимальное время расчета всех каналов. а это еще немного понизит частоту.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

16 часов назад, artos5 сказал:

Нужно организовать 40 каналов шим 8бит как можно большей частоты .

Тупейший метод (массив счетчиков) при тактировании на 16 МГц давал у меня примерно 140 Гц частоту ШИМ для 32 каналов. На Си. Если применить BAM и покумекать, можно 200 выжать, надеюсь...

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

откуда же я это могу знать?

пока не напишешь и в отладчике не проверишь время выполнения всех 40 каналов, не узнаешь...

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

В 1/26/2019 в 02:48, artos5 сказал:

Нужно организовать 40 каналов шим 8бит как можно большей частоты

Решение зависит от значения частоты. Можно взять и несколько МК, дергающих ножками по принятым значениям. 

Ссылка на комментарий
Поделиться на другие сайты

В 27.01.2019 в 11:36, _abk_ сказал:

Решение зависит от значения частоты.

правильнее сказать - от требуемой частоты.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за информацию ! Для будущих разработок учту. Тут ситуация такая что есть у меня в остатке платы , которые были на 40 каналов , только без шим а или вкл. или выкл. Для экономии на производстве ПП было принято решение ввести софтово шим управление на 40 каналов . Что ещё хочу сказать :

На stm32 я такую задачу решал , было программное ШИМ на 40 каналов с частотой 400Гц и 8 бит разрешение.

Алгоритм стандартный для такой задачи :

Прерывание с частотой Fint=Fpwm * 255

~102000Hz.

Именно на STM32F100RBT6.

На AVR я такого не делал , но скоро попробую , да на нем и не нужно 400Гц. Возможно придётся на ASM все критичные куски писать.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

В 26.01.2019 в 15:22, ARV сказал:

Тупейший метод (массив счетчиков) при тактировании на 16 МГц давал у меня примерно 140 Гц частоту ШИМ для 32 каналов

Лучше использовать один счетчик и массив евентов-"переназначаемых событий управления пинами".

Частота будет определяться временем отработки евента - то есть переключения значения на ноге и переназначения события на новое время для этого канала.

Если прикинуть я думаю инструкций 200 скажем по 2 такта хватит на такую операцию, поэтому частота примерно может достигать:16 000 000/400 = 40 кГц - что то уж очень много, но значит 10кГц легко.

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ruhi сказал:

Лучше использовать один счетчик и массив евентов-"переназначаемых событий управления пинами".

А можно подробнее про метод?

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, artos5 сказал:

А можно подробнее про метод?

если вопрос напишите отвечу, идею я, мне кажется четко сформулировал.

в принципе, можно даже статью написать, если будут интересующиеся.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Я один метод знаю, но он не сходится с вашим . И мой метод требует более высокой частоты..

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, ruhi сказал:

частота примерно может достигать:16 000 000/400 = 40 кГц

Вы забыли ещё на 256 разделить, т.к. здесь ШИМ имеет 256 градаций по заполнению.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Yurkin2015 сказал:

Вы забыли ещё на 256 разделить

Вот я это тоже заметил , но подумал что вдруг метод какой-то супер новый и действительно шим может так быстро формировать :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

15 минут назад, artos5 сказал:

шим может так быстро формировать

Ну, предположим, хочется ШИМ с частотой 200Гц и глубиной 8 бит. Тогда частота дискретизации равна 200* 256 = 51200. Ну , пусть кругло 50кГц.

Запускаем таймер с прерыванием каждые 20 мкс - при 16МГц это 320 команд в один такт, или 8 для каждого канала ШИМ. Можно, конечно, втиснуть проверку и установку для канала в эти 8 команд.

 

Но можно пойти и другим путём. Вот, 8-битный ШИМ бегает по кругу 0-255 и управляет каналами. Но у нас только 40 каналов. Значит только максимум 40 раз за круг что-то надо сделать, а всё остальное время 216 раз - пустая проверка условия. То есть большую часть времени мы зря прервались и потеряли некоторое время.

А, вот, ежели взять один массив из 40 байтов и заранее положить в него точки по времени, когда что-то надо сделать, и второй массив из 40 байтов с номерами каналов, то жизнь может значительно облегчиться.

К примеру, необходимо раскидать по каналам какой-то рисунок ШИМа. Счётчик ШИМа от 0 до 255. При 0 все каналы включаем. Затем при =10 выключаем 1-ый канал, при =14 выключаем 7-ой канал, при =25 выключаем 38-ой канал и т.д. То есть заполняем массив  дельта времени [10], [4], [11] ... и массив каналов [1], [7], [38] ...

Далее, делаем переменный шаг прерываний таймера. То есть при первом прерывании таймера мы тут же извлекаем время следующего прерывания [10], изменяем регистр ТОР таймера и выходим.

Следующее прерывание наступит уже через 10*20мкс = 200 мкс. При втором прерывании таймера выключаем только 1-ый канал, устанавливаем новое время прерывания [4] и выходим, ничего более не делая.

Следующее прерывание наступит уже через 4*20мкс = 80 мкс. При третьем прерывании - выключаем 7-ой канал, новое время [11], выход.

И так далее.

В результате количество прерываний значительно уменьшилось. И в самом прерывании мы уже точно знаем, что надо делать, никаких проверок и переборов каналов нету. Поэтому сама процедура очень короткая.

Ну, придётся попыхтеть немного, если захотите по ходу пьесы изменять ШИМ по каналам. Всякий раз придётся пересчитывать массивы времени и номеров каналов. Но это будет происходить не так часто, так шта ресурсы МК не пострадают.

Ссылка на комментарий
Поделиться на другие сайты

Когда для чего-либо не хватает скорости вычислений, всегда нужно вспоминать о табличных методах.
@artos5 , покумекай в этом направлении. Думаю, решение найдётся, причём неплохое...

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, Yurkin2015 сказал:

при 16МГц это 320 команд в один такт, или 8 для каждого канала ШИМ. Можно, конечно, втиснуть проверку и установку для канала в эти 8 команд.

сильно сомневаюсь, что за 8 команд можно сделать полный расчет одного канала.

а также МК должен сделать большую кучу другой работы - опросить и обработать входы, обработать и вывести индикацию и еще много чего...

итого реальная частота ШИМ упадет во много раз.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, Starichok сказал:

сильно сомневаюсь, что за 8 команд можно сделать полный расчет одного канала.

А какие там расчёты ?
Инкремент 8-мибитной переменной, сравнение её с другой и установка/сброс бита порта по условию сравнения.
Не знаю как на AVR, но например на PIC18 вполне реально вместить это в 8 команд. Ещё и останется.

PS: @artos5 , а для чего эти ШИМы нужны ? Может разрядность уменьшить, раза эдак в 2 ?
PS2: Хотя, 320 команд должно хватить с головой. Табличный метод и работа с целыми портами (по 8 выходов за раз) никто не отменял. Всё реально сделать...

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex сказал:

для чего эти ШИМы нужны ?

Dmx контроллер попросили сделать. 

Надо желательно 8бит.

Попробую алгоритм предложенный выше, если устроит - оставлю :)

Я за него когда-то уже читал, но так и не догнал тогда как он работает. 

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Возьми лучше какой-нибудь проц с DMA и пятью свободными 8-мибитными портами. И твоя задача решиться на раз-два. И проц будет совершенно свободен, для других задач (прим данных, обработка, ...).
Тем более, ты уже работал с STM32, вот и выбери что-нибудь из них.

PS: Никогда не думал, что буду советовать кому-нибудь ST, но в твоей ситуации, это - реальный выход :)

Ссылка на комментарий
Поделиться на другие сайты

Я знаю что стм идеально для этого) и я на нем решал такое (тоже 40 каналов). Но дело в том что есть платы заводские готовые под атмега64, и я ради экономии ~80$ , хочу на атмеге решить :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Посмотри распиновку выходов. Если все 40 каналов разбито по портам (по 8 штук), то тебе повезло :)

В 320 тактов влезешь с лихвой. Я бы даже сказал, что можно и раз в 5 увеличить частоту. Потребуется только РАМа чуть больше килограмма.

Ссылка на комментарий
Поделиться на другие сайты

Из за большого количества выходов и из за трудности разводки , не все порты целиком используются :)

PCB_NEW-PCB_20190129095228.pdf

Schematic__20190129095255.pdf

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
×
×
  • Создать...