Замечу, тема называется Таймеры/счётчики в AVR и предполагает использование таймеров AVR для отсчета временных интервалов. А задержки на циклах делаю без калькуляторов. Например, вышеупомянутая задержка 4600нсек в моем понимании
моя задежка это функция от переменной при переменной равной 0 это 4600нсек при переменной равной 1 это 4650нсек при переменной равной 2 это 4700нсек и т д
исправил недосмотрел ..у Вас задежка но с шагом 3 такта .. моя с шагом в 1 такт
Добавлено after 9 minutes 32 seconds: Vov123
запустите модель .. с каждым нажатием задержка увеличивается на 50нСек
не 150 не 100 . а 50 нСек ровно 1 такт жать можно 65530 раз и каждое нажатие увеличит задержку на 50 нСек .. потом переполнеие саму продедуру не покажу .хочу чтобы кто- то сделал лучше .
Добавлено after 3 minutes 4 seconds: Jack_A будет будет .. шляпу сьешь?
Добавлено after 1 hour 16 minutes 5 seconds: Вместо того чтобы выяснить реальное состояние дело эта ххххх akl минусует
Теоретически на таймере можно настроить вызов прерывания с точностью 1 такт. Минимальное время будет где-то тактов 10-20. Без аппаратных модулей получить такую точность в широком диапазоне почти нереально, и минимальная будет те же 10-20 тактов. Хотя... Если сначала загрузить в ZH:ZL адрес процедуры и, при необходимости, в Х - аргумент. А потом в нужный момент icall'ом на выбранную процедуру
Код:
DELAY_8:nop ;8тактов DELAY_7:ret ;7 тактов
DELAY_16VAR21:nop ;задержка 16Х+21 такт ... DELAY_16VAR9:nop ;задержка 16Х+9 тактов DELAY_16VAR8:nop ;задержка 16Х+8 тактов DELAY_16VAR7:nop ;задержка 16Х+7 тактов DELAY_16VAR6: ;задержка 16Х+6 тактов push XL ;2 такта pop XL ;2 такта rcall DELAY_8 ;8 тактов sbiw X,1 ;2 такта brne DELAY_0VAR16 ;2 такта (1 такт в последний раз), суммарно 16Х тактов ret ;4 такта -1 с прошлой команды. С учетом icall - 16X+6
DELAY_3VAR8:nop ;3Х+8 тактов DELAY_3VAR7:nop ;3Х+7 тактов DELAY_3VAR6: ;3X+6 тактов dec XL brne DELAY_0VAR8 ;3 такта ret
Тут получилось нарисовать 3 процедуры - 7(8) тактов, 3Х+Y (9-776) тактов и 16Х+Y (от 22 до ~1e6, 50мс) тактов. Кому надо больший диапазон - вперед по шаблону Придумывать процедуру выбора подходящей процедуры и аргумента по входному значению мне неохота. Но, надеюсь, идея понятна.
Такое дело. Организовал fast-pwm на mega8 В железе нет еще, симуляция в Протеусе. При записи в OCR ноля все равно есть ШИМ с минимальной скважностью на выходе. А при 255 опять же не в единицу выход ставится, а максимальная скважность есть. Это так и должно быть? Я чото грешным делом думал, что при нуле в регистре, на выходе ноль должен быть, а при 255 единица.
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Теоретически на таймере можно настроить вызов прерывания с точностью 1 такт. Минимальное время будет где-то тактов 10-20.
На практике, использование аппаратных возможностей таймера позволяет получить минимальную длительность импульса равную 1 такту и период следования оных 2 тактам. Справедливо для OCxB. С учётом того, что занесение нового значения сравнения производится через буферный регистр формирование временной диаграммы происходит без глюков.
Всем привет! Помогите, пожалуйста, с таким заданием.
Необходимо создать программу, циклически "перемещающую" огонёк по цепочке светодиодов, подключённых к порту B микроконтроллера ATtiny2313. Для создания задержки между шагами (от 0,1 секунды до 1 секунды) использовать один из встроенных таймеров-счётчиков.
Помогите, правильно настроить инициализацию таймер счетчик и регистр прерываний.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2687 Откуда: г. Чайковский
Рейтинг сообщения:2 Медали: 1
Что за хрень на пикче, какой-то автокод?
evgen_kz писал(а):
Необходимо создать программу, циклически "перемещающую" огонёк по цепочке светодиодов, подключённых к порту B микроконтроллера ATtiny2313.
К каждому порту светодиод подключен и их всего 8? При возникновении прерывания от таймера: значение PORTB сдвигаете через флаг С; Если С то PORTB =0x01 или 0x80 ( в зависимости направления сдвига)
evgen_kz писал(а):
Для создания задержки между шагами (от 0,1 секунды до 1 секунды)
Наверное в Вашем задании было значение шага изменения времени и условие изменения.
evgen_kz писал(а):
Помогите, правильно настроить инициализацию таймер счетчик и регистр прерываний.
Тактовая частота МК очень не последний параметр для данной задачи.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Доброго дня.Небольшой вопрос.Контроллер Attiny13A.На выходах OC0A и OC0B требуется получить противофазный сигнал.Таймер работает в режиме CTC.В регистрах сравнения OCR0A и OCR0B находиться одинаковое число.Биты COM0...настроены на переключение в противоположное состояние при совпадении.Порты также предварительно настроены(0 и 1). Все работает как и положено,кроме одного-порты переключаются синфазно.Proteus и Avr Simulator показывают,что все зашибись.В Avr Studio и в железе не работает так,как нужно. Как добиться противофазной работы?Где и на чем я споткнулся?Спасибо.
Добавлено after 1 hour 43 minutes 32 seconds: COKPOWEHEU СПАСИБО!.Разобрался.Действительно помогло.Установил биты вот так-( 0<<FOC0A|1<<FOC0B)-и все заработало,как и требовалось.Состояние выводов порта В OCR0A и OCR0B при этом оказалось совсем неважным,синфазные или противофазные сигналы на них выставлены изначально.А вот здесь прошу объяснить-по даташиту,если я правильно понял,биты FOC0A и FOC0B только принудительно изменяют состояние соответствующих выводов,не сбрасывая при этом счетный регистр,то есть он и далее продолжает считать до значения,установленного в регистрах сравнения.Тогда каким боком регистры FOC0A и FOC0B участвуют в процессе переключения????????????
Доброго времени суток. Есть задача: управление цветом RGB-ленты посредством трех потенциометров. Сделал на Attiny261A, используя три АЦП и три аппаратных ШИМа. Все, вроде работает, но не совсем так, как рассчитывал. Программа:
Проблема в том, что если не инициировать значение на D-канале ШИМа единицей (любым ненулевым числом), он не работает до тех пор, пока значение АЦП, которое ему передается, не изменится. Т.е. при volatile unsigned char value_ADC[3] = {0, 0, 0} (значения с АЦП, передающие в OCR1A, OCR1B и OCR1D соответственно) в программе и, например, 127 на выходе соотв. АЦП, на выводе OC1D висит ноль, пока значение с АЦП не поменяется на 126 или 128. Если прописать volatile unsigned char value_ADC[3] = {1, 1, 1} в программе, все работает без проблем. В принципе, мне и так норм, но просто интересно, почему так. Вроде как разницы между A, B и D ШИМами быть не должно, а она есть.
_________________ We do what we must because we can (c) GLaDOS
Вопрос по асинхронному 32768 Гц таймеру в Atmega88 и подобных. Запустится ли его генератор, если кварц подключить к чипу без каких-либо конденсаторов? Пытаюсь развести плату для очень мелких наручных светодиодных часов - из-за этих конденсаторов дороги к кварцу приходится тянуть через всю плату (порядка 40 мм каждая, на расстоянии 0.2..0.5 мм от цифровых линий). Или это тут менее критично, чем отсутствие конденсаторов?
_________________ Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
В некоторых ATmega8 баг из-за которого конденсаторы не включаются. На счет 48-328 согласен - там не встроены. Про фуз вы, очевидно, невнимательно прочитали. Неужели конденсаторы нельзя скажем с обратной стороны припаять? Без них может запуститься, но это не гарантируется, как не гарантируется и точность частоты. У меня так и было - кварц запустился, но частота была далека от заявленной.
Сейчас этот форум просматривают: 240265 и гости: 42
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения