Не совсем, как раз если у Вас будут разрешены вложенные прерывания (разрешать их нужно сразу после помещения SREG в стек), то этот подход позволит с одной стороны сэкономить стек т. к. не надо будет сохранять в нем tmp, с другой стороны "укоротить" время выполнения обработчика прерывания (на 4 такта, поскольку не нужно будет сохранять в стеке tmp, т.е. выполнять лишние push pop). Такой подход можно рекомендовать, когда разрешено достаточно много прерываний и они могут быть вложенные, при этом для регистров полно другой полезной работы. Хотя лично я стараюсь не использовать вложенные прерывания, а просто делаю обработчики как можно короче и проще. Обработкой данных нужно заниматься в основном цикле, а в прерываниях я предпочитаю просто складывать данные в память и выставлять флаги, что данные приняты.
ibiza11 писал(а):
если использовать один и тот же регистр, то естественно затрется, я думаю это и новички понимают. для тех кто не понял: если для сохранения регистра SREG используется регистр r0-r31 и разрешается прерывание в прерывании, то для каждой операции сохранения нужно использовать отдельный регистр.
ты забыл, что изначально мы пытались сохранить SREG.напрямую без регистра его не сохранить. если сначала считать его в регистр tmp, то сам регистр уже меняется, а ведь ты сам писал, что я неправильно учу, мол tmp при этом меняется.
зачем выдирать слова без контекста?
ibiza11 писал(а):
smac писал(а):
если tmp будет отведен только под сохранение SREG.
.. Решил остановиться пока на 1 полоске (при 3Гц уже нормально видно) ....... (пока без рисунка)
Для себя выбрал два варианта:
минимум 5 линеек на колесо велосипеда, диаметр (включая шины) 70см.
Или
...по поводу одной линейки светодиодов на колесе мотоцикла:
разместить светодиоды не на колесе а соосно на планке сбоку от колеса. И раскручивать планку со светодиодами елекромотором, независимо от колеса. Это обеспечит стабильность индикации, хоть при нулевой скорости, хоть при максимальной.
_________________ Скелет колобка состоит из черепа.
ты забыл, что изначально мы пытались сохранить SREG.напрямую без регистра его не сохранить. если сначала считать его в регистр tmp, то сам регистр уже меняется, а ведь ты сам писал, что я неправильно учу, мол tmp при этом меняется.
Блин, что-то мы от темы ушли, нужно закругляться. В-общем, по-поводу "неправильно учу" это я немного погорячился. Итак, чтобы не плодить недопонимания и недосказанность попробую выразить все в коде. Вы предложили следующий вариан сохранения SREG
Код:
;---обработчик прерывания--- in tmp,sreg push tmp ---------- -------какой то код------- ---------- pop tmp out sreg,tmp reti ;----------
Этот вариант имеет право на жизнь при одной оговорке - tmp не должен использоваться вне обработчика прерываний. Внутри обработчика использовать можно начиная от push tmp и заканчивая pop tmp, при условии, что вложенные прерывания запрещены. Если нужно разрешить вложенные прерывания, для данного способа следует сделать так
Код:
;---обработчик прерывания--- in tmp,sreg push tmp sei ---------- -------какой то код------- ---------- cli pop tmp out sreg,tmp reti ;----------
Однако теперь использовать регистр tmp внутри обработчика нельзя т. к. tmp может измениться в другом обработчике прерывания. На мой взгляд, предложенным Вами вариантом следует пользоваться, когда необходимо использовать вложенные прерывания и при этом нужно ограничить число регистров, используемых для сохранения SREG одной штукой. При этом Ваш вариант имеет преимущество по быстродействию перед, можно сказать "классическим" вариантом:
Код:
;---обработчик прерывания--- push tmp in tmp,sreg push tmp sei ; только если нужно разрешить вложенные прерывания, иначе команда не нужна ---------- -------какой то код------- ---------- cli ; только если нужно разрешить вложенные прерывания, иначе команда не нужна pop tmp out sreg,tmp pop tmp reti ;----------
в четыре машинных цикла (push + pop), однако Ваш вариант проигрывает "классическому" в том, что нужен 1 регистр для сохранения SREG. Существует также "быстрый" вариант сохранения
Код:
;---обработчик прерывания--- in tmp,sreg ---------- -------какой то код------- ---------- out sreg,tmp reti ;----------
который выигрывает в быстродействии у приведенного Вами 4 машинных цикла, однако в этом случае вложенные прерывания исключены, если для сохранения SREG используется только один регистр на все прерывания. Теперь по поводу того, почему я сказал, что Вы даете неправильный совет. На мой взгляд, новичку следует рекомендовать "классический" вариант сохранения регистра SREG, который хотя и медленней всех, но зато универсальный. Мне кажется, что по мере того как начинающий разберется с прерываниями и техникой сохранения, остальные варианты придут "сами собой", либо человек задаст вопрос и будет уверенно ориентироваться в предложенных ему советах. Итак, надеюсь непоняток больше нет, ibiza11 извините за некоторую резкость, надеюсь, обойдется без обид.
З. Ы.
ibiza11 писал(а):
зачем выдирать слова без контекста?
Цитирование я применил только для того, чтобы Вам и другим участникам форума было понятно, на какой пост я отвечаю.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Еще раз повторяю ни один код из вышеуказанных не работает в моем случае.... Т.К. таимер обнуляеться сразу при прерывании следовательно нужно сохранять число на таимере до прерывания а не в нем(в прерывании уже 0 ).
Работает стабильно не нужен ни какой моторчик. Изображение стоит как вкопаное(правда при больших частотах в железе еще не проверял на макетке делал надо на печатку переносить)
А вот и картинка (прошу прощения за качество)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Работает стабильно не нужен ни какой моторчик. Изображение стоит как вкопаное(правда при больших частотах в железе еще не проверял на макетке делал надо на печатку переносить) А вот и картинка (прошу прощения за качество)
Очень неплохо, но IMHO: 3Гц мало (делал макет с одной линейкой индикации, неплохо, но не то) .
_________________ Скелет колобка состоит из черепа.
Программа?
...так наверно лучше рисунки делать? ( смотрим архив )
Это для ознакомления.
Модифицируйте как угодно для себя.
(Пустые места (делать нажатием клавиши DEL) можно заменять нолями и наоборот В нужном месте ставите 1, передвигаете курсор или жмете Enter - внизу готов результат для записи в порт МК. )
Можно добиться и вывода с операторaми любого языка программирования, хоть в столбик, хоть в строчку, хоть какой угодно готовый код, заполненный нужными данными , только скопируй в исходник.
Спасибо за .XLS
Подобрал подходящие МК для двух полосок без дополнительных микрух (8x4 портов)
ATmega8515
ATmega8535
ATmega32
ATmega16
Какую посоветуете ???
Просмотрев датыши на них решил что для данной схемки разници большой нет какую брать различия в памяти. хотя выбрал бы ту на которую есть датыш на русском(хотя это не так важно)
_________________ Чем больше думаеш, тем дольше уснуть не можеш...
Зарегистрирован: Пн мар 09, 2009 02:14:34 Сообщений: 30
Рейтинг сообщения:0
По поводу рисования картинок на колесе попробуй прогу FastLCD.
Очень помогает в таких случаях.
(Поисковик выдаст тебе кучу линков на скачивание).
На счет перехода на другой микроконтроллер - я бы не советовал ориентироваться на количество ножек.
Почему? Объясняю - максимальный длительно допустимый сумарный ток (ток через ножку земли) микроконтроллера порядка 200мА (могу немного ошибиться). При номинальном токе светика - 20мА ты сможеш безопасно запитать только 10 штук. 20 штук просто спалят контроллер.
Как вариант решения проблемы - ставить транзисторные ключи.
Как лучший вариант решения проблемы - поставить драйвер светодиодов. Эсли ставить драйвер 16ти канальный то удорожание схемы будет незначительное.
Так как драйвер работает через SPI-интерфейс то для управления ЛЮБЫМ количеством светодиодов нада только 2 ноги.
Так что можно будет дальше продолжать мучать тини2313
Расскажите, как пользовать сдвиговые регистры.-принцип- куда подавать какие сигналы. Я так понял, можно сразу по SPI отправлять например из тини2313?
Буду использовать К155ИР17
Зарегистрирован: Пн мар 09, 2009 02:14:34 Сообщений: 30
Рейтинг сообщения:0
Нет, не ставьвте регистры! Только драйверы светодиодов!
И будет вам щастье!
Ненада будет ставить баластные резики. Будет стабильный ток на светиках. Будет регулировка тока всех светодиодов одним резистором. Будет отключение всех светодиодов сразу.
Тока так!
Советую сразу ставить 16ти разрядные.
Можно выбрать шото из этой серии:
MBI5025
STP16CL596
CAT4016
Зарегистрирован: Пн май 05, 2008 14:36:30 Сообщений: 94 Откуда: г. Челябинск
Рейтинг сообщения:0
Evgen88 писал(а):
Нет, не ставьвте регистры! Только драйверы светодиодов! И будет вам щастье! Ненада будет ставить баластные резики. Будет стабильный ток на светиках. Будет регулировка тока всех светодиодов одним резистором. Будет отключение всех светодиодов сразу. Тока так!
Управлял 80 светодиодами с помощью 10 регистров 74HC164
БЕЗ резисторов, при этом запитывал регистры напряжением 2,2 В, а на входы С, D и R данные подавал с контроллера через делитель напряжения. Все работает ОК.
Самое сложное в этом деле - это 2,2В при токе до 1A
по ссылке Не плохо, особенно, что плата не заводская и практически одностороняя.
Но вот по транзистору и 2 резюка на каждый светик
Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.
Зарегистрирован: Пн мар 09, 2009 02:14:34 Сообщений: 30
Рейтинг сообщения:0
Цитата:
Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.
Ну если дешевле то тада можно
А по http://pawst.com/post/585490-ian-039-s-spoke-pov я бы в панельки не рискнул бы поставить микросхемы - пыляка, грязь, влага - неделя и контакта небудет! Или может быть лаком все это дело заливать? А регулятор напряжения вообще для батареек зло! Вобщем не делайте так.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения