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

Как Зделать Задержку 128 Tc ?


Anatole

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

Ну, в общем случае набором ничего не делающих номанд, суммарная длительность выполнения которых как раз и составляет 128Тс. Обычно такую длительность выполняют путём прогона пустого цикла плюс некоторое количество NOP'ов для точной доводки - так программа получается короче.

Или же запрограммировать останов с последующим продолжением работы по прерыванию от таймера, ежели таковой есть в системе

Удачи!

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

Ну, в общем случае набором ничего не делающих номанд, суммарная длительность выполнения которых как раз и составляет 128Тс. Обычно такую длительность выполняют путём прогона пустого цикла плюс некоторое количество NOP'ов для точной доводки - так программа получается короче.

Или же запрограммировать останов с последующим продолжением работы по прерыванию от таймера, ежели таковой есть в системе

Удачи!

Не ну первый вариант это фуфел)

Я вот сейчас делаю вариант с Опросом регистра ADCTL - там первый бит если преобразование завершено равен 1, если не завершено, тогда 0. занести содержимое ADCTL в аккумулятор а потом проверить на четность, то можно и дождаться до конца преобразования в АЦП.

Но тут одна лажа никак немогу разобраться с переходом к подпрограмме, вот что получается:

JSR

WAIT: LDA ADR $1030

JPO WAIT

RTS

где косяк?

Да и можно еще вопрос какова длительность NOP и какие еще есть ничего не делающие команды, и какова их длительность?

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

ничегон е делающая по идее только ноп ... длительность - 1 такт, тоесть у всех своя...

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Не ну первый вариант это фуфел)

Да и можно еще вопрос какова длительность NOP и какие еще есть ничего не делающие команды, и какова их длительность?

Вовсе не фуфел.

Иной раз нет ничего проще и корректней пустого цикла. Я пользуюсь не только NOP, но и DIV и MUL. Все длительности команд в даташите описаны должны быть, плюс осциллограф.

А ты уверен с проверкой на чётность, что там больше другие биты в аккумуляторе не модифицируются?

Может надо погасить ненужные биты перед проверкой и проверять на ноль?

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Вовсе не фуфел.

Иной раз нет ничего проще и корректней пустого цикла. Я пользуюсь не только NOP, но и DIV и MUL. Все длительности команд в даташите описаны должны быть, плюс осциллограф.

А ты уверен с проверкой на чётность, что там больше другие биты в аккумуляторе не модифицируются?

Может надо погасить ненужные биты перед проверкой и проверять на ноль?

В даташите http://www.datasheetarchive.com/search.php?q=MC68HC11A8P нету. Ну то что NOP вроде 2Тс длиться. А вот DIV и MUL незнаю...

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

Так что остается либо сделать 64 NOPа, либо найти длительность команд DIV и MUL, либо реализовать задержку с помощью таймера! Это вот только сделать я не знаю как....если кто знает поделитесь!

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

сделать 64 NOPа
Ну зачем же так много. Простой алгоритм из любого букваря по программированию, напр.:

- затолкнуть в стек аккумулятор и флаги;

- занести в аккумулятор величину N;

- уменьшать содержимое аккумулятора до тех пор, пока он не обнулится;

- вытолкнуть из стека флаги и аккумулятор

в зависимости от типа МК будет содержать примерно 5...7 команд. Надобно подобрать такое N, чтобы для него время выполнения этого алгоритма было менее отмеряемой задержки, а для N+1 - более. На разницу по времени между требуемыми Вам 128Тс и временем выполнения вышеуказанного цикла набрать NOPов - вряд ли их наберётся более пары десятков. Ну, если это будет п/п - учесть время на вызов и возврат.

Удачи!

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

Нужно сделать задержку 128 Tc (время счета) или 64мкс, вопрос собственно: как сделать так, чтобы МК ровно 128Тс ничего не делал?

Как известно временные задержки очень успешно выполняются с помощью 8 или 16 разрядных таймеров. Используя 8ми разрядный таймер (к примеру ATmega128) можно реализовать максимальную задержку в 64мс при тактовой частоте 4Мгц, при этом микроконтроллер действительно ничего не делает, а находится в режиме SLEEP. Время задержки определяется по формуле: Кделх256/4000000, где Кдел - коэффициент делителя тактовой частоты.

Вот пример программы для задержки 64мкс:

ldi r20,1<<TOIE0

out TIMSK,r20 ;Разрешение прерывания от таймера Т0

ldi r20,1 out TCCR0,r20 ;Коэффициент деления 1 (для задержки 64мкс) sei ;Разрешение прерывания

