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

Обсуждаем контроллеры компании Atmel.
Ответить
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

День добрый всем.
Компилятор Avrasm2. Столкнулся с непонятными его действиями при задании констант.
.equ N=10
.equ t1= int(666938/N-7.9207)
.equ t2= int(666938/N-7-9207/10000)

Почему-то t1 не равно t2, который дает корректный для работы устройства результат.

Второй вопрос. Как задать вещественную константу, например 34.5, чтобы потом простые формулы с её участием использовать для задания целых констант (хотелось как ниже представлено)
A=34.5????
.equ t3= int(666938/A)

Вот не нашел в разных описания avrasm2 этих моментов. Может кто сталкивался.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Посмотрите instruction set (хотя-бы Atmel-0856L-AVR-Instruction-Set-Manual)...
Ежли найдете команду, в которой в качестве данных подставляется ДРОБНОЕ значение - тогда можете работать с оным и под ассемблером.
8)
Не надо путать препроцессор с собственно системой команд.
Собственно система команд и АЛУ могут работать только со знаковой арифметикой.
Для обработки дробных величин (и прочего...) необходимо предварительно создать соответствующие подпрограммы и уж затем скармливать им соответствующего формата данные.
:tea:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

в avrasm2 есть
INT(expression) Truncates a floating point expression to integer (ie discards fractional part)
FRAC(expression) Extracts fractional part of a floating point expression (ie discards integer part).
Q7(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign + 7-bit fraction)
Q15(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign +15-bit fraction)
перевод
Следующие функции определены только в AVRASM2:
INT (выражение) Обрезает выражение с плавающей запятой до целого числа (т.е. отбрасывает дробную часть)
FRAC (выражение) Извлекает дробную часть выражения с плавающей запятой (т.е. отбрасывает целую часть).
Q7 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 7-битная дробь)
Q15 (выражение) Преобразует дробное выражение с плавающей запятой в форму, подходящую для инструкций FMUL / FMULS / FMULSU. (знак + 15-битная дробь
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

Спасибо за содержательный ответ.
[uquote="BOB51",url="/forum/viewtopic.php?p=4013722#p4013722"][/uquote]
Я Вас не спрашивал про арифметику вещественных чисел. Вопрос был именно по avrasm2, а не к набору инструкций.
С set ничего не получалось. А по первому есть что сказать?

Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 19103
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

С.Н. писал(а):Архитектурой и ассемблером avr владею на серьезном уровне
очень плохо ты владеешь, если пытаешься подставить дробное число.
на самом деле делается так:
числа, которые должны быть дробными, представляются целыми числами с фиксированной точкой.
и для каждого такого числа программописатель знает, где в этом числе находится точка.
С.Н. писал(а):A=34.5????
.equ t3= int(666938/A)
поэтому в данном конкретном случае нужно записать так:
.equ t3= 666938 * 10 / 345
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.
Реклама
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4013763#p4013763"]очень плохо ты владеешь, если пытаешься подставить дробное число.[/uquote]
Во первых, призываю Вас сохранять уважительный тон общения и обращаться на "Вы".
Во-вторых, я спросил то что спросил. Мне не надо объяснять про альтернативную форму представления, тем более что она есть в первой части вопроса, а глаза цепляются за последнюю строчку. Правда?

Я программу пишу для других, у которых познания в этом близко к нулю. Им приходиться править прошивку под себя. Так вот, они в состоянии число записать как привыкли "34.5", а не приводить к удобной форме. Пока обхожусь и без этого, но хочется упростить кое какие моменты.

Вопросы снимаю... Спрашивал личный опыт, а не вырезки документации, которые и сам читал.

Добавлено after 3 minutes 29 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=4013766#p4013766"][uquote="С.Н.",url="/forum/viewtopic.php?p=4013743#p4013743"]А по первому есть что сказать?
Архитектурой и ассемблером avr владею на серьезном уровне. Английским техническим тоже.[/uquote]
ну в документации на английском ничего нет про флоат константы (там в формуле есть 7.9207),
есть Integer Constants и Strings и Character Constants. Может пропустил.[/uquote]

Да я тоже не нашел и мало того переперобывал разные комбинации... Видать придется мириться с этим.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Модератор
Аватара пользователя
Сообщения: 19103
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

С.Н. писал(а):переперобывал
чтобы получилось на до пробОвать, а не пробЫвать ...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4013790#p4013790"]
С.Н. писал(а):переперобывал
чтобы получилось на до пробОвать, а не пробЫвать ...[/uquote]
не удобно получилось...согласен.


Нашел сам только что решение по второму вопросу:

#define A 8.1
..
.equ B=int(23456/A)
Проверил - работает.

А вот с точностью вычисления в препроцессоре пока нет решения.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Отдайте пользователю дробное число А, потом преобразуйте его для удобства вычислений( *100)
С=А*100
В=(int(2345600/C)
Или как-то так.
Я всё-всё узнAю и стану профессором.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Извиняюсь за баян, кто-то пробовал ЖКИ ч/б нокии 5110 на AVR? Собрал схемку в протеусе, делаю тестовый код для самых базовых команд, а дело не едет, даже зажечь все сегменты черным не получается, что-то упускаю.

Код: Выделить всё

;Nokia5110 ЖКИ тест
.device Atmega8
.include "m8def.inc"	;1МГц

;lcd Port
.equ ddrLCD=ddrD
.equ portLCD=portD
;lcd Pins,распиновка ЖК:
.equ _light=1;light
.equ _pwr=2	;+5v
.equ _gnd=0	;gnd
.equ _sclk=3	;clk,sclk - клок
.equ _sdin=4	;din,sdin - дата
.equ _dc=5	;dc,d/c - выбор копанда/данные
.equ _sce=6	;ce,sce - chip enable
.equ _rst=7	;rst - reset

.org 0				;начало кода
	rjmp start

start:
;====установка портов====
ldi	R16,(1<<_pwr)|(1<<_gnd)|(1<<_light)|(1<<_sclk)|(1<<_sdin)|(1<<_dc)|(1<<_sce)|(1<<_rst)
out	ddrLCD,R16
ldi	R16,(1<<_pwr)|(0<<_gnd)|(1<<_light)|(1<<_sclk)|(0<<_sdin)|(1<<_dc)|(0<<_sce)|(1<<_rst)
out portLCD, R16
clr R16
out ddrB, R16	;PortB
out portB, R16
out ddrC, R16	;PortС
out portC, R16
;------------------------
;инициализация Nokia5110
cbi portLCD,_rst
nop
sbi portLCD,_rst
;команда
cbi portLCD,_dc

;0x09 зажечь все пиксели
cbi portLCD,_sdin;0
cbi portLCD,_sclk
sbi portLCD,_sclk
cbi portLCD,_sdin;0
cbi portLCD,_sclk
sbi portLCD,_sclk
cbi portLCD,_sdin;0
cbi portLCD,_sclk
sbi portLCD,_sclk
cbi portLCD,_sdin;0
cbi portLCD,_sclk
sbi portLCD,_sclk
sbi portLCD,_sdin;1
cbi portLCD,_sclk
sbi portLCD,_sclk
sbi portLCD,_sdin;1
cbi portLCD,_sclk
sbi portLCD,_sclk
cbi portLCD,_sdin;0
cbi portLCD,_sclk
sbi portLCD,_sclk
sbi portLCD,_sdin;1
cbi portLCD,_sclk
sbi portLCD,_sclk

main:
rjmp main
Согласно мануалу для общения используется SPI, накидал тестовый софтварный обмен, в мануале пишется, данные считываются при подъеме с лог0 на лог 1 клока, но в протеусе и на макетке стола дело не двинулось :?

Изображение Изображение Изображение
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

{ согласно мануалу}
В мануале процедура инициализации описана. Ресет там подольше длится, чем NOP. Это раз. А 2, 3, и тд пока не рассматриваем.
Я всё-всё узнAю и стану профессором.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

С протеусом удалось договорится используя пример из компонента ЖКИ и отладочный виртуальный SPI, подглядел тайминги и задержки, после чего виртуальная среда начала рисовать примерно то же самое что в коде, но на реальном ЖКИ изображения пока нет. Продолжаю мучить :roll:

Изображение Изображение
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

В сети доуя примеров работы с этим стеклом на асме.
Я всё-всё узнAю и стану профессором.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Следуя примеру выяснилось что сам ЖКИ внутри не касался платы, поэтому не грузился :shock:
Подогнув контакты проблема не отображения была решена, но видать индикатор не новый, поле не полное, и отображаются 38 строк из 48, а так работает.

Изображение Изображение

Код: Выделить всё

;инициализация Nokia5110
sbi portLCD,_rst

cbi portLCD,_dc;инструкции

ldi R17,0x20	;LCD Basic Commands
rcall write5110
ldi R17,0x0c	;LCD in normal mode
rcall write5110

sbi portLCD,_dc;данные

ldi R16,84  ;закрасить блок 84х8 точек
srtoka:
ldi R17,0b10101010
rcall write5110
dec R16
brne srtoka
...
...
;SPI Nokia 5110
;R17-дата,R18-счетчик
write5110:
clr R18			;counter
data5110:
cbi portLCD,_sdin;sdi=0
lsl R17			;move
brcc b_5110		;C=0,флаг переноса
sbi portLCD,_sdin;sdi=1
b_5110:
sbi portLCD,_sclk;sclk=1
inc R18
cbi portLCD,_sclk;sclk=0
cpi R18,8		;8-бит
brlo data5110
ret
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Уже похоже на правду. Сравните с портянкой из первого поста.
Что-то мне шепчет, что вместо многоточия у Вас то же самое для других строк.
Я всё-всё узнAю и стану профессором.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Так и есть, где многоточие блок закраски строки в 8 пикселей, на всем ЖКИ 6 таких строк по 8, ну по байту, суммарно 6*8=48 пикселей, все как в мануале, а многоточие поставил чтобы не копипастить на форуме 6 одинаковых блоков кода, это же тестовая наброска, ей можно быть портянкой :)))

Код: Выделить всё

ldi R16,84
srtoka:
ldi R17,0b10101010
rcall write5110
dec R16
brne srtoka

ldi R16,84
srtoka2:
ldi R17,0b10101010
rcall write5110
dec R16
brne srtoka2
...
...
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

А счётчик строк организовать что не позволяет?
Я всё-всё узнAю и стану профессором.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

все позволяет, задача была включить, заценить как работает, плюшки потом :)
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

У Вас есть подпрограммы, т.е. нужна установка указателя стека.
Ответить

Вернуться в «AVR»