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

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

Сообщение Feruz »

Проверил на работе, компиляция без ошибок, "сдвига" нет
Вечером проверю на домашнем компе.

Закралась мысль, а что если проблема в стилях комментариев? Я вижу у Вас используется классика ";", в то время как я использую сишную нотацию "//" или блоками "/* */".
Реклама
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

.org 0 в твоем случае бессмыслен.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

avrasm2 допускает Сишную нотацию.
НО нужно указать в проекте, что используется именно он -
projekt -> assembler option -> version2
:roll:
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

Сообщение Feruz »

[uquote="BOB51",url="/forum/viewtopic.php?p=3394897#p3394897"]Открой и скомпилируй для пробы вот этот тест - проектик
extdi_2313.zip
да поглядямс чего будет (ибо ни семерки ни десятки в наличии нету).
8)[/uquote]

Дома проверил, тоже все нормально.
Опция "Version 2" включена.

Начал искать проблему методом исключения, удаляя участки кода и проверяя не пропал ли "сдвиг".
Оказалось что проблема была в длинном (325 символов) комментарии записанном в одну строку :shock:
Вот вам, блин, и недостаток монитора 27' - можно писать ооочень длиинные комментарии :facepalm: сижу ржу :))

Экспериментально установил что макс длина строки 264 символа. В хелпе бегло не нашел информации по ограничению.
Благодарю всех принявших участие, в особенности BOB51. :write:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

При написания исходника (с возможностью последующей распечатки) нужно всегда ограничиваться форматом стандартного листа.
Обычно это сразу заметно по "уходу за границы разметки" окна текущего текстового редактора.
Автоперенос в ассемблере уже есть косвенный показатель некорректности длины строки.
Потому и превышение длины строки да еще под ассемблером это штука РЕДЧАЙШАЯ.
Как внешний редактор весьма удобно использовать DPAD (однако это лично мои предпочтения).
Жаль только, что на сегодня этот проект закрыт...
Кому интересно будет - могу через почтовик скинуть (там порядка 5 мегабайт с инсталятором и портабле вариантами).
8)
Реклама
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

Сообщение dumbass »

Добрый день!
Как правильно настроить вывод ICP МК (тн2313), если в МК-ре т/с Т1 настроен в режиме захвата?
В книге написано что на вход. А с подключенным подтягивающем резистором или вывод должен "висеть в воздухе"?
По-идее разницы быть не должно...да и на практике, вроде бы, ничего не изменилось. Но все же как правильно?
Спасибо!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Определяется текущей внешней схемотехникой формирования импульса для данного вывода.
8)
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="dumbass",url="/forum/viewtopic.php?p=3396032#p3396032"]Как правильно настроить вывод ICP МК (тн2313), если в МК-ре т/с Т1 настроен в режиме захвата?
В книге написано что на вход. А с подключенным подтягивающем резистором или вывод должен "висеть в воздухе"?
По-идее разницы быть не должно...да и на практике, вроде бы, ничего не изменилось. Но все же как правильно?
Спасибо![/uquote] Так и так правильно. Сам использую и с включением подтяжки и Z-состоянием, если есть внешняя подтяжка. К примеру
СпойлерИзображение
Вложения
ICP.PNG
(10.49 КБ) 720 скачиваний
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

А зачем подавать входной сигнал на два входа ICP и PD0?
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Ошибка разводки печати. На самом деле, подключение идет на PB0/T0. Для частотомеров на AVR методом захвата, когда счет периодов измеряемой частоты идет T0, а счет периодов опорной частоты T1.
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

Сообщение dumbass »

Хочу измерять частоту вращения вала асинхронной машины. Для этого буду использовать датчик на основе эффекта Холла (с магнитом).
По программе: коэффициент предделителя выбрал 1024, чтобы значения периода было в милисекундах (пускай и слегка не точно).
Полученное значение периода сигнала вывожу на светодиоды в двоичном виде. Далее из двоичного числа делаю десятичное. Делю полученное значение на коэффициент =16/2 (16-частота работы МК, если бы было 1МГц, то на 1000 тактов МК был 1 такт таймера. Это мне дает: Тт1=Кпреддел./Fмк=1024/1000000=1,024мс -т.е. на св-диодах я получаю период сигнала.
откуда взялась двойка: на диске у меня две прорези, т.е. я имею на диске два зуба (см фото).)
Далее математически нахожу частоту и частоту оборотов в минуту.
вот так. :oops:
Знаю, Вы скажете мне на это -- :shock: :facepalm: :kill:
но и до этого я дошел не сразу)
С семисегментным индикатором еще не работал, поэтому применяю св-диоды.
СпойлерИзображение Изображение Изображение Изображение
Спойлер

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

