Страница 333 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 10:14:55
akl
[uquote="dumbass",url="/forum/viewtopic.php?p=3396032#p3396032"]Как правильно настроить вывод ICP МК (тн2313), если в МК-ре т/с Т1 настроен в режиме захвата?
В книге написано что на вход. А с подключенным подтягивающем резистором или вывод должен "висеть в воздухе"?
По-идее разницы быть не должно...да и на практике, вроде бы, ничего не изменилось. Но все же как правильно?
Спасибо![/uquote] Так и так правильно. Сам использую и с включением подтяжки и Z-состоянием, если есть внешняя подтяжка. К примеру
Спойлер

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 12:19:44
trofim2
А зачем подавать входной сигнал на два входа ICP и PD0?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 12:37:44
akl
Ошибка разводки печати. На самом деле, подключение идет на PB0/T0. Для частотомеров на AVR методом захвата, когда счет периодов измеряемой частоты идет T0, а счет периодов опорной частоты T1.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 14:14:24
dumbass
Хочу измерять частоту вращения вала асинхронной машины. Для этого буду использовать датчик на основе эффекта Холла (с магнитом).
По программе: коэффициент предделителя выбрал 1024, чтобы значения периода было в милисекундах (пускай и слегка не точно).
Полученное значение периода сигнала вывожу на светодиоды в двоичном виде. Далее из двоичного числа делаю десятичное. Делю полученное значение на коэффициент =16/2 (16-частота работы МК, если бы было 1МГц, то на 1000 тактов МК был 1 такт таймера. Это мне дает: Тт1=Кпреддел./Fмк=1024/1000000=1,024мс -т.е. на св-диодах я получаю период сигнала.
откуда взялась двойка: на диске у меня две прорези, т.е. я имею на диске два зуба (см фото).)
Далее математически нахожу частоту и частоту оборотов в минуту.
вот так.
Знаю, Вы скажете мне на это --
но и до этого я дошел не сразу)
С семисегментным индикатором еще не работал, поэтому применяю св-диоды.
Спойлер

