add 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Нет, это не один канал, ... Теперь стоит вопрос, как подготовить данную таблицу. Вот вы имеете все уставки, таблица из 24 записей (48 байт), ну это я в примере просто привел массив, изменения значения на одном канале. Поясню вопрос: Вот,к ПРИМЕРУ значения для 1-го канала=245, для 2-го канала=36,для 3-го канала=48...и т.д. (цифры от балды). нет, в начале мы имеем 24байта, по байту на значение для каждого канала шима(24 канала). Как перевести эти значения в нужную таблицу? По сути наверное необходимо взять все первые биты в каждом байте поместить их в первую строчку, потом вторые биты и помечтить во вторую строчку и т.д. (ну добавить байт уставок ето понятно) . У нас получились образы для прерываний интервалы которых мы задаем уставками. так? Дык ведь подготовка этой таблицы займет тучу времени?! вот в этом и есть вопрос: как Вы ее подготавливаете? Прошу прощения, что то сразу недоходит и лыжи не едут:-( И еще вопрос: если у нас добавляем байт уставок в каждой строчке, это же трата памяти, причем заполнения по сути одинаковыми значениями с равным периодом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба нет, в начале мы имеем 24байта, по байту на значение для каждого канала шима(24 канала). Как перевести эти значения в нужную таблицу? По сути наверное необходимо взять все первые биты в каждом байте поместить их в первую строчку, потом вторые биты и поместить во вторую строчку и т.д. (ну добавить байт уставок ето понятно) . У нас получились образы для прерываний интервалы которых мы задаем уставками. так? Дык ведь подготовка этой таблицы займет тучу времени?! вот в этом и есть вопрос: как Вы ее подготавливаете? Прошу прощения, что то сразу недоходит и лыжи не едут:-( И еще вопрос: если добавляем байт уставок в каждой строчке, это же трата памяти, причем заполнения по сути одинаковыми значениями с равным периодом? Внимательно прочтите посты #49 и #58. Во втором посте на словах описан мой алгоритм создания таблицы. Вы его поняли? Похоже, где-то у вас недопонимание. Вот скажите, вы саму идею уловили, как это всё работает? Если уловили, напишите сюда своими словами. И вам станет понятнее, и я пойму, почему у вас смазка с лыж испаряется(:-). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба В среднем Вы правы, почти, в частностях нужно разбираться отдельно... джиттер нужно считать обязательно, потому что в данном случае он всегда будет в +, нуль Вы никогда не получите. Тока максимум двухтактовые команды в фоне? О С в фоне уже речь не идет, да и на асм сильно себя ограничиваем ? Ага, давайте туда джаву и вижуал бейсик ещё присобачим, почему нет(:-)? Там бедная аврка еле-еле с трудом справляется на ассемблере на такой скорости, каждый такт на счету... + 2(прыжок ....) конечно не забыл, просто изначально посчитал что с этим прыжком будет все совсем плохо и решил что прерывание прописано в области векторов. Спасибо конечно за шараду, тока для меня все изначально понятно, и очень неочевидно что такой вариант даст правильный/предсказуемый вариант в ситуации возможности смены всех значений ШИМ за период ШИМ. Нарисуйте код и я покажу где будут проблемы Вы покажите, где проблемы с приведенным кодом будут, а дальше будем посмотреть. Кстати, время 18МЦ, которое указано в заголовке и есть время выполнения именно данной подпрограммы, с учётом скрытого прыжка из области векторов. Вот скажите, как по-вашему, с каким минимальным периодом можно вызывать данную подпрограмму? Допускается, но может быть и на ~80% хуже ? (то есть дребезг будет порядка 9 тактов) Ну-ка, ну-ка, интересно, расскажите по-подробнее. У меня тоже есть масса идей, но как показала практика общения с Вами, Вы ну это... слегка любите преувеличить... (надеюсь примеры не нужно приводить?) Ну почему, приведите. Заодно и вашу хоть какую-нибудь стоящую идею по 24-канальной шим, чтоб по теме ветки. Кстати уж, своими идеями я собирался поделиться не с вами, а с Rst7, приглашал его к сотрудничеству так сказать, надеюсь это не ваш коллега? Ну дык тогда приведите готовый код хотя бы на 6 КГц, как уже утративший свою актуальность :) , и мы его обсудим...Ваш вариант ШИМ очень неплох, тока если Вы заявляете о том что Вы достигли частоты XX, давайте разговаривать предметно..., без кода это бессмысленно. И не заявлял я, просто сказал: к вашему сведению. Код пока актуален, но ваше желание получить код чувствуется, непонятно правда зачем, если всё так плохо в этом коде... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Все это здорово, но я никак не пойму - какой здесь практический смысл. Понятно, что это "затачивается" под светодиоды, но 8 полноцветных это "маловато будет". Вот если бы 72 канала на АВР :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Все это здорово, но я никак не пойму - какой здесь практический смысл. Понятно, что это "затачивается" под светодиоды, но 8 полноцветных это "маловато будет". Вот если бы 72 канала на АВР :) Легко! Ставим 3 аврки и у вас 72 канала по 6 кГц каждый(:-). Вот и смысл появился, не было бы оптимизации, пришлось бы ставить 10 авр для тех же 6 кГц. Кстати, а токи какие нужны? [Алексей, чисто информация: моно1 на форуме замутил тему по осциллам, подключайтесь] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Все это здорово, но я никак не пойму - какой здесь практический смысл. Понятно, что это "затачивается" под светодиоды, но 8 полноцветных это "маловато будет". Вот если бы 72 канала на АВР :) :07: Под светодиоды такое затачивать полный бред. Зачем? Разве что побаловаться. Нет, это затачивается под различные преобразователи. Что-то типа DAC, где точность не очень важна, где джиттер не имеет существенного значения, так как, как правило, значение меняется в среднем меньше чем раз за период. Типовое применение я уже описал. Управление ШД. Например фирмы switec который управляется непосредственно с ног AVR. Или управление скоростью двигателя постоянного тока, управление подсветкой LCD дисплея и т.п. В моём случае период ШИМ имеет принципиальное значение. Так как от частоты ШИМ, учитывая дробление, зависит максимальная частота вращения двигателя, а это в свою очередь сказывается на времени свала стрелок. Таким же способом, к примеру формируется синус, если надо. Ну и т.д. Зачем притягивать за уши. Такое применяется если Вам нужно. То что сам ШИМ применяется широко, видно хотябы из того, что практически все контроллеры сейчас его имеют на борту (аппаратный). Но аппаратный очень хорошо, но одна засада - их мало. Так я, к примеру управляю 6 двигателями по 2 канала ШИМ на каждый. С такими однокристалками - напряг. Кроме всего мне надо CAN на борту. И вот их нет вообще. Таким образом совтовый ШИМ - отличный выход из положения. Ошибки - не принципиальны, так как ошибка существует только в пределах микрошага. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Ага, давайте туда джаву и вижуал бейсик ещё присобачим, почему нет(:-)? Там бедная аврка еле-еле с трудом справляется на ассемблере на такой скорости, каждый такт на счету...Давайте не будем перегибать палку ! Речь шла например о командах типа SBRx, SBIx которые потенциально 3 тактовые. Конечно в асемблере можно гарантировать что они будут максимум 2 тактовыми, но просто в обсуждении все время мелькал вариант при котором прерывание на асм а все остальное на С, так что вопрос был только об этом... Кстати Вы сами признавались что сортировка это не Ваш конек, так что могу предположить что этот кусок у некоторых на С будет лучше чем у Вас на асм. Если речь чисто о асм то нивапрос. Вы покажите, где проблемы с приведенным кодом будут, а дальше будем посмотреть. Кстати, время 18МЦ, которое указано в заголовке и есть время выполнения именно данной подпрограммы, с учётом скрытого прыжка из области векторов. Вот скажите, как по-вашему, с каким минимальным периодом можно вызывать данную подпрограмму? Я кода пока не увидел... То что Вы обозвали 18 тактов занимает больше и Вы с этим согласились в посте №52, как я могу указать Вам на проблемы если другого(правильного) кода нету ? Ну-ка, ну-ка, интересно, расскажите по-подробнее.За отсутсвием хотя бы какого-то законченного варианта кода я Вам врядли смогу точно ответить, я могу только предполагать. Отвечу вопросом на вопрос, Вы считали какие промежутки времени проходят при выводе в одноименные порты(джиттер) например при таких раскладах: - полочки PWM через одну - две полочки PWM подряд, пропуск 1 полочки, 2 полочки подряд - два вышеупомянутых варианта, по при этом половина полочек около 0 а вторая около 255 итд ??? Ну почему, приведите.Вам нужен Освежитель Памяти ? да пожалуйста, например ловля временных интервалов на мега128 с точностью 0,5 такта, ссылку искать нужно ? или уже сами вспомнили ? Заодно и вашу хоть какую-нибудь стоящую идею по 24-канальной шим, чтоб по теме ветки. Кстати уж, своими идеями я собирался поделиться не с вами, а с Rst7, приглашал его к сотрудничеству так сказать, надеюсь это не ваш коллега? И не заявлял я, просто сказал: к вашему сведению. Код пока актуален, но ваше желание получить код чувствуется, непонятно правда зачем, если всё так плохо в этом коде... Нету у меня желания заполучить Ваш код, я могу и свой написать, асм чуть-чуть знаю :) Считайте что это просто спортивный интерес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Кстати Вы сами признавались что сортировка это не Ваш конек, так что могу предположить что этот кусок у некоторых на С будет лучше чем у Вас на асм Ну покажите ваше исскусство на си, сравним(:-). Исходные данные такие: 24 записи по 2 байта каждая, первый байт - уставка, второй байт - канал, ассоциированный с данной уставкой. Надо упорядочить таблицу на месте, так чтобы уставки в записях были размещены в неубывающем порядке вместе с номерами каналов. То что Вы обозвали 18 тактов занимает больше и Вы с этим согласились в посте №52, как я могу указать Вам на проблемы, если другого(правильного) кода нету? За отсутствием хотя бы какого-то законченного варианта кода я Вам врядли смогу точно ответить, я могу только предполагать Приведен законченный вариант, не самый скоростной впрочем, средненький. Приведенная программа выполняется именно за 18 циклов, включая rjmp из векторной области. Какой, по вашему мнению, минимальный период вызова данной функции? Отвечу вопросом на вопрос, Вы считали какие промежутки времени проходят при выводе в одноименные порты(джиттер) например при таких раскладах: - полочки PWM через одну - две полочки PWM подряд, пропуск 1 полочки, 2 полочки подряд - два вышеупомянутых варианта, по при этом половина полочек около 0 а вторая около 255 итд ??? Если уставки не менялись, то джиттера вроде нет вообще. До конца не исследовал впрочем. Алгоритму по барабану положение "полочек". Они могут быть в любой позиции 1-255, кроме нулевой. Вам нужен Освежитель Памяти? да пожалуйста, например ловля временных интервалов на мега128 с точностью 0,5 такта, ссылку искать нужно? или уже сами вспомнили? Будете смеяться, но я решил-таки ту задачу, именно с точностью 0.5 такта. Что ещё? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 17 октября, 2007 Опубликовано 17 октября, 2007 · Жалоба Ну покажите ваше исскусство на си, сравним(:-). Исходные данные такие: 24 записи по 2 байта каждая, первый байт - уставка, второй байт - канал, ассоциированный с данной уставкой. Надо упорядочить таблицу на месте, так чтобы уставки в записях были размещены в неубывающем порядке вместе с номерами каналов.Сравнивать начнем с момента показа Вашего кода Приведен законченный вариант, не самый скоростной впрочем, средненький. Приведенная программа выполняется именно за 18 циклов, включая rjmp из векторной области. Какой, по вашему мнению, минимальный период вызова данной функции?Где законченый вариант ? Где код который я могу загнать в AVRStudio и его там проверить ? Если уставки не менялись, то джиттера вроде нет вообще. До конца не исследовал впрочем. Алгоритму по барабану положение "полочек". Они могут быть в любой позиции 1-255, кроме нулевой.А Вы на всякий случай поиследуйте, может чего интересное и увидите, а почему 0 в опозициии, тактов не хватает ? дык тогда у Вас уже неполноценный шим. Будете смеяться, но я решил-таки ту задачу, именно с точностью 0.5 такта. Что ещё?Смеятся буду когда Вы приведете свое решение... P.S. И Вобще, у меня есть алгоритм шима на 100КГц при 256 полочках и никакого джиттера, тока я Вам его не покажу, потому как комерческая тайна, но зато мой алгоритм в 10 раз лучше Вашего... :) Кстати, вот тут еще один интересный вопросик образовался: 1) Будем использовать МК с ОЗУ не менее 1 Кбайта и тактовой частотой 20 МГц, ну и ног должно хватить по крайней мере для 24 выходных шимов. Пусть это будет атмега88. Как Вы планировали запустить мегу88 на 20Мгц так чтобы 3 порта(24пина) остались свободными ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 18 октября, 2007 Опубликовано 18 октября, 2007 · Жалоба Сравнивать начнем с момента показа Вашего кода Где законченый вариант? Где код, который я могу загнать в AVRStudio и его там проверить ? Зачем вам мой код, вы ж говорили, что он вам не нужен, да и идей у вас много, напишите свой, под 100 кГц(:-) а почему 0 в опозициии, тактов не хватает ? дык тогда у Вас уже неполноценный шим Реализовать легко во всех позициях 0-255, но не уверен, можно ли назвать это шимом: период становится бесконечным(:-) Кстати, вот тут еще один интересный вопросик образовался. Как Вы планировали запустить мегу88 на 20 Мгц так чтобы 3 порта(24пина) остались свободными ? :) Не берите в голову, учебный пример, чисто в образовательных целях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 18 октября, 2007 Опубликовано 18 октября, 2007 · Жалоба :07: Под светодиоды такое затачивать полный бред. Зачем? Разве что побаловаться. Ну почему же ? Для всякого рода "пропеллерных поделок" пойдет! А так "Вся наша жизнь.." - баловство. :) Кстати, зачем шаговым двигателям ШИМ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 18 октября, 2007 Опубликовано 18 октября, 2007 · Жалоба Ну почему же ? Для всякого рода "пропеллерных поделок" пойдет! :) Согласен Кстати, зачем шаговым двигателям ШИМ? Дробление шага. Что обеспечивает более высокую плавность движения при более высокой максимальной скорости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 19 октября, 2007 Опубликовано 19 октября, 2007 · Жалоба Внимательно прочтите посты #49 и #58. Во втором посте на словах описан мой алгоритм создания таблицы. Вы его поняли? Похоже, где-то у вас недопонимание. Вот скажите, вы саму идею уловили, как это всё работает? Если уловили, напишите сюда своими словами. И вам станет понятнее, и я пойму, почему у вас смазка с лыж испаряется(:-). посты читал уже не раз, лыжи не едут..:-) хм.. постараюсь объяснить как я понимаю Ваш метод: 1. период шима делится на прерывания (предустановками). причем с неравными интервалами! т.е. к примеру с шагом 1,2,4,8,16,32,64,128,255 (8шт. за период.) 2. В каждое прерывание в порты устанавливается их образ(портов)(выводим значение из таблицы). 3. таким образом если мы на одном прерывании (третем по счету) (к примеру!) на первый ПИН(!) портаА установим 1(един.), и к примеру на 5-ом по счету прерывании на тоже пин поставим (1)единицу, а в остальные прерывания там будет 0(ноль), то сложив интервал 3-го и 5го прерывания(4+16=20) получим значение заполнение 20/255. так можно установить любой уровень от 0 до 255. вот, что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 19 октября, 2007 Опубликовано 19 октября, 2007 · Жалоба посты читал уже не раз, лыжи не едут...вот, что не так? Всё не так. 1. Период шима не делится на прерывания c неравными интервалами. Давайте для простоты рассмотрим пример, состоящий из трёх шим. Сигналы шим выглядят так. 0 9 255 0 9 __ _____________________________________ _ |___________| |___________| шим 1 0 7 0 7 __ _________________________________________ _ |_______| |_________| шим 2 0 15 0 15 __ _______________________________ _ |_________________| |______________| шим 3 Сколько будет прерываний? Три – на временных позициях 7, 9 и 15. И еще одно общее прерывание - на позиции 0 (общее обнуление для всех каналов). Если у вас таймер считает с 0, а в регистр сравнения вы запишете 7, то при совпадении времени таймера (Т) с 7 у вас возникнет прерывание по сравнению. В прерывании вы должны будете установить шим2 в единицу и не трогать остальные. Кроме того вы должны будете записать новое число в регистр сравнения, а именно 9. При совпадении (Т=9) опять возникнет прерывание, надо будет выставить шим1 в единицу, не трогая остальные каналы, и не забыть записать в регистр сравнения новое число 15. На третьем прерывании выполняются те же действия, только с шим3. Больше прерываний не будет вплоть до 0 позиции, где программа обработки прерывания по переполнению обнулит все каналы и запишет число 9 в регистр сравнения. Далее начинается новый период шим, всё повторяется. (Абсолютно те же рассуждения приложимы к другому числу каналов. Само собой разумеется, что для 24 каналов, будет 24 прерывания.) 2. Таблица образа портов Таблица для случая с тремя шимами примет следующий вид. уставка 321 <-номер шим 7 0000 0010 <-образ порта при Т=7 9 0000 0011 <-образ порта при Т=9 15 0000 0111 <-образ порта при Т=15 3. Алгоритм подготовки таблицы образа портов был описан ранее. 4. Исходные данные представляются в виде таблицы. Для случая трёх шим она выглядит следующим образом. уставка канал 9 1 7 2 15 3 Её надо отсортировать в порядке неубывания уставок уставка канал 7 2 9 1 15 3 И в соответствии с упорядоченной таблицей построить таблицу образов портов. 5. В первом приближении размер кванта времени, или длительность ступеньки, определяется временем выполнения прерывания. Минимальное время ступеньки составит 25 МЦ (18МЦ (обработка прерывания) + 4МЦ(вход в прерывание) + 3МЦ (завершение команд на входе и выходе) ). Время ступеньки 25 МЦ * 0.05 мкс/МЦ = 1.25 мкс. Период шима 1.25 мкс*256 ступеней=320 мкс, т.е. частота шим = 3125 Гц. Полное время можно сократить примерно в два раза и получить 13 МЦ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 19 октября, 2007 Опубликовано 19 октября, 2007 · Жалоба Всё не так. 1. Период шима ... =GM=, Пасиба что расжевали! Лыжи поехали:-) (Вот токо с подготовкой подразберусь:-)) зы: а способ (.пост №73:неравными интервалами! т.е. к примеру с шагом 1,2,4,8,16,32,64,128,255) шим имеет право на жизнь? Там прерываний всего 8 (от разрядности зависит,можно 16) Какие там могут быть подводные камни? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться