Обсуждаем контроллеры компании Atmel.
Пн июн 06, 2022 11:44:47
Подскажите про ШИМ... Его выполнение должно быть строго в пределах вектора прерывание или можно, "как-то" вынести за пределы вектора в основное тело программы. Я сделал измеритель тока мотора и мне надо его остановить при увеличении на него нагрузки... Но я еще присандалел ШИМ индикацию, и когда появляется индикация, я не могу остановить мотор, т.е. он остановится после выполнения ШИМ. Хотелось бы, что при выполнение ШИМ, я мог останавливать мотор... Пробовал запихнуть в основной цикл ШИМ... не работает индикация, а в таймере работает...
Пн июн 06, 2022 12:44:43
Есть такое понятие как время реакции. Время реакции локально, пример, защита двигателя по току, время реакции системы в целом. Либо время реакции на кнопку скажем. Включить двигатель, выключить. Здесь мы оперируем в десятках мс.
Пн июн 06, 2022 13:17:31
Подскажите про ШИМ... Его выполнение должно быть строго в пределах вектора прерывание или можно, "как-то" вынести за пределы вектора в основное тело программы. Я сделал измеритель тока мотора и мне надо его остановить при увеличении на него нагрузки... Но я еще присандалел ШИМ индикацию, и когда появляется индикация, я не могу остановить мотор, т.е. он остановится после выполнения ШИМ. Хотелось бы, что при выполнение ШИМ, я мог останавливать мотор... Пробовал запихнуть в основной цикл ШИМ... не работает индикация, а в таймере работает...
у вас программный ШИМ, что ли? что такое "ШИМ-индикация" и как она связана с управлением мотором?
Пн июн 06, 2022 15:00:53
Под ШИМ индикацией, я понимаю плавное мигание светодиода. А мотор посадил через токоизмеритель и пороговый уровень на отдельных микрухал, и в МК приходит 1 или 0 на PCINT. Так вот, когда "Плавное включение светодиода" работает, приходящая единица по PCINT, не срабатывает, пока не отработает вектор прерывания таймера... Вот думал разместить "Плавное включение светодиода" в основной цикл программы, чтоб его можно прервать вектором, но не работает. Отсюда вопрос, может ШИМ работать вне вектора прерывания...
Пн июн 06, 2022 15:07:41
Двигатель важнее. Поэтому, сделай аппаратный ШИМ для светодиодов
Пн июн 06, 2022 15:08:18
я не понимаю, как там у вас всё устроено...
ШИМ мотора аппаратный?
ШИМ светодиода аппаратный?
что за прерывания - по таймеру или от совпадения ШИМ?
если вы пишите на ассемблере, что мешает вам разрешить прерывания сразу при входе в обработчик "мешающего" прерывания?
Пн июн 06, 2022 15:30:49
Примерный код, при котором шим в таймере и он работает, но когда нужно отработать остановку, то при работе индикации, ясное дело, мотор не остановится...
Поэтому, я предположил запихнуть ШИМ в основной цикл
И так индикация не работает. Вот это хотелось узнать... почему...
Вт июн 07, 2022 11:26:15
Странно, сейчас добавил... и заработало... Единственное что потом добавил это
cli
out OCR1A,Temp7
sei
Пт июн 10, 2022 14:08:53
Задержка в прерывании - это как матерится в дамском обществе.
Добавлено after 1 minute 38 seconds:
Код написан жутко.
Пт июн 10, 2022 16:58:00
Зависит от задачи. А данном случае три такта. Но и чем. Код. Ну да.
Чт дек 29, 2022 20:53:19
Здравствуйте. Возник вопрос, как в AVR ассемблере посчитать длину строки, размещенной в памяти программ директивой DB.
Например, в 8051 для этого достаточно отнять от адреса метки после строки, адрес метки самой строки. Сделано по-людски, один адрес - один байт.
Но в AVR, одному адресу зачем-то соответствует два байта, и я не очень понимаю, как оно там размещается, и как это считать
Чт дек 29, 2022 21:41:00
Ну так и считать
отнять от адреса метки после строки, адрес метки самой строки.
, только умножить на 2. в чём проблема?
Чт дек 29, 2022 21:47:55
Jack_A, а если строка с нечетным количеством символов? И добита нулем в конце до четного ?
Чт дек 29, 2022 22:48:21
Just_Fluffy писал(а):а если строка с нечетным количеством символов? И добита нулем в конце до четного ?
Оно само так делает
- Код:
home/lester/AVR/avra-master/includes/m48def.inc(914) : PRAGMA directives currently ignored
asmtest.asm(31) : Warning : A .DB segment with an odd number of bytes is detected. A zero byte is added.
Пт дек 30, 2022 00:05:29
Shuspano, да, студия умная. Но вопрос остается - как определить нечетную длину строки?
Пт дек 30, 2022 03:21:13
Подсчитать число символов в строке, кроме нуля. Если младший байт 1, значит нечётное.
Пт дек 30, 2022 07:01:04
Shuspano, да, студия умная. Но вопрос остается - как определить нечетную длину строки?
Так, как говорит Demiurg. "В лоб" - программно. Сам так поступаю.
- Код:
#define Text "Ля-Ля-Ля"
.
.
.Macro ldiw
ldi @0L,low(@1)
ldi @0H,High(@1)
.EndMacro
.
.
textptr: .db Text,'\0'
.
.
ldiw Z,textptr*2
clr r16
loop1:
inc r16
lpm r17,Z+
tst r17
brne loop1
; r16 - длина строки
Ну или совсем просто
ldi r16,STRLEN(Text)
Пт дек 30, 2022 12:26:59
Хе... "В лоб" там вообще не нужно знать конец строки, только начало. Но это только в Run-Time.
А на этапе компиляции, увы, только по дельте 2 меток, помноженной на 2. И принимать потом уже программные меры, что б не схавать лишний ноль.
С.Н.,
STRLEN(Text)
- простите, это что? Фишка препроцессора?
Каюсь, я уже достаточно давно перестала писать под АВР на асме... Хотя это был первый асм для МК, который изучала вместе с АВРками. Эхххх.. где моя любимая отладка 2313....
Пт дек 30, 2022 14:13:06
В avrasm2 такой директивы (strlen) нету...
Или макрос или чего-то из микрочипстудио...
Пт дек 30, 2022 17:57:57
В avrasm2 такой директивы (strlen) нету...
Или макрос или чего-то из микрочипстудио...
Нет проблем. Сам как-то пропустил.
Стр. 33.
Я сначала проверил, прежде чем выкладывать версию.
- Вложения
-
- AVRASM2 Assembler Manual.pdf
- (312.32 KiB) Скачиваний: 56
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.