Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс сен 30, 2018 20:51:35

ПростоНуб писал(а):Ведь удобней ехать пассажиром, чем самому крутить баранку
Согласен. :) Если за проезд взяли бы столько или меньше чем я потратил бы на топливо, по почему бы не поехать с комфортом на месте пассажира? :)

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

Вс сен 30, 2018 21:05:27

потратил бы на топливо

Нет, еще взяли бы за аммортизацию такси, а свое авто предложили бы Вам выбросить ;)

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

Вс сен 30, 2018 21:10:25

Вы это про AVR. :))) Спасибо не надо. :)

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

Вс сен 30, 2018 21:14:31

Вы это про AVR. :))) Спасибо не надо. :)

Если вы не полный дебил, то должны понимать, что в этой теме люди задают вопросы о МК АVR, котрый у них уже есть. А Вы, своими рекламными слоганами про STM способны только вызвать отторжение как к себе, так и ко всей продукции STMicro.

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

Вс сен 30, 2018 23:23:27

Увеличил частоту TWI до 40 кГц (до этого было 10), индикация дёргаться перестала. И тут прихожу через несколько часов - динамическая индикация встала, ярко горит последняя цифра :evil: Значит, контроллер завис в прерывании от RTC и не может из него выбраться (вложенные прерывания то я запретил). Значит, он ожидает от шины ответа, а она не отвечает. И вот как отследить, что шина TWI зависла и перезапустить её?

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

Пн окт 01, 2018 05:11:03

Таймаут добавить. Не просто висеть в цикле while (при ожидании флагов start/stop/ack), а декрементировать в нём переменную, при достижении нуля выходить из цикла с ошибкой.

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

Пн окт 01, 2018 06:17:37

тоже в SOP-8, так как габариты имеют значение.
Это уже противоречие. Вам же показали корпуса в разы меньше, чем SO-8 nри в разы большем количестве выводов. SO-8 это 6x5,4 мм и 8 ног - это монстр просто.

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

Пн окт 01, 2018 11:41:08

Это уже противоречие

Никакого противоречия
в разы большем количестве выводов

Именно. И для них надо развести дорожки на плате, которые займут места больше, чем сам корпус. Или Вы будете сейчас описывать преимущества многослойных плат?

SO-8 это 6x5,4 мм и 8 ног - это монстр просто.

Мне предложили не меньших монстров. Или TSSOP-20 6.5x6.5, или LQFP32 7x7. Если это "корпуса в разы меньше" - подучите арифметику.

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

Пн окт 01, 2018 12:20:16

Во-первых, кто заставляет все ноги разводить. А вот когда понадобится 7-ю ногу в so-8 нигде не возьмешь. Во-вторых, я чип 3х3 предлагал. Там и 2х2 есть, но это не под наше производство.

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

Пн окт 01, 2018 12:27:20

Таймаут добавить. Не просто висеть в цикле while (при ожидании флагов start/stop/ack), а декрементировать в нём переменную, при достижении нуля выходить из цикла с ошибкой.
Ок, сделал. Я так понимаю, что при возникновении ошибки нужно перезапустить модуль TWI? Для этого достаточно просто "передёрнуть" бит TWEN в регистре TWCR?

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

Пн окт 01, 2018 12:29:20

по-хорошему надо бы выяснить, что за ошибка.

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

Пн окт 01, 2018 12:34:52

конечно... если даже в простых схемах/программах костыли, то что же будет дальше?

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

Пн окт 01, 2018 13:09:18

В принципе...
От длительного зависона WDT спасает и без дополнительных счетчиков...
:roll:

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

Пн окт 01, 2018 14:10:35

конечно... если даже в простых схемах/программах костыли, то что же будет дальше?

Я не думаю, что это программная ошибка. Скорее всего, это прилетает помеха от импульсного преобразователя (у меня на этой плате стоит повышающий DC-DC) и от этого TWI глючит.

Добавлено after 50 seconds:
От длительного зависона WDT спасает и без дополнительных счетчиков...
:roll:
Вот да, щас как раз думаю в этом направлении.

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

Вт окт 02, 2018 08:29:43

Корректную программу на ассемблере может вышибить в "глюк" только искровой разряд с зажигалки для газплиты в шину питания устройства. И то... не во всех случаях...
8)

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

Вт окт 02, 2018 18:11:17

Ждать что-то в прерывании - вот самый большой глюк. Не надо ничего ждать в прерывании, это изначально порочная практика.
Почему бы информацию не считывать в основном потоке, а в прерывании только выставить флаг что "пора читать".

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

Чт окт 04, 2018 17:17:50

Здравствуете.
У кого установлена AVR Studio версии 4.19 и ниже, уделите минут пять, погоняйте код (приложеный)
Таймер/счетчик-1 запрограммирован "Fast PWM" 8-бит. При отладке в AVR Studio (пробовал версии 4, 4.13, 4.18, 4.19) Т/С-1 ведет себя как "Phase correct PWM" (TCNT - счетный регистр должен при "Fast PWM" от "0" досчитать до "FF", выставить флаг переполнения, сброситься в "0" и опять до "FF"... , у меня при отладке "TCNT" от "0" считает до "FF", после от "FF" считает до "0", выставляет флаг переполнения и т.д. ...?). Если и у Вас так-же - наверно глюк студии, если нет - буду копать дальше - переустанавливать винду и т.д. ...
В Протеусе все работает.
В AVR Studio 5.1 - отладка проходит правильно, но не могу при отладке регистры периминовать, так, как они в программе обозваны директивой ".def" -? Может кто знает как при отладке можно регистры переименовывать в AVR Studio 5.1?
Вложения
Fast-PWM.rar
(48.03 KiB) Скачиваний: 199

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

Чт окт 04, 2018 22:10:42

Ждать что-то в прерывании - вот самый большой глюк. Не надо ничего ждать в прерывании, это изначально порочная практика.
Почему бы информацию не считывать в основном потоке, а в прерывании только выставить флаг что "пора читать".
Согласен, я практически всё делаю в прерываниях, а в основной программе лишь "заглушка" rjmp PC. Тогда такой вопрос. Мне нужно, чтобы некоторый кусок кода в основной программе выполнялся не в замкнутом цикле, а только после выхода из прерывания. Т.е. выполнили однократно этот кусок кода и ждём прерывания. Вышли из прерывания и снова однократно выполнили этот код. Т.е. можно ли как-то из прерывания выйти не туда, откуда оно было вызвано? Или у меня в принципе подход неверный?

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

Чт окт 04, 2018 22:21:19

Это в принципе подход неверный. Прерывание должно вернуть управление ровно туда откуда было вызвано и точка. Максимум что можно сделать - в прерывании выставить флаг в отдельной переменной а в основном потоке тупо пасти его и делать какое-то действие если он возникнет, не забыв сбросить.

Даже сразу наборчик макросов для этих целей припасён.

СпойлерДолжен быть объявлен регистр с "флагами" под символическим именем именем flags.
Код:
.macro set_flag
  SET
  BLD   flags, @0
.endmacro

.macro clr_flag
  CLT
  BLD   flags, @0
.endmacro

.macro go_if_flag
  BST    flags, @0
  BRTS   @1
.endmacro

.macro go_if_noflag
  BST    flags, @0
  BRTC   @1
.endmacro

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

Чт окт 04, 2018 23:35:54

Хорошая идея с флагом Т :beer: Я про него забыл :oops:
Ответить