а если уменьшить количество условий: всегда прибавлять, только прибавлять переменную - сначала в ней 1, когда дошли до верха в неё впишем -1 (0xFF), когда спустились обратно до 0 вписали в неё снова 1, так он и будет качаться...
к юинту прибавить инт? я на асме ни строчки не написал, но боюсь что это нифига не просто.
наверно ту тему уже порешили... я про ШИМ писал, который до 255 умеет и которому надо 0-255-0...и.т.д. , тоесть байт с байтом сложить (вычесть - некритично). если переменная в регистре - ничего сложного, если в оперативе - ну сначала вытащить придётся.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Контроллер никак не различает знаковые и беззнаковые числа он с ними работает абсолютно одинаково. Разница только в том как интерпретируется результат, и для знаковых чисел есть специфические команды. Кроме того, из-за нехватки опкодов в системе команд отсутствует команда сложения с константой, вместо неё используют команда вычитания(SUBI/SBCI) с константой являющейся дополнительным кодом к слагаемому. В ЯВУ эти все особенности скрыты за 7-ю печатями.
...А вот та же программа, что и выше, только теперь наш флаг хранится в GPIOR...Объем этого кусочка кода эквивалентен предыдущему варианту На практике все работает)
В качестве пятничной развлекухи, код работающий только по переполнению таймера. Счетчик работает в режиме качания. Спойлер
Код:
;04.05.2018
.include "tn2313def.inc"
.def count =R17
.cseg .org 0x00
rjmp init
.org 0x06 RETI ;(0х06) Переполнение таймера/счетчика Т0
INIT: ldi R22,RAMEND out SPL,R22
SBI ACSR,ACD
SER ZH
out DDRB,ZH ;порты на выход 0 out DDRD,ZH OUT DDRA,ZH
LDI R22,1<<SE OUT MCUCR,R22 ; SLEEP IDLE
;НАСТРОЙКА ТАЙМЕРА/СЧЕТЧИКА Т0 ldi count,0x01 ;Задаем начальное значение out OCR0A,count out OCR0B,count
ldi R22,(1<<COM0A1 | 0<<COM0A0 | 1<<COM0B1 | 1<<COM0B0 | 1<<WGM00) out TCCR0A,R22 ;Выводы изм. сост. инверсным способом
ldi R22,1<<CS00 ;1<<CS02 1/256 (в работе делитель такой, в отладке 1/1) out TCCR0B,R22
ldi R22,1<<TOIE0 ; ldi temp,1<<OCIE0A ;| 0<<TOIE0 | 1<<OCIE0A) out TIMSK,R22 out TIFR,R22
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт май 08, 2018 16:56:15
Встал на лапы
Зарегистрирован: Вт мар 31, 2015 01:12:46 Сообщений: 89
Рейтинг сообщения:0
Интересные у Вас пятничные развлечения)) Несколько вопросов по коду (если можно, ответьте по пунктам пожалуйста): 1 Вы отключили аналоговый компаратор, полагаю для экономии энергии в спящем режиме, так ли это? Насколько важно перед отключением аналогового компаратора сделать такие действия: «Для выключения компаратора бит ACD следует установить в 1. Перед изменением состояния этого бита прерывание от компаратора следует запретить во избежание случайной генерации прерывания.»? 2 out TIFR,R22 – эта строка сбрасывает флаг прерыв. по переполнению Т0. Для чего это необходимо делать, если таймер явно не успеет переполнится? Далее все понятно, логика работы интересная. Спасибо, очень познавательно!
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
У меня это типовая инициализация состояния контроллера. Как правило, периодически, после выполнения какого-то цикла программа возвращается в начало, подтверждая инициализацию. -1 Если компаратор не используется, логично его отключить, чтобы он всегда не потреблял свой ~1мА. -2 TOV0 может срабатывать не только по переполнению, а ещё и в зависимости от режима работы. Например, установив режим WGM2...0=1, флаг устанавливается при TCNT0=0.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 13, 2018 11:23:46
Встал на лапы
Зарегистрирован: Вт мар 31, 2015 01:12:46 Сообщений: 89
Рейтинг сообщения:0
Всем доброго времени суток! Есть интересный вопрос по сторожевому таймеру (далее ст.т.) Какую частоту имеет сторожевой таймер в режиме отладки в АВР_Студии 4.19? Из моих наблюдений: ст.т. настроен на период тайм-аута -- 64мс. В режиме отладки программа показала 524,29мс. Тогда, период одного такта = 524,29/8192(колв тактов, указано в справочнике)=0,064мс Частота работы ст.т. = 1/0,064мс=15619Гц При настройки ст.т. на 16мс частота почти такая же. Что скажите по этому поводу? Спасибо!
Кто-нибудь в курсе почему при генерации .lst файла (студия 4.19) исходник съезжает на одну строку вниз относительно расставленных адресов команд? Все это время "до" ругался на протеус - мол это он компанует исходник со сдвигом. Потом заметил что это таки студия корень проблемы. Исследуя вопрос заметил что встречающийся в коде макрос, исправляет ситуацию. Баг AVRASM2?
... Ну и просмотр ессно или в самой АВРстудио (открываем соответствующий файл, появившийся в папке output после компиляции в окне проекта) или в нормальном редакторе.
кстати.... Такой "снос" за все время работы с разными компиляторами НИКОГДА НЕ НАБЛЮДАЛ.
Предыдущие скрины были из Notepad++ Привожу скрин из самой студии сразу после компиляции. А у меня за много лет работы такой "снос" возникал не единожды, как на работе (вин 7) так и на домашнем ПК (вин 10). Причем зачастую происходит так: я создаю проект, постепенно наполняю его кодом и все идет нормально. Но в какой-то момент происходит "сдвиг", и что характерно - если из такого проекта удалить практически все оставив только таблицу векторов прерываний и инициализацию стека "сдвиг" все равно остается.
Проверил на работе, компиляция без ошибок, "сдвига" нет Вечером проверю на домашнем компе.
Закралась мысль, а что если проблема в стилях комментариев? Я вижу у Вас используется классика ";", в то время как я использую сишную нотацию "//" или блоками "/* */".
Открой и скомпилируй для пробы вот этот тест - проектик
Вложение:
extdi_2313.zip
да поглядямс чего будет (ибо ни семерки ни десятки в наличии нету).
Дома проверил, тоже все нормально. Опция "Version 2" включена.
Начал искать проблему методом исключения, удаляя участки кода и проверяя не пропал ли "сдвиг". Оказалось что проблема была в длинном (325 символов) комментарии записанном в одну строку Вот вам, блин, и недостаток монитора 27' - можно писать ооочень длиинные комментарии сижу ржу
Экспериментально установил что макс длина строки 264 символа. В хелпе бегло не нашел информации по ограничению. Благодарю всех принявших участие, в особенности BOB51.
При написания исходника (с возможностью последующей распечатки) нужно всегда ограничиваться форматом стандартного листа. Обычно это сразу заметно по "уходу за границы разметки" окна текущего текстового редактора. Автоперенос в ассемблере уже есть косвенный показатель некорректности длины строки. Потому и превышение длины строки да еще под ассемблером это штука РЕДЧАЙШАЯ. Как внешний редактор весьма удобно использовать DPAD (однако это лично мои предпочтения). Жаль только, что на сегодня этот проект закрыт... Кому интересно будет - могу через почтовик скинуть (там порядка 5 мегабайт с инсталятором и портабле вариантами).
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 08:59:48
Встал на лапы
Зарегистрирован: Вт мар 31, 2015 01:12:46 Сообщений: 89
Рейтинг сообщения:0
Добрый день! Как правильно настроить вывод ICP МК (тн2313), если в МК-ре т/с Т1 настроен в режиме захвата? В книге написано что на вход. А с подключенным подтягивающем резистором или вывод должен "висеть в воздухе"? По-идее разницы быть не должно...да и на практике, вроде бы, ничего не изменилось. Но все же как правильно? Спасибо!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения