&y JOKER 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба Всем h! Собирается 3-х канальный синхронный генератор импульсов с претензией на прецизионность :) На компе в проге для каждого канала задается начальная задержка импульса относительно общего старта, длительность и период. Прога по формуле высчитывает точную задержку до такта. Далее по COM-порту инфа, а точнее сгенеренный код программы для каждого гена передается на управлющий МК, который программит по шине 3 МК-генераторы. Предполагается, что 3 гены будут юзать один внешний клок ген. Частота 20 MHz. МК-ATMega48. Гены слушают шину и ловят каждый свои данные и программят через STS SRAM после чего ждут команды на общий запуск. Вапрос. А запустит-ли МК код сгенеренной программы в SRAM? В протеусе все изюмительно работает, а вот в реале мона-ли так издеваться? ;) Почему SRAM. Потому, что код нужен динамический, максимально быстрый и компактный. 10 килоциклов для FLASH уйдут за 16 часов. Хранить параметры в SRAM и оттуда грузить - слишком медленно. К примеру вот пока еще черновой сгенеренный код для имульса с начальной задержкой 15 тактов, длиной импульса t=15587453 такта и период-длина=2342356 тактов: ldi r22,1 // high-state ldi r23,0 // low-state push r30 //-delay 15- pop r30 push r30 pop r30 push r30 pop r30 lpm //----------- S1:out 0x18,r22 // out high ldi r26,0x17 //---- delay 15587453 ---- ldi r27,0x01 L1:ldi r28,0x3F ldi r29,0x18 L0:sbiw r28,1 push r30 pop r30 nop brne L0 nop sbiw r26,1 brne L1 nop //---------------- out 0x18,r23 // out low ldi r26,0x30 // ----- delay 2342356 ----- ldi r27,0x00 M1:ldi r28,0xA6 ldi r29,0x2F M0:sbiw r28,1 brne M0 nop sbiw r26,1 nop brne M1 nop nop nop //-------------------- jmp S1 Он может незначительно увеличиваться в объеме, но в SRAM вроде должен влезть. Изменено 15 октября, 2009 пользователем &y JOKER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Вапрос. А запустит-ли МК код сгенеренной программы в SRAM? АВР не умеет программы из ОЗУ выполнять, он может только программы из внутренней флеши. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
&y JOKER 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба от жыж блин... ех было время када Z80 умел и из ПЗУ и из рамы... а тут даже регистр PC низя изменить. :( тада еще вопрос, а кто-нить из моторол, пиков или не АВРов умеет с ОЗУ более продвинуто работать? p.s. нафига тада в даташите рисовать это все как единое адресное пространство? Изменено 15 октября, 2009 пользователем &y JOKER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба p.s. нафига тада в даташите рисовать это все как единое адресное пространство? Простите, но в даташите на какой AVR Вы увидели, что пространства кода и данных - общие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
&y JOKER 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба Простите, но в даташите на какой AVR Вы увидели, что пространства кода и данных - общие? видимо, сильное желание достигнуть цели ослепило меня, и я по любви и старой памяти к Z80 посчитал что всегда и везде адресное пространство едино как территориальное пространство Российской Федерации :) Ну вот как-то вот так у меня получилось, что Data memory map каким-то образом вошло и в program memory. Логика подсказывала, что порядочные микроконтроллеры просто обязаны позволять делать с собой подобные вещи, иначе зачем их производить. :) Просто никада раньше с мк кроме 80ки не работал. В общем то, проблема решаема. Придется в раму запихивать лоадером разные значения для одного и того-же цикла в ущерб точности. Печально канеш, ну шож поделаешь... Изменено 15 октября, 2009 пользователем &y JOKER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Логика подсказывала, что порядочные микроконтроллеры просто обязаны позволять делать с собой подобные вещи, иначе зачем их производить. Это - неверное логическое заключение. Про то, что ядро AVR8 суть типичный представитель семейства ЭВМ с гарвардской архитектурой Вы никогда не слышали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Прога по формуле высчитывает точную задержку до такта. Далее по COM-порту инфа, а точнее сгенеренный код программы для каждого гена передается на управлющий МК, который программит по шине 3 МК-генераторы. Предполагается, что 3 гены будут юзать один внешний клок ген. Эти ужасы, которые Вы описали, скорее всего легко повторить на одном действительно современном микроконтроллере. Похоже, Вы многое пропустили, лучше изучить и подтянуться. Успехов. P.S.Очень надеюсь, что Вы не "доктор". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба кстати да, а в чем проблема делать все это одним мк ? на край найти какой нить с 3-мя 16-ти битными счетчиками? и еще проще, если у всех сигналов частота одна... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
&y JOKER 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Это - неверное логическое заключение. Про то, что ядро AVR8 суть типичный представитель семейства ЭВМ с гарвардской архитектурой Вы никогда не слышали? К сожалению, нет. Понимаю, что разные архитектуры заточены под разные задачи и имеют свои преимущества и недостатки, но в данном случае не совсем понятно, что мешало ATMel значительно расширить функционал мк. Какая разница откуда поступают данные для выполнения команды: flash или SRAM? Даже если у них разное адресное пространство. Эти ужасы, которые Вы описали, скорее всего легко повторить на одном действительно современном микроконтроллере. Не спорю, можно и на x86 сделать, но мы не ищем легких путей. Нам проще заставить сделать задуманное, пусть и не очень красивым, но гибким способом, чем спасовать и искать более легкие пути, но с таким-же результатом. На это уйдет время. Мы не шаттл на орбиту запускаем. Можно было вообще тупо взять 3 ИС-генератора сигналов и крутить ручки или синтезатор, но это будет куча обвеса, с проблемами синхронизации и стоимостью как боинг. На таймерах и прерываниях-это дополнительные такты, а мне важен минимальный шаг. Это дополнительные расчеты. Что может быть проще, быстрее и точнее, чем заранее рассчитанный до такта алгоритм? У меня была вполне конкретная задача: 3х канальный синхронный генератор импульсов, с возожностью автоматического перебора параметров импульса и управлением по COM-порту, скважностью до 2000000, шагом хотя-бы 0,05 us и минимальной длительностью 0,1 us. AVR теоретически позволял бы сделать такой девайс, если бы не вот это вот неожиданно всплывшее "но". :) Согласен, не очень симпатишно выглядит, зато теоретически работает как было задумано. P.S.Очень надеюсь, что Вы не "доктор". :) неа. Просто в далеком децтве у меня не было возможности проектировать и конструировать, а интерес и желание осталось. Спасибо за критику - для меня это на самом деле имеет значение. Оставшийся у меня вопрос: кто из мк таки умеет из оперативки запускать код? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Не спорю, можно и на x86 сделать Я сказал - из современных :) но мы не ищем легких путей. То есть Вам "шашечки". Это Ваш выбор. Оставшийся у меня вопрос: кто из мк таки умеет из оперативки запускать код? Из массовых предлагаю три семейства - MSP430, STM32 и LPC2xxx. Почитайте внимательно руководства, вполне может оказаться так, что все можно сделать на одном микроконтроллере за два-три дня. Сейчас встроенные таймеры имеют блок COMPARE, который обычно и формирует импульсы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
&y JOKER 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба и еще проще, если у всех сигналов частота одна... в том-то и дело, что там вообще может быть все "не одно". максимальная частота и минимальная длительность импульса, например: ldi r22,1 ldi r23,0 s1: out 0x18,r22 out 0x18,r23 rjmp s1 А на другом канале-то,что в первом посте. А на 3м - вообще относительно запуска задержка в пол-секунды. На таймер и прерывания уйдут лишние такты. А если одновременно на 3 канала надо синхронно и точно? Не писать же на каждый вариант отдельный код. То есть Вам "шашечки". Это Ваш выбор. :) не совсем, мне - "ехать". Просто принцип у меня: "бери от жизни все" :) - если есть еще возможность сделать лучше - нужно выжать все что можно. Если уж никак низя - тада другие варианты. Готов смириться, что из меги в данном случае больше не выжать, но если работать будет сносно, то можно попробовать и пересмотреть исходные условия задачи. Ну будет шаг не 0,05 а 0,4 us, на низких частотах, воможно, и не будет столь актуально. Расчет был на максимум возможного, с запасом, как можно более точно. Из массовых предлагаю три семейства - MSP430, STM32 и LPC2xxx. пасиб, поизучаю. Кстати, если кому нада, могу выложить прогу расчета задержки до такта. delay.h так не умеет. :laughing: Диапазон от 1 до 20000000 тиков (дальше не тестил). Длина кода в среднем получается 20 строк. На 20 млн. не смог "разобрать по запчастям" 4 числа, но это собссно поправимо. Изменено 15 октября, 2009 пользователем &y JOKER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба А зачем программу в ОЗУ, ну храни в нем параметры твоих импульсоидов , задержек и периодов , принятых от старшего брата и пусть МК(или несколько) работает. Изменено 15 октября, 2009 пользователем domowoj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Какая разница откуда поступают данные для выполнения команды: flash или SRAM? Даже если у них разное адресное пространство. М-да. Фраза начисто сносит башку. Оставшийся у меня вопрос: кто из мк таки умеет из оперативки запускать код? Очевидно те, которые сделаны на фон-неймановской архитектуре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 15 октября, 2009 Опубликовано 15 октября, 2009 (изменено) · Жалоба взять какуюю нить Хмегу, связать там 2 таймера.. получить 32 разядный таймер... скважность сами посчитаете? Изменено 15 октября, 2009 пользователем Duhas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба А зачем программу в ОЗУ, ну храни в нем параметры твоих импульсоидов , задержек и периодов , принятых от старшего брата и пусть МК(или несколько) работает. +1 Ограниченный кругозор не способствует решению задачи. Забудьте вы про Z80 равно как и про PDP11 и x86. Всё ушло и слава богу. Если бы эти процы были такие суперовые, то не погибли бы так бесславно. :) Слава богу, для того, чтобы генерировать сигнал разной частоты и формы, сейчас не требуется переписывать программу. Для этого существуют таймеры. Они с этой задачей справляются лучше. В некоторых процах разрядность таймеров 32 бита (например LPC2xxx) и ещё прескалеры. Плюс частота таймера 60-72МГц. В atxmega таймеры работают на частоте, более высокой чем частота проца. При частоте проца 32МГц. Всё это позволяет получить более высокочастотный сигнал с большей точностью. При применении ШИМ можно также получать и синусоидальный сигнал, а также аналоговый сигнал произвольной формы. Попробуйте ознакомится с сегодняшними процами и их возможностями. Пока вы спали мир ушёл далеко от исторических монстров типа Z80. :) Даже по системе команд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться