Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:30:16
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
DX168B писал(а):
Спасибо.
Пжалста. Вот и я грю, порой без поллитра не обойтись и самые элементарные вещи кажутся чем-то невероятным. Кстати, вопрос по таймерам. Есть ли такой режим типа мультивибратора — чтобы один раз протикал от 0 до FF (00) и остановился? Или единственный выход — принудительно останавливать его в прерывании (по флагу), т.к. если выбран источник тактирования, то таймер по-любому тикает?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:33:06
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
DX168B писал(а):
Очень извратно, но работает. Позже подумаю об оптимизации.
Можно без умножения: 100 + 10 + 10 + 10 + 8. Цикл сложения на счётчиках
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:36:42
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Кажись, нет. Наверное можно остановить в прерывании по переполнению. Но на вход в прерывание уходит несколько тактов, так что без подделителя возможны погрешности на пару тиков. Хотя можно прерывание немного раньше вызвать, по сравнению с регистром OCR. Мы в какой-то теме решали эту задачу.
А на счёт умножения. Мне п\программа умножения будет нужна и в других местах программы для других целей. По этому уже с умножением сделаю.
_________________ I am DX168B and this is my favourite forum on internet!
Последний раз редактировалось DX168B Пн июн 13, 2011 19:39:05, всего редактировалось 1 раз.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:38:31
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
DX168B писал(а):
Но на вход в прерывание уходит несколько тактов, так что без подделителя возможны погрешности на пару тиков.
Для определения скорости вращения энкодера: 1) палюбасу нужен будет предделитель, 2) пара тиков не существенны.
DX168B писал(а):
Мне п\программа умножения будет нужна и в других местах программы для других целей. По этому уже с умножением сделаю.
Какой камень? У меги есть аппаратное умножение (правда, ни разу ещё им не пользовался ).
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Последний раз редактировалось Gudd-Head Пн июн 13, 2011 19:42:28, всего редактировалось 2 раз(а).
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:42:02
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
DX168B писал(а):
tiny2313.
Гы У меня макетка с энкодером тоже на 2313!
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 19:47:07
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Да вот недавно набрал кучку 2313х и мег 32х. Для ознакомления и отточения навыков. Замок тоже на 2313й тине делаю, так как у 26й тиньки уже нехватает ног и UARTа нет, а он мне нужен там. Хочу, чтобы замком по UART можно было управлять и конфигурировать не только с клавы, но и с ПК. Программу для ПК написал, вот для МК осталось добить.
_________________ I am DX168B and this is my favourite forum on internet!
С первым тезисом согласен безоговорочно. Налицо и своеобразный стиль программирования. Никаких комментариев ( чтоб супостата запутать ) А то понаписывают некоторые:
; ---------- ; Целочисленное беззнаковое умножение. ; R1 * R2 -> R25,R24 ; Множители сохраняются. ; ---------- MUL: ..... и т. п.
Краткость - сестра таланта. Это чтобы вернувшись к задаче через месяц ( полгода ) чесать репу : "И какой идиот это накорябал! ... Да это ж я..."
Судя по тому, что умножение на 8 достигается троекратным сдвигом влево, идентификатор MUL_8 обозначает в данном случае нечто совершенно иное и тоже призван запутать вероятного противника .
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 20:41:04
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Jack_A писал(а):
MUL_8 обозначает в данном случае нечто совершенно иное и тоже призван запутать вероятного противника .
Это умножение 8-ми битных чисел
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 20:55:31
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4468 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Это я и имел в виду. Умножение восьмибитных чисел. А результат может быть и 16-битным, в зависимости от самих умножаемых чисел. Умножитель я взял из Атмеловского аппноута по делениям\умножениям. Только имена регистров и меток подправил под себя. А комменты я позже напишу, иначе на самом деле, позже и забыть можно. А на счёт изврата, я заранее предусмотрел ограничения, так что за пределы восьми бит никак не выйдет. Да и к скорости и оптимизации, будущая девайсина совсем не критична. (это будет применяться в некоторых пунктах меню настроек.)
_________________ I am DX168B and this is my favourite forum on internet!
Последний раз редактировалось DX168B Вт июн 14, 2011 12:33:53, всего редактировалось 1 раз.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 13, 2011 21:09:35
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
DX168B писал(а):
А комменты я позже напишу, иначе на самом деле, позже и забыть можно.
Да-да-да. Тож так думаю, потом напишу, а то лень на русский переключаться. А потом хрен поймёшь что понаписал
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 02, 2011 15:47:28
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Опять я в ступоре, на этот раз более глубоком В общем, имеется двухбайтное число (счётчик) в 2-х соседних регистрах. Необходимо сделать процедуру его уменьшения/увеличения на 1/10/100 (в зависимости от состояния 3-х флагов) таким образом, чтобы оно не выходило за произвольные нижнюю и верхнюю границы. Если более подробно, то один флаг (Т) отвечает за направление счёта, два других (А и Б) за величину счёта (100 если А=Б=0; 1 если Б=1; и 10 если А=1_и_Б=0). Хотелось бы решить задачу в общем виде, т.е. чтобы пороги МАКС и МИН можно было задать любые (МАКС>МИН). Сейчас это сделано только для инкремента/декремента на единицу, да и то коряво: перед соотв. действием текущее значение счётчика побайтно сравнивается с порогом. Например, если верхний порог МАКС равен $ABCD, то инкремент будет выглядеть
Код:
clr zeroreg; ldi onesreg, 1; ... cpi count_H, 0xAB; сравниваем старший байт с порогом brlo PC+3; если меньше, то сразу переходим к вычислению cpi count_L, 0xCD; сравниваем младший байт с порогом brsh PC+3; если больше или равно, то пропускаем вычисление add count_L, onesreg; инкремент младшего байта на единицу adc count_H, zeroreg; прибавляем значение флага переноса к старшему байту ...
Самое простое было зациклить это на соотв. число циклов (1/10/100), однако время выполнения в таком случае может достигать 1000 тактов, что недопустимо. Наверняка можно как-то компактно дополнить этот код. Например, прибавляем 1. Проверяем флаг Б, если Б=0 то прибавляем ещё 9. Проверяем флаг А, если А=0 то прибавляем ещё 90. Но вот как проверить то, что после прибавления не будет превышен порог (при прибавлении чисел больше 1)? С учётом возможных ошибочных переходов $FFFF -> $0000 для порогов, близких к $FFFF.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
...Необходимо сделать процедуру его уменьшения/увеличения на 1/10/100 (в зависимости от состояния 3-х флагов) таким образом, чтобы оно не выходило за произвольные нижнюю и верхнюю границы.
.. а что мешает перед вычитанием/увеличением делать проверку? (пишете отдельную ветку для уменьшения и увеличения - есть заем/перенос -> выход за границу ...)
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июл 02, 2011 19:47:14
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
ChipKiller писал(а):
.. а что мешает перед вычитанием/увеличением делать проверку? (пишете отдельную ветку для уменьшения и увеличения - есть заем/перенос -> выход за границу ...)
В том-то и дело, не допираю как сделать проверку
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
имхо, решение в общем виде таково: 1. сохранили во временном месте значение текущего числа 2. увеличили/уменьшили его на заданное приращение 3. проверили на максимум/минимум 4 если есть выход за пределы - восстановили прежнее значение (или что-то там еще сделали) все просто... и для любых приращений и пределов - алгоритм единый
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июл 03, 2011 16:56:07
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
ARV писал(а):
2. увеличили/уменьшили его на заданное приращение 3. проверили на максимум/минимум 4 если есть выход за пределы - восстановили прежнее значение (или что-то там еще сделали)
Ага... Допустим, предел $FFFF, а текущее значение — $FFEF. Увеличили на 100 — получили $0053, что меньше порога, и благополучно проглотили. UPD: Ладно, дополню сам себя: помимо сравнения двух байт счётчика с порогом, дополнительно проверить флаг С (после его прибавки к старшему байту) чтобы не получилось то, что я только что описал?..
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Я вот тут подумал, что если границы будут задаваться свои, то как вариант можно сделать такую проверку:
Для сложения: Выполняем операцию: Правая граница - Текущее значение Получившееся значение сравниваем со слагаемым - если меньше слагаемого, то прибавлять нельзя. (Вычитаем из результата слагаемое. Если флаг C после этого стоит, то складывать нельзя)
Для вычитания: Выполняем операцию: Текущее значение - Левая граница И далее тоже самое, только вместо слагаемого будет вычетаюшее число.
Оригинальное значение мы, естественно, сохраняем, например, в стек и достаём обратно после проверки. Ну, как вариант. Не претендую на элегантность.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июл 04, 2011 08:34:04
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19675 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
ВитГо писал(а):
Очень нуждаюсь в алгоритме рисовании линии на ассемблере.
Интересно, конечно, где вы её (линию) будете рисовать — на бумаге? А так — формула линии из алгебры 5-го класса: y = k*x + b, т.е. реализовать на АСМе умножение и сложение, потом подставлять вместо х нужный диапазон точек.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения