Например TDA7294

Форум РадиоКот • Просмотр темы - Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 02:41:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 31 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
СообщениеДобавлено: Вт май 22, 2007 07:47:59 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 12:01:53
Сообщений: 55
Откуда: Минск
Рейтинг сообщения: 0
Ситуация до безобразия бытовая, ВСЕМ нужна эта замечательная функция, и тем ни менее, кто-б не задал подобный вапрос,(как я уж поглядел), остальные тут-же по гамлетовски пускаются в рассуждения о сущности бытия.. :roll:
Даже приятеля, который пиками увлекался больше года спросил, говорит, он эту задачу решил перебором! :wink: . Но если я правильно понял, меня это не спасёт. С 8 битными не представляю как это возможно, а мне нужно 16 бит поделить!!!
***** Логика подсказывает что это всё-ж вазможно, ведь калькуляторы умеют!! :wink: Даже от сомнений толька-что удостоверился, поделил и перемножил большие цифры на обычном калькуляторе, вроде одинаково быстро считает. Значит не перебором..
А ещё один приятель, подсказывал, что деление, это то-же самое умножение(А эта коменда есть у AVR-ов), только на число в минус_первой_степени. И опять тупик, чтобы получить минус_первую_степень, нужно разделить еденицу на это самое число. ************* у меня вабще складывается впечатление, будто она неразрешима. :cry:
Кстати, в математие есть множество других операций, каторых нет у AVR-ов, думаю всем, кто не углублялся в школьный курс бинарной арифметики было-бы интересно о них узнать.
Заранее спасибо...
Кстати, с радостью поделюсь вариантом практического решения алгоритма "Сглаживание опытных данных методом наименьших квадратов". Функция может быть очень полезной для устранения погрешности датчика, если известно что реальные показания изменяются плавно http://www.intuit.ru/department/calcula ... /11-06.jpg Но это не раньше, чем я с делением разберусь :-/.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 08:12:21 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
Гы-Гы. Сам недавно наткнулся на команду деления в АВР (точнее на её отсутствие). Сам я пишу на Си (в CAVR), а Си эмулирует хоть плавающую точку.
Отсутствие команды деления я заметил, когда пришлось написать функцию очень критичную по скорости. Одна единственная команда деления (16бит целое на 16 бит целое) по моим рассчётам выполнялась более 200 тактов процессора. :shock:
Умножение всего в 10 раз быстрее. :o

Либо переходи на Си, либо подсмотри какой Ассемблерный код генерит Си при делении, либо выбирай числа на которые легко делить 8) . (это все степени двойки, деление на них как известно можно заменить быстрым битовым сдвигом :idea:, который выполняется практически мгновенно)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 09:54:37 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 12:01:53
Сообщений: 55
Откуда: Минск
Рейтинг сообщения: 0
Время критично, точнее не очень, но математики у меня много!, а временной упор не так уж и далёк. Точность тоже, критична, метод подбора загубит мне всю арифметику(получится хуже чем до апроксимирования!).
Ну должен-же быть какой-то ПРАВИЛЬНЫЙ алгоритм, по каторому тот-же калькулятор имея в распоряжении всё те-же логические операции И, ИЛИ, и НЕ приспакойненько подсчитывает длинные, на весь экран цифры, (и не асобо парится!!),.. а ведь он ещё и корни умеет доставать!!! Не волшебные-же они?!! :-/
Вопрос по прежнему открыт. Не умею я не Си, ни программ для Си
не знаю, про дизасемблирование только и слышал.. Обо всём этом, как и о переборе массива похожих цифр можно рассуждать так-же долго, как и о смысле бытия, пример, соседние ветки...
По прежнему отчаянный *****(ато сечас пойду, и валерьянкой с горя отравлюсь, тагда обьяснять вам будет нЕкаму :cry: )


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 10:05:08 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Чт сен 14, 2006 10:57:27
Сообщений: 156
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
http://www.atmel.ru/Articles/Atmel21.htm


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 10:43:34 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
А ты на чём пишешь?
вот во что транслируется вот такой код:
unsigned int A,B,C;
C = A/B;


; перегоняем в регистры делимое и делитель
MOV R30,R0x12
MOV R31,R0x13

MOV R26,R0x10
MOV R27,R0x11

; вызываем саму функцию деления
CALL __DIVW21U

; результат возвращаем обратно в переменную
MOV R0x14,R30
MOV R0x15,R31

; а вот сама функция, которая делит беззнаковое 16 битное целое на беззнаковое 16битное целое:

__DIVW21U:
CLR R0
CLR R1
LDI R25,16
__DIVW21U1:
LSL R26
ROL R27
ROL R0
ROL R1
SUB R0,R30
SBC R1,R31
BRCC __DIVW21U2
ADD R0,R30
ADC R1,R31
RJMP __DIVW21U3
__DIVW21U2:
SBR R26,1
__DIVW21U3:
DEC R25
BRNE __DIVW21U1
MOVW R30,R26
MOVW R26,R0
RET


P.S. Разберешься? я общий смысл понимаю, но вникать лень ;-)

Поставь себе какой-нить Сишный компилятор для мелкопроцессоров (Например CodeVisionAVR, сойдёт даже триальный).
пишешь там пару строк и компилируешь.
Компилятор генерит АСМ файл как побочный продукт (т.е. текст асемблерный). Куришь его блокнотом и вникаешь ;-)

P.P.S. таким нехитрым способом можно даже подсмотреть как делить дробные числа и считать всякие синусы-косинусы ;-)


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 11:17:09 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Апноут у AVR есть - разные операции на АСМе. Список апноутов в низу 7-й страницы о прошивании AVR - http://www.roboforum.ru/viewtopic.htm?p=11560

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 11:40:50 
Открыл глаза

Зарегистрирован: Вт май 01, 2007 12:01:53
Сообщений: 55
Откуда: Минск
Рейтинг сообщения: 0
Вах! :) Пасиба!!, ИМХО этого должно быть достаточно. с меня по пакету сливок ;). Сейчас уже на работу бежать, но вечерком всёпривсё проонализирую, и буду сочинять для 16-бит, Если всё-ж чего получится, здесь покажу....


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 12:15:48 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Жуть как интересно !

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 16:48:40 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пн янв 16, 2006 08:00:17
Сообщений: 534
Откуда: Иркутск
Рейтинг сообщения: 0
Этот код скачал где-то в инете:
; Div8 divides a 16-bit-number by a 8-bit-number
; Test: 16-bit-number: 0xAAAA, 8-bit-number: 0x55
;
.NOLIST
.INCLUDE "C:\avrtools\appnotes\8515def.inc"
.LIST
;
; Registers
;
.DEF rd1l = R0 ; LSB 16-bit-number to be divided
.DEF rd1h = R1 ; MSB 16-bit-number to be divided
.DEF rd1u = R2 ; interim register
.DEF rd2 = R3 ; 8-bit-number to divide with
.DEF rel = R4 ; LSB result
.DEF reh = R5 ; MSB result
.DEF rmp = R16; multipurpose register for loading
;
.CSEG
.ORG 0
;
rjmp start
;
start:
;
; Load the test numbers to the appropriate registers
;
ldi rmp,0xAA ; 0xAAAA to be divided
mov rd1h,rmp
mov rd1l,rmp
ldi rmp,0x55 ; 0x55 to be divided with
mov rd2,rmp
;
; Divide rd1h:rd1l by rd2
;
div8:
clr rd1u ; clear interim register
clr reh ; clear result (the result registers
clr rel ; are also used to count to 16 for the
inc rel ; division steps, is set to 1 at start)
;
; Here the division loop starts
;
div8a:
clc ; clear carry-bit
rol rd1l ; rotate the next-upper bit of the number
rol rd1h ; to the interim register (multiply by 2)
rol rd1u
brcs div8b ; a one has rolled left, so subtract
cp rd1u,rd2 ; Division result 1 or 0?
brcs div8c ; jump over subtraction, if smaller
div8b:
sub rd1u,rd2; subtract number to divide with
sec ; set carry-bit, result is a 1
rjmp div8d ; jump to shift of the result bit
div8c:
clc ; clear carry-bit, resulting bit is a 0
div8d:
rol rel ; rotate carry-bit into result registers
rol reh
brcc div8a ; as long as zero rotate out of the result
; registers: go on with the division loop
; End of the division reached
stop:
rjmp stop ; endless loop

