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

Задержки В Avr


photon62

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

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

Можно таймером, там все четко. Запустил, и в нужный момент получил прерывание.

А можно просто циклом, подсчитать вполне реально но стоит задаться вопросом, нужна ли такая точность? Потом, если все-таки нужно то можно подсчитать количество тактов прогоняя алгоритм задержки в симуляторе - он точно подскажет количество тактов.

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

Пауза в милисек

delay_ms(переменная или константа склько милисек нужно);

Пауза в мкрСек

delay_us(константа склько милисек нужно);

Это в CodeVisionAVR - компиляторе удобном для начинающих - http://www.google.ru/search?hl=ru&lr=&newwindow=1&q=%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80+CVAVR+-+CodeVisionAVR+&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&aq=f&aqi=&aql=&oq=&gs_rfai=

В других компиляторах есть аналогичные фуункции.

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

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

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

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

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

Можно таймером, там все четко. Запустил, и в нужный момент получил прерывание.

А можно просто циклом, подсчитать вполне реально но стоит задаться вопросом, нужна ли такая точность? Потом, если все-таки нужно то можно подсчитать количество тактов прогоняя алгоритм задержки в симуляторе - он точно подскажет количество тактов.

а можно примерчик какой нибудь

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

На Асме.

         .....

         ldi r16,100     :загружаем кол-во циклов задержки в R16

delay:

         dec r16           ;уменьшаем содержимое R16 на 1

         tst r16            ; проверяем достигло ли содержимое R16 нуля

         brne delay      ; если нет возвращаемся на метку delay

         .....

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

Стёртая цитата!!! Wowa.

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

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

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

戦う前に相手のベルトの色に注目

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

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

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

Прерывание в любом случае "убивает" точность таких задержек.

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

В таком случае, алгоритм задержки несколько усложняется - настраиваем таймер(значение его равно $00-<выдержка, тактов>), запускаем и ждем переполнения таймера - таким образом у нас имеется независимая от обработчиков прерывания задержка. Если надо больше чем обеспечивает таймер - вызываем это все в цикле как выше был приведен.

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

Учение - изучение правил. Опыт - изучение исключений.

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

При условии, что есть в наличие свободные таймеры. Бывает, что их не хватает.  :) И в то же время, если задержка большая, то приходится даже считать кол-во переполнений таймера. В таком случае "завешивать" МК на секунды в цикле нецелесообразно. Все зависит от типа задержки и ее продолжительности (интервала). 

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

А если просто ввести переменную,тикать таймером и в переменную писать 1,2,3.... и допустим 255,в зависимости от типа.255*255=65025.

С точностью проблемы будут?

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

Возможно.

Я вам рекомендую использовать для программирования AVR компилятор CodeVisionAVR - станет граздо проще разбираться и работа будет продуктивнее.

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

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

Фи, какой мутный жаргон...

-"убивает" контроллер, расквантовать время...

Методы построения задержек определяются свободными ресурсами и временной диаграммой.

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

Прежде чем обсуждать методы, необходимо определиться с алгоритмом в котором она потребна.

戦う前に相手のベルトの色に注目

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

>>Я вам рекомендую использовать для программирования AVR компилятор CodeVisionAVR

ИМХО: Если кроме AVR ни чего больше изучать не будете, CodeVisionAVR Ваш выбор. Если планируете изучать и другие МК, возьмите GCC или IAR. Сложность на начальном этапе изучения, компенсируется в дальнейшим, при переходе на другие МК. К тому-же легче изучать что то новое чем переучиваться.

Прежде чем обсуждать методы, необходимо определиться с алгоритмом в котором она потребна.

+1000

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

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

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

Я для расчёта задержек применяю удобную программу AVRdelayloop

post-46208-1277970396,82_thumb.png

Просто вводим частоту микроконтроллера и желаемую задержку. и всё.

Скачать можно тут

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

  • 2 года спустя...

Всем добрый день. Может ли кто-нибудь подсказать алгоритм создания программной задержки для AVR, например- ATMega32? Только ASM для меня- слишком сложно, пишу на Си. Достаточно будет устного объяснения алгоритма, ну или где можно ( саму суть) почерпнуть знаний, а если и пример на Си... Вообще здорово!

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

Спасибо за отклик, только я с стандартной библиотекой работать умею)), и вот она занимает не значительную, но все же часть flash памяти контроллера. Соглашусь, что процессор с большим объемом памяти при желании приобрести не проблема да и не настолько это трагично. Это спортивный интерес)), написана библиотека работы с LCD дисплеем от Nokia6610 и вот в ней хочу задействовать задержки которые будут зависеть от частоты работы контроллера. Где-то в сети видел пример, но не сохранил.. Было следующее (могу ошибаться)- в шапке программы указываем частоту на которой работает контроллер, создаем функцию нашей задержки и в цикле ?! считаем количество тактов, которые и формируют нашу задержку. Надеюсь объяснил не слишком туманно. Видел примеры задержек с помощью таймеров, но для меня они пока не изучены, вот думаю попробовать в деле свою функцию без использования оных.

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

На Асме.

         .....

         ldi r16,100     :загружаем кол-во циклов задержки в R16

delay:

         dec r16           ;уменьшаем содержимое R16 на 1

         tst r16            ; проверяем достигло ли содержимое R16 нуля

         brne delay      ; если нет возвращаемся на метку delay

         .....

эта команда совершенно лишняя, т.к. флаг Z также =1 при нулевом результате операции DEC R16

в репу каждому, кто отсылает в гугл !!

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

На Си сделать задержку "вживую" попросту невозможно - она будет зависеть от такого количества факторов, что все не сможешь учесть. Компилятор может посчитать такую задержку лишней тратой ресурсов и соптимизировать её до пустоты.

Поэтому хочешь не хочешь, а задержку писать на ассемблере. Вот как-то так:

delay_step: // задержка для одного шага
 ; рассчитаем примерное количество тактов на 10мс -
 ; N = 0.01c*4800000Гц = 48000
.EQU ds_inner_cycles = 256*4
.EQU ds_lpsc = (one_step_delay_ms * CPU_freq) / ds_inner_cycles

LDI loopscount, ds_lpsc ; внешний цикл. 46*1024
l_loop1:
LDI loopscount2, $00 ; 256 итераций. 1024 такта
l_loop2:
NOP	 ; 1*N
DEC loopscount2 ; 1*N
BRNE l_loop2	 ; 2*N
DEC loopscount
BRNE l_loop1
RET

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

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

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

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

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

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

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

    • Я вскрываю металлической линейкой. Очень часто у таких блоков есть паз вдоль шва, туда вставляю линейку по всей длине шва и как рычагом вскрываю корпус. Если вначале немного промять корпус вдоль шва (бывает достаточно пальцами), то шансы легко вскрыть значительно увеличиваются.
    • При включении в ранее опубликованном виде устройство стало генератором. Частота до 140кГц, на индуктивности размах (от мин. до макс.) до 20В при напряжении на испытуемом БП ~3В. Добавил несколько конденсаторов, в том числе как рекомендовали Z_VIP и Starichok. Немного изменил номиналы резистора в компараторе. Удалил шунтирующее сопротивление на резисторе регулятора тока. Компаратор буду еще отлаживать - в приведённой ниже схеме срабатывает при 4В, но не не отпускает при отсутствии напряжения.  Ограничение тока выставил на 4А. Регулировка тока плавная от 0 до  4А. Выставленный ток стабильный при изменении напряжения от 1В до 10В. Напряжение выше 10В пока не поднимал. Ниже 0,95В ток снижается пропорционально напряжению. Схема в приложении. Все изменения-дополнения делал на существующей плате навесным монтажом. Позже выложу актуальную разводку. Отлаживал с транзисторами AP60T30 (ранее выкладывал фото транзисторов на радиаторе) - без обдува при комнатной температуре длительно держат 20Вт (10В, 2А) при температуре радиатора ~40гр.C. Приобрёл транзисторы IRFP460. С радиатором пока не определился. Схема и фото отладки на текущий момент времени. На фото стрелочный прибор - амперметр с током полного отклонения 6А. и в DipTrace:  
    • Ведь этож надо... такое совпадение. И я тоже делаю без сверлений. Более того, прилагаю фото имеющихся у меня  "хоть чуток острых предметов", несмотря на наличие которых, столь несложный и общедоступный  способ зачистки, к.м.к.  имеет право на демонстрацию в данной теме. Вдруг кому-то пригодится... Тем более, что тема простаивает аж с марта, будто на белом свете нет ничего, что можно было бы сюда  разместить,  хотя бы для сведения. 
    • В описании сказано, что МК включится после размыкания кнопки включения.
    • Мои слова ни как не относятся к тому куску кода Знаете что такое функция, аргумент, результат?
    • Устройство сделано на базе МК ATtiny44A. Так как девайс нужен был мобильный, то в качестве индикатора был выбран модуль ЖКИ на НТ1621. Схема устройства: Так как питание девайса 3 В, то пришлось на плате дисплея заменить резистор контрастности и резистор подсветки ЖКИ. R1 установил 4,7 кОм в место 20 кОм, а R2 в место 100 Ом поставил 300 Ом. Прошивка для МК: test_LCD.hex МК тактируется на заводских установках (от внутреннего генератора 1 МГц.)   Аккумулятор Li-ion 1100 мАч. В качестве зарядного устройства, используется модуль ТР4056.   При полной зарядке аккумулятора, устройство работает без подзаряда около 27 дней. Индикатор на дисплее, помогает визуально контролировать уровень заряда для последующей подзарядки аккумулятора. При напряжении на аккумуляторе ниже 3,4 В подсветка индикатора гаснет для снижении потребляемого тока. Подсветка гаснет и в ночное время (при недостаточном освещении), чтобы свет дисплея не мешал во время сна.
    • @korsaj Ну согласно твоих слов и этот код примерно тоже самое и получается. Я и не вижу особых отличий. Но нужно только как то доработать чтоб оно работало. В том то всё и дело что оно не работает. А учитывая как раз таки что мне нужны будут определённые фрагменты где хранятся данные, то это очень хорошее решение, но нужно его доработать до рабочего состояния.
×
×
  • Создать...