Страница 251 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 14, 2015 08:03:30
СКАЗОЧНИК
Привет всем еще раз. )
Возник у меня очередной тупой вопрос.
Есть некое число, которое представлено 25ю байтами в оперативке (может во флеше) МК АТТИНИ2313. Можно ли с ним делать операции сдвига? Как вообще нормально с ним работать?
Цель, сделать бегущий огонь. Описание его здесь:
http://radiokot.ru/forum/viewtopic.php? ... 7#p2304817
Как в итоге узнавать, что в конце числа уже есть единица? Как делать сдвиг 200 битового числа, чтобы последняя единица (единицы) не вываливались?
З.Ы. хочу обратить внимание, что
ИМЕННО 200 светодиодов в линию и
именно 25 регистров распаяно для их управления. Бежит огонек от одного конца к другому только ОДИН. остается в конце строки. ЗА ним следующий падает на первый и тоже остается уже вторым с конца. За ними третий. и т.д. до заполнения всей строки.
З.З.Ы. Спасибо. Уже сам все победил. Осталось только по таймеру выровнять.
Если у кого-то будут интересные предложения, обязательно выслушаю. А пока я сделал свой извращенный алгоритм и он работает в железе, не занимая оперативки. Все на циклах и числа в 200 бит как такового не существует...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 14, 2015 12:38:17
Engineer_Keen
LSL, LSR - сдвиг влево и вправо, выдвинутый бит остается в С, с обратной стороны задвигается 0.
ROL , ROR - тоже самое, но задвигаемый бит берется как раз из С, так можно двигать влево-вправо числа любой битности.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 14, 2015 16:40:47
СКАЗОЧНИК
Понял. Знаю такие команды.
Однако на данный момент, сделал по своему. и неоптимизированный вариант эффекта не занимает оперативной и флеш памяти. Используются только регистры. Сам эффект при компиляции 116 Байт. И 56 Байт начальная конфигурация МК. Я доволен.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 16, 2015 17:19:12
Flash.#13
Хелп, полез в
ШИМ с "точной фазой", (Phase Correct PWM) и дело не пошло (ATMega8). По описанию ШИМ в данном режиме меняет состояние ножки доходя до регистра сравнения, и затем счетчик реверсируется, и вновь меняет состояние ножки дойдя нули и обратно. В таком режиме вроде можно получить ровные прямоугольные колебания, их надо для пищалки, для звука будильника типа "пи". Обычный режим "быстрый ШИМ" запускается нормально, но с "точной фазой" чего-то не стартует. Нужна помощь, чего не так делаю:
Код: Выделить всё
sbi DDRB, 1 ;ножка OC1A вкл.
ldi R16, 0x00
out OCR1AH, R16
ldi R16, 0xFF
out OCR1AL, R16 ;вписали задержку 00FF в OCR1A
ldi R16, 0b11000001
out TCCR1A, R16 ;настройка
ldi R16, 0b00010001
out TCCR1B, R16 ;настройка и пуск
Вписал WGM13_10 1001 (Phase and Freguensy Correct PWM, с OCR1A), но ножка OC1A не меняет состояние

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт мар 17, 2015 07:19:06
ARV
для звука будильника типа "пи" сойдет и Fast PWM с "неточной фазой"

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт мар 17, 2015 14:33:35
Flash.#13
Неа, Fast PWM плохо звучит и плохо регулируется. Почти день мучил этот будильник, в результате увидел что даже с транзистором в режиме эмиттерного повторителя он слишьком тихий, было принято решение выковырять пищалку с ее обвязкой с "дешевого китайского будильника", и использовать МК как ее включатель.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт мар 17, 2015 15:21:49
ARV
извиняюсь за оффтоп, но может у вас со слухом что-то не то? я делал полифонический "звонок" на тиньке с FastPWM на 15 кГц - звук был отличный! а ШИМ с "корректной фазой" будет в2 раза меньше по частоте, следовательно заведомо хуже по тембру.
однако, для звука "пи" тембр малокритичен и скорее будет определяться типом излучателя, чем симметрией фазы ШИМ...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср мар 18, 2015 22:31:38
Flash.#13
ARV, излучатель - пищалка с корпуса ПК, не динамик, а мелкая круглая. Звучит тихо и не приятно. Не нравится, проще выковырять с будильника.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 09:02:55
ILYAUL
Каждая такая пищалка имеет собственную резонансную частоту , на которой она пищит громко и приятно. Так , что для начала ищите DS на нее
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 09:40:10
ARV
и при любом раскладе с пищалкой - от симметрии или асимметрии ШИМа ее звук не поменяется настолько, чтобы из неприятного стать приятным! речь только о проблеме ШИМа.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт апр 14, 2015 13:36:06
Gudd-Head
Сильно не пинайте, я сегодня не выспался.
Надо в зависимости от диапазона кода АЦП выполнить одну из N (пяти) процедур.
Кроме связки
Код: Выделить всё
cpi ADC, 100
brlo command_1;
cpi ADC, 150
brlo command_2;
cpi ADC, 200
brlo command_3;
...
или аналога с использованием
brge есть ли более изящное решение? Диапазоны в конечном итоге могут быть разной "ширины".
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт апр 14, 2015 17:50:35
viiv
Gudd-Head, а куда уж "изящней"? Закона для диапазонов нет, значит про вычисление адреса перехода речи не идет.
Можно "делением", но у тебя N маленькая - много не выиграешь.
Типа так:
Спойлер
Код: Выделить всё
; r24 - значение (0..50..100..150..200..255)
cpi r24, 150
brlo less_150
cpi r24, 200
brlo cmd_4
cmd_5:
; обработка [200..255]
...
cmd_4:
; обработка [150..200)
...
less_150:
cpi r24, 100
brlo less_100
cmd_3:
; обработка [100..150)
...
less_100:
cpi r24, 50
brlo cmd_1
cmd_2:
; обработка [50..100)
...
cmd_1:
; обработка [0..50)
...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт апр 14, 2015 18:29:27
Kavka
Gudd-Head, если по времени не критично, то можно да же не париться при таком количестве диапазонов.
viiv уже подсказал. Древовидный поиск/сравнение - классика. Типа B-tree (Б-деревья).
Можно уменьшить количество сравнений в худшем случае.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 06:22:07
akl
Сомневаюсь насчёт изящности, но может так.
Спойлер
Код: Выделить всё
.equ N5=150
.equ N4=140
.equ N3=130
.equ N2=120
.equ N1=110
.equ N0=00
.CSEG
.ORG $00
START:
LDS XL,$60
CLR ZH
LDI ZL,LOW(COMP_N*2)
COMPARE:
CPI ZL,LOW(COMP_N_END*2)
BRSH COMPARE_OUT
LPM R0,Z+
CP XL,R0
BRLO COMPARE
COMPARE_OUT:
;преобразование адреса для последующей обработки
;..................
;..................
;..................
; IJMP
RJMP START
;*****************************
COMP_N:
.DB N5,N4,N3,N2,N1,N0
COMP_N_END:
;*****************************
.EXIT
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 09:01:07
Gudd-Head
Пока оставил обычным перебором вроде работает.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 09:09:06
Kavka
akl писал(а):Сомневаюсь насчёт изящности, но может так.
IMHO, правильно сомневаетесь

Ни по скорости, ни по размеру кода, ни по читаемости кода не лучше. По последней характеристике, так это вообще можно за
обфускацию принять.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 10:32:03
akl
Kavka писал(а):Ни по скорости, ни по размеру кода, ни по читаемости кода не лучше.
"...Сдвинь корону набок, чтоб не висла на ушах."
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 10:49:59
Seriyvolk
Не ссорьтесь. Обилие вариантов - это всегда хорошо. И каждый будет подходить под свою задачу.
Кто-то почитает, выберет и спасибо скажет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 12:02:44
Gudd-Head
Чёт я перемудрил.
BRGE для знаковых данных, BRLO — для беззнаковых. Так что без ухищрений получится только с BRLO

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2015 12:14:53
Kavka
akl писал(а):"...Сдвинь корону набок, чтоб не висла на ушах."
Был бы смайлик, тогда всё было бы на своих местах. Может добавите смайлик?
PS: А я и смайликов наставил, и "IMHO" написал... Видать выразительности средств форума недостаточно и надо как-то по другому указывать на не серьёзность утверждений и скромность высказываний.