_________________
Today fine night...


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 16:58:56 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Сб сен 09, 2006 19:00:18
Сообщений: 257
Откуда: СССР
Рейтинг сообщения: 0
В AVR студии в справке есть шаблоны...


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 20:27:43 
Друг Кота
Аватар пользователя

Карма: 6
Рейтинг сообщений: 30
Зарегистрирован: Чт сен 14, 2006 11:42:09
Сообщений: 3792
Откуда: Обитаю на чердаке
Рейтинг сообщения: 0
VIY, и не надо так шуметь. :) Напоминаю, слова "ХЕЕЕЛП!", "СРОЧНО!", "ГОРЮ!" и т.п. ведут к немедленному удалению темы. В данном случае тема не удалена из-за уважения к ответившим вам форумчанам. 8)

VIY, Вы наверняка будете удивлены, но практически все МК не могут выполнять простейших математических операций. Утрируя, они только нули с единичками складывать умеют. :)

Советую прочесть "Библию для программистов", т.е. книгу Дональда Кнута "Искусство программирования для ЭВМ". Там много чего есть интересного, несмотря на то, что она впервые была издана в 1968 г. Совсем недавно она была переиздана в России. Посмотрите на библиотечных порталах в теме: http://www.radiokot.ru/forum/viewtopic.php?t=466 , по-моему, она там есть. :))

_________________
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...


Последний раз редактировалось Мышонок Ср май 23, 2007 17:52:51, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:45:43 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн окт 30, 2006 01:09:37
Сообщений: 92
Откуда: Таганрог
Рейтинг сообщения: 0
Вот здесь много такого добра в разделе "AVR libraries for ASM projects":
http://elm-chan.org/cc_e.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср май 23, 2007 17:49:49 
Друг Кота
Аватар пользователя

Карма: 6
Рейтинг сообщений: 30
Зарегистрирован: Чт сен 14, 2006 11:42:09
Сообщений: 3792
Откуда: Обитаю на чердаке
Рейтинг сообщения: 0
ОФФТОП (разговор не по теме) и ФЛУД (трёп) были удалены. 8) Спасибо за внимание! :)

_________________
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб май 23, 2009 14:28:49 
Родился

Зарегистрирован: Сб май 23, 2009 14:14:23
Сообщений: 14
Рейтинг сообщения: 0
если делить на константу,- сначала подопытное число умножить на некий Х , потом сдвинуть в право Y раз
времени минимум результат близкий к "оригиналу"
числа Х и Y расчитайте сами...


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб май 23, 2009 21:03:33 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Настоятельно рекомендую.
Умножение и деление многоразрядных чисет и не только


Вложения:
avr.JPG [48.18 KiB]
Скачиваний: 4134

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
СообщениеДобавлено: Сб авг 14, 2010 11:01:09 
Встал на лапы

Зарегистрирован: Пт мар 13, 2009 13:11:56
Сообщений: 123
Откуда: Минск
Рейтинг сообщения: 0
Вот и мне понадобилось делить 16 бит на 16 бит.
В этой книге только пример 32/8 бит. Сайт атмел у меня не открываеться уже вторые сутки... В приведённом Кашпо коде AVR Studio ругаеться на эти выражения:
MOV R30,R0x12
MOV R31,R0x13