Спойлер
Код: Выделить всё
.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 на одном из фото указаны параметры датчика. как понять, где говорится про его предельную частоту измерения?
Спасибо!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 09, 2018 14:28:16
BOB51
На фото оптический датчик "на просвет" и диск с одним просветом (пропилом, окном).
Из магнитных - шестерня с А3144 и "магнитом ссади"(зуб шестерни в качествн магнитного шунта).
Датчик в виде наклеянного кусманчикафольги и оптрона "на отражение".
Как вариант - диск с прорезями и ранее показанный оптрон "на просвет".

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 11, 2018 22:22:12
Alexeyslav
деление/умножение на МК да ещё вещественных чисел довольно затратное занятие. Если реальных значений выводимых на дисплей немного(два-двасполовиной значащих десятичных разряда), то проще использовать табличное преобразование проведя все вычисления заранее на ПК.
Например, выводить значение оборотов на 4 знака с дискретностью 50 об/мин. От 0 до 10000 будет всего 200 значений в таблице. Если закодировать их в виде BCD то получится 2 байта на значение и минимум телодвижений с выводом на 7-сегментные индикаторы.
Таблица займёт всего 400 байт в FLASH-памяти и преобразование период-частота будет происходить практически мгновенно. И заметь - никаких плясок с мат.библиотеками, которые запросто отъедят десяток килобайт флеша.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июн 12, 2018 13:14:01
Andry_67
Если вам нужна частота то нужно просто считать количество импульсов за определенное время. Так как у вас 2 импульса за оборот то считайте сколько придёт импульсов за 500 миллисекунд, и получите "готовую" частоту в герцах.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср июн 13, 2018 04:02:18
akl
[uquote="dumbass",url="/forum/viewtopic.php?p=3396266#p3396266"]Хочу измерять частоту вращения вала асинхронной машины. Для этого буду использовать датчик на основе эффекта Холла (с магнитом).
...вопросы:
1 можно было бы как то улучшить читабельность путем программного преобразования/расчета периода в частоту. Но как это сделать я не знаю. В интернете пишут для умножения и деления исп. команды mul и div. Но подходят ли они действительно для программирования МК и если нет, то как можно осуществить программный расчет?
2 С учетом текущей внешней схемотехникой формирования импульса мне необходимо настраивать ICP на вход с подтяжкой, верно?
3 на одном из фото указаны параметры датчика. как понять, где говорится про его предельную частоту измерения?[/uquote]
1 Как вариант
2 Да.
3 До 300кГц можно не заботиться о быстродействии.
Спойлер

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт июн 14, 2018 20:45:06
AQ29
[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3397801#p3397801"]деление/умножение на МК да ещё вещественных чисел довольно затратное занятие. Если реальных значений выводимых на дисплей немного(два-двасполовиной значащих десятичных разряда), то проще использовать табличное преобразование проведя все вычисления заранее на ПК.
Таблица займёт всего 400 байт в FLASH-памяти и преобразование период-частота будет происходить практически мгновенно. И заметь - никаких плясок с мат.библиотеками, которые запросто отъедят десяток килобайт флеша.[/uquote]
Не так всё плохо с математикой в МК.
В хорошем макроассемблере деление 4-хбайтной переменной на 2-хбайтную будет одна макрокоманда с параметрами, скажем, такого типа:
div(делимое, делитель, итог деления).
Подключить файл с таким библиотечным элементом и написать команду – дело, условно говоря, нескольких минут.
Да и размеры программ не такие страшные. Команда деления занимает около 130 слов, команда умножения два на два байта занимает около 60 слов.
Так что всё просто и легко, никаких «плясок с мат.библиотеками».
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июн 15, 2018 09:38:46
BOB51
Макросы тоже в некотором роде библиотека.
Только в данном случае разница в результирующем объеме программного кода - при подпрограммке он меньше (если только сам макрос не есть вызов подпрограммы).

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт июн 15, 2018 20:05:13
Alexeyslav
Да, а в какой форме представлены операнды? А результат? Это всё целые числа. И время выполнения этого деления на 8-битных?
считайте сколько придёт импульсов за 500 миллисекунд, и получите "готовую" частоту в герцах.
Частоту вращения всяких механизмов обычно измеряют в оборотах в МИНУТУ. Т.к. на герцы частота получается очень небольшой и её трудно будет измерить с достаточной точностью прямым способом. Быстрее и точнее измерять период между импульсами и потом приводить его к частоте. Для чего и нужна математика.
Надо сказать что частота вращения силового двигателя в 100Гц это на пределе механических характеристик применяемых материалов из которого изготавливают ротор. Бор-машинки электрические, но там ротор совсем маленький по размерам - разгоняются до 500Гц, а дальше только совсем маленький размер ротора и пневаматика.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб июн 16, 2018 08:51:26
AQ29
[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3400402#p3400402"]Да, а в какой форме представлены операнды? А результат? Это всё целые числа. И время выполнения этого деления на 8-битных?[/uquote]
Все операнды и результат– целые числа, а в чём проблема?
Операции с целыми числами - ничего сложного, школьная арифметика, только надо следить, чтобы, с одной стороны, обеспечить требуемую точность и, с другой стороны, не выскочить за диапазон переменной. Запятая появляется только при выводе на индикатор в соответствующем месте.
Быстрое деление, наверно, редко нужно, я ни разу не сталкивался.
По возможности деление вроде как заменяют умножением.
При умножении и делении все операции проводятся в регистрах РОН,
получается довольно быстро.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июн 17, 2018 13:33:09
Deoptim
Добрый день.
Помогите определить формат компилятора(чем открыть и компилировать?).
http://elm-chan.org/works/fldrv/fliv.zip
(или как альтернатива сделайте мне пожалуйста сразу hex файл, там же в нем фьюзы зашиты)
Спасибо.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июн 17, 2018 14:08:13
WiseLord
Ассемблер из комплекта avr-gcc.
Makefile в наличии, так что чего-то вроде WinAVR, в котором есть и сам gcc, и make, должно быть достаточно.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс июн 17, 2018 14:43:59
Deoptim
Спасибо.
У меня еще один вопросик.
В
main.S есть следующие фюзы для Attiny13A:
Код: Выделить всё
;----------------------------------------------;
; Fuse values
;----------------------------------------------;
.section .fuse,"a",@progbits
.dc.b 0b01111010 ; Fuse low bits
.dc.b 0b11111000 ; Fuse high bits
Я использую HVS(вот reset фюзы по умолчанию):
Код: Выделить всё
g:\_flashlight\ATtiny\HVS\LPT\avrxtool32\bin>avrpp.exe -RF
Put a device on the socket and type Enter...
PAR->Unknown device (FF-FF-FF).
HVS->Detected device is ATtiny13.
Low: 01101010
││││││└┴── CKSEL[1:0] Clock
││││└┴── SUT[1:0] Startup time
│││└── CKDIV8 Clock division ratio (1:1/1, 0:1/8)
││└── WDTON (1:WDT normal, 0:WDT always on)
│└── EESAVE (Retain EEPROM at chip erase 1:No, 0:Yes)
└── SPIEN (1:Disable ISP, 0:Enable ISP) *Available only HVS mode
High:---11111
││││└── RSTDISBL (RESET pin 1:Enable, 0:Disable(PB5))
││└┴── BODLEVEL[1:0] (BOD 11:None, 10:1.8V, 01:2.7V, 00:4.3V)
│└── DWEN (On-Chip Debugging via RESET pin 1:Disable, 0:Enable)
└── SPMEN (SPM instruction 1:Disable, 0:Enable)
Cal: 98
g:\_flashlight\ATtiny\HVS\LPT\avrxtool32\bin>
Мне кажется, или в
main.S big-endian формат фюзов или наоборот в HVS он big-endian?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 18, 2018 08:29:48
pyzhman
Достаточно посмотреть на расположение RSTDISBL согласно даташита.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн июн 18, 2018 18:11:44
dumbass
Спасибо за ответы, буду пробовать!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июн 26, 2018 09:50:02
siimao
Уважаемый akl.
Стал проверять работу brtc в протеус. Один момент: для того, чтобы выйти из цикла brtc приходится отправлять команду два раза. Причем останов происходит на команде brtc.
Отправляю сообщение - перехожу в паузу - программа на brtc и флаг T установлен. Продолжение Run не изменяет ситуацию.
Повторное отправление сообщения и происходит выход из цикла с отработкой последующих команд и сбросом флага T.
Относительно вашего решения:
https://radiokot.ru/forum/viewtopic.php ... start=6420
Пт янв 26, 2018 14:25:41
Это баг Протеус или какая-то особенность? И как с ней бороться?
Спасибо!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июн 26, 2018 11:51:43
Demiurg
Симулируется спящий режим. Поэтому все верно. При включенном спящем режиме выполнение программы прекращается сразу после команды sleep. И разбудить МК можно только действиями зависящими от настройки спящего режима.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт июн 26, 2018 12:04:54
siimao
Demiurg, спасибо огромное за ответ. Буду пробовать при подключенном сотике (ME) в связке с Протеус. Или так тоже не получится и надо ME+железо?