Страница 3 из 13

Добавлено: Ср апр 08, 2009 23:02:38
smac
ibiza11 писал(а): тогда нет смысла операции push:)
Не совсем, как раз если у Вас будут разрешены вложенные прерывания (разрешать их нужно сразу после помещения SREG в стек), то этот подход позволит с одной стороны сэкономить стек т. к. не надо будет сохранять в нем tmp, с другой стороны "укоротить" время выполнения обработчика прерывания (на 4 такта, поскольку не нужно будет сохранять в стеке tmp, т.е. выполнять лишние push pop). Такой подход можно рекомендовать, когда разрешено достаточно много прерываний и они могут быть вложенные, при этом для регистров полно другой полезной работы. Хотя лично я стараюсь не использовать вложенные прерывания, а просто делаю обработчики как можно короче и проще. Обработкой данных нужно заниматься в основном цикле, а в прерываниях я предпочитаю просто складывать данные в память и выставлять флаги, что данные приняты.
ibiza11 писал(а): если использовать один и тот же регистр, то естественно затрется, я думаю это и новички понимают.
для тех кто не понял:
если для сохранения регистра SREG используется регистр r0-r31 и разрешается прерывание в прерывании, то для каждой операции сохранения нужно использовать отдельный регистр.
Это конечно проще, но иногда регистров не хватает

Добавлено: Чт апр 09, 2009 00:24:24
ibiza11
ты забыл, что изначально мы пытались сохранить SREG.напрямую без регистра его не сохранить. если сначала считать его в регистр tmp, то сам регистр уже меняется, а ведь ты сам писал, что я неправильно учу, мол tmp при этом меняется.
зачем выдирать слова без контекста?
ibiza11 писал(а):
smac писал(а):если tmp будет отведен только под сохранение SREG.
тогда нет смысла операции push:)

Добавлено: Чт апр 09, 2009 16:56:51
Аксель
SeamaNCOS писал(а):Наконец то заработало :))

..
Решил остановиться пока на 1 полоске (при 3Гц уже нормально видно)
....... (пока без рисунка)
Для себя выбрал два варианта:
минимум 5 линеек на колесо велосипеда, диаметр (включая шины) 70см.

Или

...по поводу одной линейки светодиодов на колесе мотоцикла:
разместить светодиоды не на колесе а соосно на планке сбоку от колеса. И раскручивать планку со светодиодами елекромотором, независимо от колеса. Это обеспечит стабильность индикации, хоть при нулевой скорости, хоть при максимальной.

Добавлено: Чт апр 09, 2009 21:48:34
smac
ibiza11 писал(а):ты забыл, что изначально мы пытались сохранить 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 писал(а):зачем выдирать слова без контекста?
Цитирование я применил только для того, чтобы Вам и другим участникам форума было понятно, на какой пост я отвечаю.

Добавлено: Пт апр 10, 2009 08:58:27
SeamaNCOS
Еще раз повторяю ни один код из вышеуказанных не работает в моем случае.... Т.К. таимер обнуляеться сразу при прерывании следовательно нужно сохранять число на таимере до прерывания а не в нем(в прерывании уже 0 ).

Работает стабильно не нужен ни какой моторчик. Изображение стоит как вкопаное(правда при больших частотах в железе еще не проверял на макетке делал надо на печатку переносить)
А вот и картинка :) (прошу прощения за качество)

Добавлено: Пт апр 10, 2009 11:03:36
Аксель
SeamaNCOS писал(а): Работает стабильно не нужен ни какой моторчик. Изображение стоит как вкопаное(правда при больших частотах в железе еще не проверял на макетке делал надо на печатку переносить)
А вот и картинка :) (прошу прощения за качество)
Очень неплохо, но IMHO: 3Гц мало (делал макет с одной линейкой индикации, неплохо, но не то) .

Добавлено: Пт апр 10, 2009 12:38:58
SeamaNCOS
С двумя линейками уже Мегу надо чтоб не замарачиваться с дополнительными микрухами на тиньке портов нехватит (у меня 14 светиков хотелось бы больше) :)

Уже и плату нарисовал двухсторонняя 172х14мм получилась. Завтра травить буду.

Еще бы прогу на ПК написать чтоб рисунки рисовать. А то в матрице
.db 0b00111111,0b11111111 совсем неудобно. Их еще и 2е по 138 строк. Ужас.

Добавлено: Сб апр 11, 2009 14:24:51
Аксель
Программа?
...так наверно лучше рисунки делать? :)) ( смотрим архив )

Это для ознакомления.

Модифицируйте как угодно для себя.
(Пустые места (делать нажатием клавиши DEL) можно заменять нолями и наоборот :))) В нужном месте ставите 1, передвигаете курсор или жмете Enter - внизу готов результат для записи в порт МК. )