.include "tn2313def.inc"				

.def	temp	=R16

.cseg
.org	0x00	rjmp	init

;ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ
.org	ICP1addr		rjmp	T1_capt	;(0х03) Захват таймера/счетчика Т1

.org	INT_VECTORS_SIZE

;НАСТРОЙКА СТЕКА И ПОРТОВ
init:	ldi		temp,RAMEND
		out		SPL,temp
		
		ser		temp
		out		DDRB,temp			;В на выход с 0
		
		ldi		temp,~(1<<PD6)
		out		DDRD,temp			;D на выход с 0, кроме PD6
		ldi		temp,(1<<PD6)
		out		PORTD,temp			;ICP на вход БЕЗ подтяжки

;НАСТРОЙКА ТАЙМЕРА T1
		ldi		temp,1<<ICIE1
		out		TIMSK,temp			;Разрешаем прерывание по захвату Т1

		ldi		temp,(1<<ICNC1 | 1<<ICES1 | 1<<CS12 | 0<<CS11 | 1<<CS10)
		out		TCCR1B,temp			;1/1024

		sei

;ОСНОВНОЙ ЦИКЛ
MAIN:	rjmp	MAIN

;ОБРАБОТКА ПРЕРЫВАНИЯ ПО ЗАХВАТУ
T1_capt:clr		temp
		out		TCNT1H,temp
		out		TCNT1L,temp			;Обнулили счетный регистр
		
		in		ZL,ICR1L
		in		ZH,ICR1H
		
		out		PORTD,ZH
		out		PORTB,ZL			;Вывели значение периода на св-диоды

		reti

		
вопросы:
1 можно было бы как то улучшить читабельность путем программного преобразования/расчета периода в частоту. Но как это сделать я не знаю. В интернете пишут для умножения и деления исп. команды mul и div. Но подходят ли они действительно для программирования МК и если нет, то как можно осуществить программный расчет?
2 С учетом текущей внешней схемотехникой формирования импульса мне необходимо настраивать ICP на вход с подтяжкой, верно?
3 на одном из фото указаны параметры датчика. как понять, где говорится про его предельную частоту измерения?
Спасибо!
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

На фото оптический датчик "на просвет" и диск с одним просветом (пропилом, окном).
Из магнитных - шестерня с А3144 и "магнитом ссади"(зуб шестерни в качествн магнитного шунта).
Датчик в виде наклеянного кусманчикафольги и оптрона "на отражение".
Как вариант - диск с прорезями и ранее показанный оптрон "на просвет".
:roll:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

деление/умножение на МК да ещё вещественных чисел довольно затратное занятие. Если реальных значений выводимых на дисплей немного(два-двасполовиной значащих десятичных разряда), то проще использовать табличное преобразование проведя все вычисления заранее на ПК.
Например, выводить значение оборотов на 4 знака с дискретностью 50 об/мин. От 0 до 10000 будет всего 200 значений в таблице. Если закодировать их в виде BCD то получится 2 байта на значение и минимум телодвижений с выводом на 7-сегментные индикаторы.
Таблица займёт всего 400 байт в FLASH-памяти и преобразование период-частота будет происходить практически мгновенно. И заметь - никаких плясок с мат.библиотеками, которые запросто отъедят десяток килобайт флеша.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 26
Зарегистрирован: Пн дек 15, 2014 19:04:08
Откуда: г. Пермь

Сообщение Andry_67 »

Если вам нужна частота то нужно просто считать количество импульсов за определенное время. Так как у вас 2 импульса за оборот то считайте сколько придёт импульсов за 500 миллисекунд, и получите "готовую" частоту в герцах.
akl
Друг Кота
Сообщения: 4475
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="dumbass",url="/forum/viewtopic.php?p=3396266#p3396266"]Хочу измерять частоту вращения вала асинхронной машины. Для этого буду использовать датчик на основе эффекта Холла (с магнитом).