MOV R0x14,R30
MOV R0x15,R31
Что это вобще такое?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
СообщениеДобавлено: Сб авг 14, 2010 12:51:11 
Друг Кота

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Сб мар 07, 2009 20:44:36
Сообщений: 4435
Рейтинг сообщения: 0
ууу, я вообще про вычитание...
Ну а вообще вычитаешь необходимое количество раз

_________________
Не умеешь - не берись, но не взявшись не научишься...


Последний раз редактировалось Arlleex Сб авг 14, 2010 13:47:07, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
СообщениеДобавлено: Сб авг 14, 2010 13:42:29 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Kisa
В этой книге изложена методология как делить/умножать, а количество байт зависит только от тебя :wink:

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Команды деления в AVR нет, а мне ОЧЕНЬ надо разделить
СообщениеДобавлено: Сб авг 14, 2010 16:02:43 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 40
Зарегистрирован: Пт янв 30, 2009 14:50:35
Сообщений: 625
Откуда: Солнечногорск
Рейтинг сообщения: 3
Вот несколько подпрограмм:

Код:
; =======================
;
; Беззнаковое деление двухбайтовой величины на байт
;
; =======================
;
; Параметры:
;
;   R17:R16 - делимое
;   R18     - делитель
;
; Возвращаемый результат:
;
;   C=1 - ошибка
;   C=0 - деление выполнено
;   R16 - частное
;   R17 - остаток
;
; Изменяемые регистры: R16, R17, R19

DivByte:
        ldi     R19, 8
        cp      R18, R17
        brlo    _DB40
        breq    _DB40
_DB10:  rol     R16
        rol     R17
        brcs    _DB20
        cp      R18, R17
        brlo    _DB20
        brne    _DB30
_DB20:  sub     R17, R18
        sec
_DB30:  dec     R19
        brne    _DB10
        rol     R16
        ret
_DB40:  sec
        ret



; =======================
;
; Беззнаковое деление четырёхбайтовой величины на двухбайтовую
;
; =======================
;
; Параметры:
;
;   R19:R16 - делимое
;   R21:R20 - делитель
;
; Возвращаемый результат:
;
;   C=1 - ошибка
;   C=0 - деление выполнено
;   R17:R16 - частное
;   R19:R18 - остаток
;
; Изменяемые регистры: R16-R19, R22

DivWord:
        ldi     R22, 17
        cp      R21, R19
        brcs    _DWRet
        brne    _DW10
        cp      R18, R20
        brcc    _DWCS
        clc
_DW10:  rol     R16
        rol     R17
        dec     R22
        breq    _DWRet
        rol     R18
        rol     R19
        brcs    _DW20
        sub     R18, R20
        sbc     R19, R21
        brcc    _DW30
        add     R18, R20
        adc     R19, R21
        clc
        rjmp    _DW10
_DW20:  sub     R18, R20
        sbc     R19, R21
_DW30:  sec
        rjmp    _DW10
_DWCS:  sec
_DWRet: ret



; =======================
;
; Беззнаковое умножение двухбайтовых величин
;
; =======================
;
; Параметры:
;
;   R17:R16 - множитель
;   R19:R18 - множитель
;
; Возвращаемый результат:
;
;   R23:R20 - произведение
;
; Изменяемые регистры: R0, R1, R20-R23

MulWord:
        mul     R17, R19
        movw    R23:R22, R1:R0
        mul     R16, R18
        movw    R21:R20, R1:R0
        mul     R17, R18
        add     R21, R0
        adc     R22, R1
        adc     R23, R2
        mul     R16, R19
        add     R21, R0
        adc     R22, R1
        adc     R23, R2
        ret


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re:
СообщениеДобавлено: Сб авг 14, 2010 18:24:48 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 12, 2010 10:16:32
Сообщений: 354
Рейтинг сообщения: 0
tych писал(а):
Апноут у AVR есть - разные операции на АСМе. Список апноутов в низу 7-й страницы о прошивании AVR - http://www.roboforum.ru/viewtopic.htm?p=11560

я дико извиняюсь но я не нашол


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 31 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y