Рисунок на колесе

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

ibiza11 писал(а):тогда нет смысла операции push:)

Не совсем, как раз если у Вас будут разрешены вложенные прерывания (разрешать их нужно сразу после помещения SREG в стек), то этот подход позволит с одной стороны сэкономить стек т. к. не надо будет сохранять в нем tmp, с другой стороны "укоротить" время выполнения обработчика прерывания (на 4 такта, поскольку не нужно будет сохранять в стеке tmp, т.е. выполнять лишние push pop). Такой подход можно рекомендовать, когда разрешено достаточно много прерываний и они могут быть вложенные, при этом для регистров полно другой полезной работы. Хотя лично я стараюсь не использовать вложенные прерывания, а просто делаю обработчики как можно короче и проще. Обработкой данных нужно заниматься в основном цикле, а в прерываниях я предпочитаю просто складывать данные в память и выставлять флаги, что данные приняты.

ibiza11 писал(а):если использовать один и тот же регистр, то естественно затрется, я думаю это и новички понимают.
для тех кто не понял:
если для сохранения регистра SREG используется регистр r0-r31 и разрешается прерывание в прерывании, то для каждой операции сохранения нужно использовать отдельный регистр.

Это конечно проще, но иногда регистров не хватает
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

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

тогда нет смысла операции push:)
Аватара пользователя
Аксель
Опытный кот
Сообщения: 800
Зарегистрирован: Ср апр 25, 2007 09:50:43
Откуда: Киев
Контактная информация:

Сообщение Аксель »

SeamaNCOS писал(а):Наконец то заработало :))

..
Решил остановиться пока на 1 полоске (при 3Гц уже нормально видно)
....... (пока без рисунка)


Для себя выбрал два варианта:
минимум 5 линеек на колесо велосипеда, диаметр (включая шины) 70см.

Или

...по поводу одной линейки светодиодов на колесе мотоцикла:
разместить светодиоды не на колесе а соосно на планке сбоку от колеса. И раскручивать планку со светодиодами елекромотором, независимо от колеса. Это обеспечит стабильность индикации, хоть при нулевой скорости, хоть при максимальной.
Скелет колобка состоит из черепа.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение 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 писал(а):зачем выдирать слова без контекста?

Цитирование я применил только для того, чтобы Вам и другим участникам форума было понятно, на какой пост я отвечаю.
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

Еще раз повторяю ни один код из вышеуказанных не работает в моем случае.... Т.К. таимер обнуляеться сразу при прерывании следовательно нужно сохранять число на таимере до прерывания а не в нем(в прерывании уже 0 ).

Работает стабильно не нужен ни какой моторчик. Изображение стоит как вкопаное(правда при больших частотах в железе еще не проверял на макетке делал надо на печатку переносить)
А вот и картинка :) (прошу прощения за качество)
Вложения
10042009(015).jpg
(85.7 КБ) 1326 скачиваний
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
Аксель
Опытный кот
Сообщения: 800
Зарегистрирован: Ср апр 25, 2007 09:50:43
Откуда: Киев
Контактная информация:

Сообщение Аксель »

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


Очень неплохо, но IMHO: 3Гц мало (делал макет с одной линейкой индикации, неплохо, но не то) .
Скелет колобка состоит из черепа.
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

С двумя линейками уже Мегу надо чтоб не замарачиваться с дополнительными микрухами на тиньке портов нехватит (у меня 14 светиков хотелось бы больше) :)

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

Еще бы прогу на ПК написать чтоб рисунки рисовать. А то в матрице
.db 0b00111111,0b11111111 совсем неудобно. Их еще и 2е по 138 строк. Ужас.
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
Аксель
Опытный кот
Сообщения: 800
Зарегистрирован: Ср апр 25, 2007 09:50:43
Откуда: Киев
Контактная информация:

Сообщение Аксель »

Программа?
...так наверно лучше рисунки делать? :)) ( смотрим архив )

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

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

