Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт апр 26, 2018 20:56:29

Так вот была же, надежда. Из-за фразы из апноута

the picoPower BOD can be turned off in Extended Standby, Standby, Power Save and Power Down modes

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт апр 27, 2018 05:06:18

Я так понял, что BOD может быть ВЫКЛЮЧЕН

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт апр 27, 2018 07:01:50

Так вот была же, надежда. Из-за фразы из апноута

the picoPower BOD can be turned off in Extended Standby, Standby, Power Save and Power Down modes

дайте полную цитату или даже ссылку на апноут. отсутствие начала фразы не позволяет понять её смысл однозначно.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт апр 27, 2018 09:29:06

В качестве пятничной развлекухи загрузил программу ниже. Тактирование 128кГц, напряжение питания 3,6V. Ток потребления 14,1 mkA.
Включил BOD 2,7V ток потребления вырос до 34,0 mkA. Импульсы как были, так и остались.
Вывод, хотя программа успевает переключиться из режима POWER DOWN в IDLE в отведенные 3 такта между установкой BODS и переходом в SLEEP БОД остается включенным.
Переход в SLEEP POWER DOWN выполняется с отключением БОД и током потребления 0,0...0,1mkA.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт апр 27, 2018 15:00:09

Что и требовалось подтвердить, как говорится) akl, спасибо за поддержку эксперимента!
А вот тот самый аппноут:
Вложения
Innovative Techniques for Extremely Low Power Consumption.pdf
(324.92 KiB) Скачиваний: 274

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вт май 01, 2018 08:02:24

Производитель МК выпускает множество разновидностей даже для одного наименования.
Каждая разновидность может иметь незначительные отличия в неоговоренных стандартно-обязательными требованиями параметров.
Надеяться на повторимость программ, подогнанных на те нюансы не есть хорошо - ибо повторимость будет весьма.... проблемна.
:(

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 09:09:45

Всем добрый день!
МК: tiny2313
Не получается написать программу. Принцип работы как у таймера/счетчика Т0 в режиме коррекции по фазе. Т.е. мне нужно держать число в диапазоне от 0х00 до 0хFF. Если (.def R17 = count) в счетчике значение 0х00 - инкрементируем до 0хFF. Если в счетчике значение 0хFF декрементируем до 0х00. Значения 0х00 и 0хFF за, как бы "период", встречаются у нас по одному разу.
Я пытался ветвить программу используя команды cpse, cpi и команды для установленного/сброшенного флагов Z и С. Но чего то не хватает...
Как ветвить программу, если значение, допустим 0х8D? Как МК узнает в какую сторону двигаться?
Спасибо!

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 09:18:55

Собственно совпадение отлавливается любой из команд неразрушающего сравнения.
Далее переход в начало обработчика того, за что то совпадение отвечает.
Если подпрограммы обработки в случае совпадения разный можно или дополнительный
флажок использовать или "косвенный переход" вида ICALL/IJMP
с предварительно выставленным в Z целевым адресом.
Да и иных методов много - смотрим по наиболее удобному варианту.
8)
Примерно так
Z=адрес целевой прожки
rmask=нашей контрольной маске
rcnt текущий счетчик
...
cpse Rcnt,Rmask
rjmp no_mask
icall или ijmp
no_mask:.....
:dont_know:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 10:47:22

Ну оно и понятно почему у вас ничего не получается. Вы же даже задачу сформулировать толком не можете. Большая часть задачи осталась у вас в голове, а тут телепатов нет.
Как МК узнает в какую сторону двигаться?

В какую скажете, туда и будет двигаться.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 11:05:04

Переменная-флаг, ветвление по флагу - если фолс тот инкремент, если тру - декремент. Флаг меняем в крайних точках - 0 и 255. Удачной генерации пилы

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 13:34:30

Alexeyslav писал(а):Вы же даже задачу сформулировать толком не можете.

Задачу
dumbass писал(а): мне нужно держать число в диапазоне от 0х00 до 0хFF.
считал функционально законченной, поэтому и не стал выдавать всех тайн :)
Общая задача такова: есть мк тини2313 с 2-мя св-диодами, подключенных к выводам PD5 и PB2. В МК настроен т/сч Т0 в режиме корректировке по фазе.

Инкрементировать "count" хочу в прерывании канала А. Прерывания в канале В и по переполнению пока пусть будут.

мои идеи:

но все будет работать ровно до момента, когда в count будет число 0xFF, затем вычтеться единица. И значение снова будет inc, т.е. моя переменная/счетчик count подвиснет в значениях 0xFF-0xFЕ-0xFF-0xFЕ-0xFF и т.д.