Можно добиться и вывода с операторaми любого языка программирования, хоть в столбик, хоть в строчку, хоть какой угодно готовый код, заполненный нужными данными :))) , только скопируй в исходник.

Добавлено: Вс апр 12, 2009 11:21:26
SeamaNCOS
Спасибо за .XLS
Подобрал подходящие МК для двух полосок без дополнительных микрух (8x4 портов)
ATmega8515
ATmega8535
ATmega32
ATmega16
Какую посоветуете ???
Просмотрев датыши на них решил что для данной схемки разници большой нет какую брать различия в памяти. хотя выбрал бы ту на которую есть датыш на русском(хотя это не так важно)

Добавлено: Вс апр 12, 2009 23:11:06
Evgen88
По поводу рисования картинок на колесе попробуй прогу FastLCD.
Очень помогает в таких случаях.
(Поисковик выдаст тебе кучу линков на скачивание).

На счет перехода на другой микроконтроллер - я бы не советовал ориентироваться на количество ножек.
Почему? Объясняю - максимальный длительно допустимый сумарный ток (ток через ножку земли) микроконтроллера порядка 200мА (могу немного ошибиться). При номинальном токе светика - 20мА ты сможеш безопасно запитать только 10 штук. 20 штук просто спалят контроллер.

Как вариант решения проблемы - ставить транзисторные ключи.
Как лучший вариант решения проблемы - поставить драйвер светодиодов. Эсли ставить драйвер 16ти канальный то удорожание схемы будет незначительное.
Так как драйвер работает через SPI-интерфейс то для управления ЛЮБЫМ количеством светодиодов нада только 2 ноги.
Так что можно будет дальше продолжать мучать тини2313 :)

Добавлено: Вт май 05, 2009 19:48:12
1995kenny
Расскажите, как пользовать сдвиговые регистры.-принцип- куда подавать какие сигналы. Я так понял, можно сразу по SPI отправлять например из тини2313?
Буду использовать К155ИР17

Добавлено: Ср май 06, 2009 07:46:01
NiceMAN
рекомендую 74HC164, у нее ног меньше - 14, разрядность 8

Добавлено: Ср май 06, 2009 07:47:17
NiceMAN
аналог КР1564ИР8, только дороже

Добавлено: Ср май 06, 2009 19:10:37
1995kenny
А также 555ир8
Уже купил их.
Так что подавать раньше Такт или Дата ?

Спасибо, видимо разобрался. Сообщу о результатах

Добавлено: Ср май 06, 2009 22:05:35
Evgen88
Нет, не ставьвте регистры! Только драйверы светодиодов!
И будет вам щастье!
Ненада будет ставить баластные резики. Будет стабильный ток на светиках. Будет регулировка тока всех светодиодов одним резистором. Будет отключение всех светодиодов сразу.
Тока так! :)

Советую сразу ставить 16ти разрядные.
Можно выбрать шото из этой серии:
MBI5025
STP16CL596
CAT4016

Добавлено: Ср май 06, 2009 22:22:14
mr_smit
Владимир К. писал(а):А такое не подойдет? Уже все готовое. И рисунки менять можно.

http://pawst.com/post/585490-ian-039-s-spoke-pov
Ахренеть :shock:

Добавлено: Чт май 07, 2009 12:16:04
NiceMAN
Evgen88 писал(а):Нет, не ставьвте регистры! Только драйверы светодиодов!
И будет вам щастье!
Ненада будет ставить баластные резики. Будет стабильный ток на светиках. Будет регулировка тока всех светодиодов одним резистором. Будет отключение всех светодиодов сразу.
Тока так! :)
Управлял 80 светодиодами с помощью 10 регистров 74HC164
БЕЗ резисторов, при этом запитывал регистры напряжением 2,2 В, а на входы С, D и R данные подавал с контроллера через делитель напряжения. Все работает ОК.
Самое сложное в этом деле - это 2,2В при токе до 1A

Добавлено: Чт май 07, 2009 15:47:08
1995kenny
по ссылке Не плохо, особенно, что плата не заводская и практически одностороняя.
Но вот по транзистору и 2 резюка на каждый светик :shock:
Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.

Добавлено: Чт май 07, 2009 18:02:59
Evgen88
Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.
Ну если дешевле то тада можно :)

А по http://pawst.com/post/585490-ian-039-s-spoke-pov я бы в панельки не рискнул бы поставить микросхемы - пыляка, грязь, влага - неделя и контакта небудет! Или может быть лаком все это дело заливать? А регулятор напряжения вообще для батареек зло! Вобщем не делайте так.

Добавлено: Чт май 07, 2009 18:15:35
Evgen88
:shock: Досмотрел! :shock:
Вот вам и драйвер светодиодов. http://pawst.com/post/585490-ian-039-s-spoke-pov
В третей версии конструкции люди от регистров пришли к драйверу.