ldi tmp,1<<SE ;Переход в спящий режим

out MCUCR,tmp

sleep

При этом микроконтроллер можно не переводить в режим sleep, а заставить его выполнять в это время что-то другое вместо пустых NOPов или ещё чего-то

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

Нужно сделать задержку 128 Tc (время счета) или 64мкс, вопрос собственно: как сделать так, чтобы МК ровно 128Тс ничего не делал?

Как известно временные задержки очень успешно выполняются с помощью 8 или 16 разрядных таймеров. Используя 8ми разрядный таймер (к примеру ATmega128) можно реализовать максимальную задержку в 64мс при тактовой частоте 4Мгц, при этом микроконтроллер действительно ничего не делает, а находится в режиме SLEEP. Время задержки определяется по формуле: Кделх256/4000000, где Кдел - коэффициент делителя тактовой частоты.

Вот пример программы для задержки 64мкс:

ldi r20,1<<TOIE0

out TIMSK,r20 ;Разрешение прерывания от таймера Т0

ldi r20,1 out TCCR0,r20 ;Коэффициент деления 1 (для задержки 64мкс) sei ;Разрешение прерывания

ldi tmp,1<<SE ;Переход в спящий режим

out MCUCR,tmp

sleep

При этом микроконтроллер можно не переводить в режим sleep, а заставить его выполнять в это время что-то другое вместо пустых NOPов или ещё чего-то

Вот это уже что-то похожее на правду) А для какого МК эта команда, если не секрет? И на каком языке написана?

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

Вот это уже что-то похожее на правду) А для какого МК эта команда, если не секрет? И на каком языке написана?

Ну-ну.

Ты б хоть подсказал что ты собираешся делать вообще, пока будешь ждать окончания преобразования.

Нафига городить целый таймер, если делать параллельно с преобразованием ничего не будешь.

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

Вот твоя конструкция:

-прочитать байт из $1030;

-умножить его логически на 080h;

-проверить: если ноль, то преобразование пока не завершено;

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

А вот ждать конца преобразования просто по выдержке времени - не совсем корректно. Мало ли что в даташите написано про время. На заборах тоже пишут.

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

Ну-ну.

Ты б хоть подсказал что ты собираешся делать вообще, пока будешь ждать окончания преобразования.

Нафига городить целый таймер, если делать параллельно с преобразованием ничего не будешь.

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

Вот твоя конструкция:

-прочитать байт из $1030;

-умножить его логически на 080h;

-проверить: если ноль, то преобразование пока не завершено;

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

А вот ждать конца преобразования просто по выдержке времени - не совсем корректно. Мало ли что в даташите написано про время. На заборах тоже пишут.

Мне нужно просто сделать АЦП. У него четыре цикла преобразования, каждый длится по 32 Тс итого 128 Тс. Ждать до конца преобразования по выдержке времени, считаю самым простым вариантом, потому что во первых это самый точный в плане быстродействия вариант (по сравнению с опросом регистра о конце преобразования) во вторых в плане памяти менее емкий, чем забивать 64 NOPа, или что-то вроде того, и в третьих эта реализия программы не зависит от частоты на которой работает МК. Вот почему именно таймер..

А по поводу Вашей программы, я так понял, что бит в $1030 это ADCTL....можно вопрос, зачем его умножать на 80h? если проверить завершения преобразования можно элементарно с помощью JNZ и других J(CON). Этот случай я рассматривал...в плане быстродействия это не самый лучший вариант...

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

зачем его умножать на 80h? если проверить завершения преобразования можно элементарно с помощью JNZ
Это для того, чтобы биты, не причастные к процессу, не навели порчу на этот самый процесс. Ибо команде проверки на равенство нулю, так же, как и Вами упомянутой "Переход, если не нуль", с помощью которой Вы планируете проверять завершение преобразования, совершенно безразлично, содержимое какого бита отличается от нуля.

И еще: я как-то не очень то уверен, что JNZ в состоянии самостоятельно, без дополнительных команд, выполнить проверку на ноль.

Да, кстати - а какой у Вас всё ж таки МК? Ибо в своём после Вы указали даташит на MC68HC11A8P, в то время как в системах команд у Вас присутствуют JPO, JNZ. Ведь вроде как Моторола для мнемоники команд своих МК традиционно использует не джампы, а бренчи.

Удачи!

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

Нужно сделать задержку 128 Tc (время счета) или 64мкс, вопрос собственно: как сделать так, чтобы МК ровно 128Тс ничего не делал?