...вопросы:
1 можно было бы как то улучшить читабельность путем программного преобразования/расчета периода в частоту. Но как это сделать я не знаю. В интернете пишут для умножения и деления исп. команды mul и div. Но подходят ли они действительно для программирования МК и если нет, то как можно осуществить программный расчет?
2 С учетом текущей внешней схемотехникой формирования импульса мне необходимо настраивать ICP на вход с подтяжкой, верно?
3 на одном из фото указаны параметры датчика. как понять, где говорится про его предельную частоту измерения?[/uquote]

1 Как вариант
TAHO_2313.zip
(21.73 КБ) 274 скачивания
2 Да.
3 До 300кГц можно не заботиться о быстродействии.
СпойлерИзображение
Вложения
SR16.PNG
(15.76 КБ) 747 скачиваний
Грызет канифоль
Сообщения: 272
Зарегистрирован: Сб июл 30, 2011 21:00:24

Сообщение AQ29 »

[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3397801#p3397801"]деление/умножение на МК да ещё вещественных чисел довольно затратное занятие. Если реальных значений выводимых на дисплей немного(два-двасполовиной значащих десятичных разряда), то проще использовать табличное преобразование проведя все вычисления заранее на ПК.
Таблица займёт всего 400 байт в FLASH-памяти и преобразование период-частота будет происходить практически мгновенно. И заметь - никаких плясок с мат.библиотеками, которые запросто отъедят десяток килобайт флеша.[/uquote]
Не так всё плохо с математикой в МК.
В хорошем макроассемблере деление 4-хбайтной переменной на 2-хбайтную будет одна макрокоманда с параметрами, скажем, такого типа:
div(делимое, делитель, итог деления).
Подключить файл с таким библиотечным элементом и написать команду – дело, условно говоря, нескольких минут.
Да и размеры программ не такие страшные. Команда деления занимает около 130 слов, команда умножения два на два байта занимает около 60 слов.
Так что всё просто и легко, никаких «плясок с мат.библиотеками».
Друг Кота
Аватара пользователя
Сообщения: 15802
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Макросы тоже в некотором роде библиотека.
Только в данном случае разница в результирующем объеме программного кода - при подпрограммке он меньше (если только сам макрос не есть вызов подпрограммы).
8)
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Да, а в какой форме представлены операнды? А результат? Это всё целые числа. И время выполнения этого деления на 8-битных?
считайте сколько придёт импульсов за 500 миллисекунд, и получите "готовую" частоту в герцах.
Частоту вращения всяких механизмов обычно измеряют в оборотах в МИНУТУ. Т.к. на герцы частота получается очень небольшой и её трудно будет измерить с достаточной точностью прямым способом. Быстрее и точнее измерять период между импульсами и потом приводить его к частоте. Для чего и нужна математика.

Надо сказать что частота вращения силового двигателя в 100Гц это на пределе механических характеристик применяемых материалов из которого изготавливают ротор. Бор-машинки электрические, но там ротор совсем маленький по размерам - разгоняются до 500Гц, а дальше только совсем маленький размер ротора и пневаматика.
Контактная информация:
Грызет канифоль
Сообщения: 272
Зарегистрирован: Сб июл 30, 2011 21:00:24

Сообщение AQ29 »

[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3400402#p3400402"]Да, а в какой форме представлены операнды? А результат? Это всё целые числа. И время выполнения этого деления на 8-битных?[/uquote]
Все операнды и результат– целые числа, а в чём проблема?
Операции с целыми числами - ничего сложного, школьная арифметика, только надо следить, чтобы, с одной стороны, обеспечить требуемую точность и, с другой стороны, не выскочить за диапазон переменной. Запятая появляется только при выводе на индикатор в соответствующем месте.

Быстрое деление, наверно, редко нужно, я ни разу не сталкивался.
По возможности деление вроде как заменяют умножением.
При умножении и делении все операции проводятся в регистрах РОН,
получается довольно быстро.
Грызет канифоль
Сообщения: 286
Зарегистрирован: Пт дек 30, 2016 18:05:50
Откуда: Украина.

Сообщение Deoptim »

Добрый день.
Помогите определить формат компилятора(чем открыть и компилировать?).
http://elm-chan.org/works/fldrv/fliv.zip
(или как альтернатива сделайте мне пожалуйста сразу hex файл, там же в нем фьюзы зашиты)
Спасибо.
Ответить

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