Можно добиться и вывода с операторaми любого языка программирования, хоть в столбик, хоть в строчку, хоть какой угодно готовый код, заполненный нужными данными :))) , только скопируй в исходник.
Вложения
tiny14led.zip
(3.49 КБ) 875 скачиваний
Скелет колобка состоит из черепа.
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

Спасибо за .XLS
Подобрал подходящие МК для двух полосок без дополнительных микрух (8x4 портов)
ATmega8515
ATmega8535
ATmega32
ATmega16
Какую посоветуете ???
Просмотрев датыши на них решил что для данной схемки разници большой нет какую брать различия в памяти. хотя выбрал бы ту на которую есть датыш на русском(хотя это не так важно)
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
Evgen88
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн мар 09, 2009 02:14:34

Сообщение Evgen88 »

По поводу рисования картинок на колесе попробуй прогу FastLCD.
Очень помогает в таких случаях.
(Поисковик выдаст тебе кучу линков на скачивание).

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

Как вариант решения проблемы - ставить транзисторные ключи.
Как лучший вариант решения проблемы - поставить драйвер светодиодов. Эсли ставить драйвер 16ти канальный то удорожание схемы будет незначительное.
Так как драйвер работает через SPI-интерфейс то для управления ЛЮБЫМ количеством светодиодов нада только 2 ноги.
Так что можно будет дальше продолжать мучать тини2313 :)
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

Расскажите, как пользовать сдвиговые регистры.-принцип- куда подавать какие сигналы. Я так понял, можно сразу по SPI отправлять например из тини2313?
Буду использовать К155ИР17
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

рекомендую 74HC164, у нее ног меньше - 14, разрядность 8
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

аналог КР1564ИР8, только дороже
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

А также 555ир8
Уже купил их.
Так что подавать раньше Такт или Дата ?

Спасибо, видимо разобрался. Сообщу о результатах
Аватара пользователя
Evgen88
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн мар 09, 2009 02:14:34

Сообщение Evgen88 »

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

Советую сразу ставить 16ти разрядные.
Можно выбрать шото из этой серии:
MBI5025
STP16CL596
CAT4016
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

Владимир К. писал(а):А такое не подойдет? Уже все готовое. И рисунки менять можно.

http://pawst.com/post/585490-ian-039-s-spoke-pov


Ахренеть :shock:
Нельзя всё знать, достаточно понимать.
NiceMAN
Встал на лапы
Сообщения: 94
Зарегистрирован: Пн май 05, 2008 14:36:30
Откуда: г. Челябинск

Сообщение NiceMAN »

Evgen88 писал(а):Нет, не ставьвте регистры! Только драйверы светодиодов!
И будет вам щастье!
Ненада будет ставить баластные резики. Будет стабильный ток на светиках. Будет регулировка тока всех светодиодов одним резистором. Будет отключение всех светодиодов сразу.
Тока так! :)

Управлял 80 светодиодами с помощью 10 регистров 74HC164
БЕЗ резисторов, при этом запитывал регистры напряжением 2,2 В, а на входы С, D и R данные подавал с контроллера через делитель напряжения. Все работает ОК.
Самое сложное в этом деле - это 2,2В при токе до 1A
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

Сообщение 1995kenny »

по ссылке Не плохо, особенно, что плата не заводская и практически одностороняя.
Но вот по транзистору и 2 резюка на каждый светик :shock:
Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.
Аватара пользователя
Evgen88
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн мар 09, 2009 02:14:34

Сообщение Evgen88 »

Evgen88 так я на каждый и поставлю по резюку 47 ом.SMD1206.Причем регистры дешевые ,и просто вобще со стандартной логикой работать.

Ну если дешевле то тада можно :)

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

Сообщение Evgen88 »

:shock: Досмотрел! :shock:
Вот вам и драйвер светодиодов. http://pawst.com/post/585490-ian-039-s-spoke-pov
В третей версии конструкции люди от регистров пришли к драйверу.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»