Как известно временные задержки очень успешно выполняются с помощью 8 или 16 разрядных таймеров. Используя 8ми разрядный таймер (к примеру ATmega128) можно реализовать максимальную задержку в 64мс при тактовой частоте 4Мгц, при этом микроконтроллер действительно ничего не делает, а находится в режиме SLEEP. Время задержки определяется по формуле: Кделх256/4000000, где Кдел - коэффициент делителя тактовой частоты.

Вот пример программы для задержки 64мкс:

ldi r20,1<<TOIE0

out TIMSK,r20 ;Разрешение прерывания от таймера Т0

ldi r20,1 out TCCR0,r20 ;Коэффициент деления 1 (для задержки 64мкс) sei ;Разрешение прерывания

ldi tmp,1<<SE ;Переход в спящий режим

out MCUCR,tmp

sleep

При этом микроконтроллер можно не переводить в режим sleep, а заставить его выполнять в это время что-то другое вместо пустых NOPов или ещё чего-то

Вот это уже что-то похожее на правду) А для какого МК эта команда, если не секрет? И на каком языке написана?

Во первых: был задан вопрос как сделать так, чтобы МК ничего не делал во время задержки 64мкс - NOP, не являяется таковой командой. И вообще нет таких команд, при которых МК "ничего не делает". Ничего не делает он только если находится в спящем режиме - sleep, при этом выполняется необходимая задержка.

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

зачем его умножать на 80h? если проверить завершения преобразования можно элементарно с помощью JNZ
Это для того, чтобы биты, не причастные к процессу, не навели порчу на этот самый процесс. Ибо команде проверки на равенство нулю, так же, как и Вами упомянутой "Переход, если не нуль", с помощью которой Вы планируете проверять завершение преобразования, совершенно безразлично, содержимое какого бита отличается от нуля.

И еще: я как-то не очень то уверен, что JNZ в состоянии самостоятельно, без дополнительных команд, выполнить проверку на ноль.

Да, кстати - а какой у Вас всё ж таки МК? Ибо в своём после Вы указали даташит на MC68HC11A8P, в то время как в системах команд у Вас присутствуют JPO, JNZ. Ведь вроде как Моторола для мнемоники команд своих МК традиционно использует не джампы, а бренчи.

Удачи!

По поводу JNZ...естественно, что ей совершенно безразлично, содержимое какого бита равно нулю...я просто подумал, что если значение бита изначально 00000000 а потом оно делается 10000000 то JNZ может уловить разницу, поправте меня, если я ошибаюсь. По поводу мнемоники согласен, ибо литература по МК МОТОРОЛА у меня Шагурин... а в даташите я не нашел списка команд, поэтому буду благодарен, если кто-то поделится литературой или ссылочками..

P.S. Я даже и не знал, что банальная программа, которая обеспечивает задержку 128 Тс с помощью таймера может быть такой сложной(((

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

я просто подумал, что если значение бита изначально 00000000 а потом оно делается 10000000 то JNZ может уловить разницу, поправте меня, если я ошибаюсь.
Просто в большинстве случаев команды условных переходов анализируют состояние регистра флагов (варианты названия: регистр состояния, слово состояния). Флаги всегда изменяются при выполнении логических/арифметических команд; команды же пересылки довольно часто состояния флагов не изменяют, т.е., напр., если для аккумулятора выполнить исключающее или с самим собой - установится флаг нуля, который после засылки в аккумулятор числа, отличного от нуля, из ячейки памяти может и не измениться. Все МК я, естественно, не знаю, и поэтому насколько это так для конкретного типа - надо смотреть особенности системы команд этого конкретного МК.

Удачи!

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

И все таки, коллеги, тема вопроса не раскрыта...

Повторяю, на всякий случай вопрос: какие регистры таймера используются для создания задержки кратной Тс?

Спасибо!

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

буду благодарен, если кто-то поделится литературой или ссылочками..

Вот обобщённая таблица, в которую когда-то была сведена система команд микроконтроллера MC68HC11A8. Откуда скачал - не помню, да и сам лично с ней не работал.

В качестве благодарности с Вас при встрече семь маленьких... :)

Удачи!

mk_2_add_2.zip

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

  • 2 месяца спустя...

Есть такой вариант: в CVAVR есть волшебная функция delay_us(). Она написана на асемблере, если не нравиться С, можно выдернуть код из delay.lib

Электронщики всего мира объеденяйтесь!

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

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

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

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

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

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

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

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

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

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

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