BOB51 писал(а):Если подпрограммы обработки в случае совпадения разный можно или дополнительный
флажок использовать или "косвенный переход" вида ICALL/IJMP

Ярослав555 писал(а):Переменная-флаг

не знаю как воспользоваться данными рекомендациями, т.к. не могу представить как оно будет выглядеть "в живую".
Спасибо!

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 13:46:32

Тогда понятно. переменная-флаг может принимать значения 1 или 0, если 1 идем вверх, если ноль - вниз. Доходим до упора меняем значение переменной на противоположное 1<>0, или жестко устанавливаем в зависимости от того до какого упора дошли.
Можно использовать переменную целый байт, а можно и отдельный бит регистра, где можно хранить и другие переменные-флаги.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 15:40:14

В качестве переменной-флага решил исп. пользовательский флаг Т

Пока как то так...
1 хорошо/плохо?
как лучше?
2 код выравниваю пробелами, но когда отправляю сообщение, выравнивание пропадает( что можно сделать?
Спасибо!

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 16:01:57

Вообще-то Т использовать можно по-любому...
Однако для флагов все же лучше отдельный регистрв "старшей" половине регистрового файла(очепятался... :oops: ).
У Т более интересные возможности/назначение.
8)
Последний раз редактировалось BOB51 Чт май 03, 2018 08:47:50, всего редактировалось 1 раз.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 17:32:35

В качестве флагов очень удобно использовать регистр GPIOR, там где он есть и расположен в первой половине адресов ввода-вывода, или даже другой не используемый в данной программе. Команды cbi и sbi не изменяют регистр состояния SREG.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 20:34:00

BOB51 писал(а):регистрв "старшей" половине РСФ.

А что такое "РСФ"?
BOB51 писал(а):У Т более интересные возможности/назначение.

Для таких действий этот бит правильнее всего использовать?

trofim2 писал(а):В качестве флагов очень удобно использовать регистр GPIOR

Про такой не слыхал до ныне, спасибо!
А вот та же программа, что и выше, только теперь наш флаг хранится в GPIOR.

Объем этого кусочка кода эквивалентен предыдущему варианту
На практике все работает)
https://cloud.mail.ru/public/Abag/WST2rQ2m8

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср май 02, 2018 22:24:22

Флаг T можно использовать только в случае если он больше нигде не используется. Так забудете что его задействовали, используете удобные команды BLD/BST где-то и будете долго удивляться очень забавному поведению программы на ровном месте. Или второй аналогичный счетчик захочете орагнизовать... а бит-то ОДИН!
Кстати ещё одна интересная ситуация - подумайте, как вы можете изменить состояние этого бита в обработчике прерывания.... при том что на входе вы сохраняете регистр состояния, а на выходе восстанавливаете и всё что менялось в обработчике идёт под хвост.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт май 03, 2018 07:07:09

Уточню. Режим Phase Correct PWM будет изменять состояние OCR0A, OCR0B в момент TOP=FF. При этом за счет двойного буфера возможно заносить значение в любой момент. Прерывания по сравнению не нужны, остаются только прерывание по переполнению.
Вложения
PWM_CORRECT_OC0.PNG
(35.28 KiB) Скачиваний: 348

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт май 03, 2018 10:02:53

Alexeyslav писал(а):при том что на входе вы сохраняете регистр состояния, а на выходе восстанавливаете и всё что менялось в обработчике идёт под хвост.

Да, точно! Долго потом можно будет ошибку искать...
akl писал(а):Прерывания по сравнению не нужны, остаются только прерывание по переполнению.

В прерывание по переполнению Т0 вставлял фрагмент с определением числа - да, все работает. Прерывания по каналу А и В можно вовсе отключить, главное настроить выводы СОМ0А(В)1(0).
Поясните, пожалуйста, еще такой момент: Когда происходит совпадение в канале (любом), на следующий такт после совпадения должен установится флаг прерывания и вывод ОС0 изм. свое состояние. В АВР Студии 4.19 выводы изм. свое сост. спустя 2 такта после совпадения значений. Почему, если должно быть на следующий такт после совпадения? Ошибка отладчика?
Фото потактовой отладки прикладываю

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт май 03, 2018 10:53:42

а если уменьшить количество условий: всегда прибавлять, только прибавлять переменную - сначала в ней 1, когда дошли до верха в неё впишем -1 (0xFF), когда спустились обратно до 0 вписали в неё снова 1, так он и будет качаться...
Ответить