есть генераторы с изолированным ротором(вал не выходит наружу), на валу внутри есть груз, который раскручивается от инерции.
главное установить ось генератора соосно колесу. ну и добавить батарею аккумуляторов.
или: разобрать диск на ободе и придумать, как туда прикошачить динамогенератор ( что на великах), оттдуа провести провода в натяжку и все)))
Не лучшая идея, динамо, то что на великах, оно неподвижное, а у нас линейка на колесе по идее закреплена, поэтому придется делать скользящие контакты типа щеток в эл. дрели и т.п. это дополнительный геморрой.
В каком-то из номеров радио были то-ли часы из компьютерного кулера, то-ли еще что-то, так вот там для подачи питания использовался хитрый трансформатор, с вращающейся вторичной обмоткой, от которой как раз и производилось питание вращающейся линейки светодиодов.
В общем описываю весь проект:
1. один датчик хола (или ХоллА )
2. две линейкисветодиодов на ATTiny2313 по 15 через 180 градусов)))
3. думаю все таки с изменяемой задержкой выставляемой по таймеру МК TCCR1.
ВОПРОС В ТОМ КАК РАЗДЕЛИТЬ ЧИСЛО (допустим)31250={Ocr1ah=0x7a Ocr1al=0x12}
на 160 или 256 да хоть на 2!!!!!!!!!!!
В асемблере уже двое суток мозг напрягаю, КАК???
Железо на моторе не правиться и ни вариться и ни краситься. только и думаю как прогу написать!!!
Чтоб число более ли менее совподало с желаемым результатом 1h=0xff 1L=0xff (КАК делить в этом случае??????? и какие операторы использовать с наименьшей погрешностью:((
) .
С питанием ни каких проблем. МАсса (-) всем извесный и щетка с вилки на диск колеса(+) (испытаная система чем меньше радиус от оси вращения тем стобильнее питание).
вот и все питание (конечно кренка(или преобразователь12-5V) ,Фильтр, конденсаторы)
_________________ Чем больше думаеш, тем дольше уснуть не можеш...
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
ВОПРОС В ТОМ КАК РАЗДЕЛИТЬ ЧИСЛО (допустим)31250={Ocr1ah=0x7a Ocr1al=0x12} на 160 или 256 да хоть на 2!!!!!!!!!!!
на два делить просто : сдвиг числа на один разряд вправо)))
на 4 - сдвиг на 2 разряда вправо.
на 160 можно последовательно на 16 и 10 -
1) на 16 сдвиг на 4 разряда вправо
2) на 10 - привожу макрос :
Код:
;-------деление 16 разрядного числа на константу .macro Div clr Rest ;очистка остатка ldi tmp,16 ;загрузка в счетчик кол-ва разрядов loop: lsl @0L ;сдвиг влево rol @0H ; rol Rest ; subi Rest,@1 ;вычитаем из остатка константу brlo NotBigger ;если остаток =< 0, то переходим на метку inc @0L ;заносим единицу в младший разряд rjmp dalee ;продолжаем разговор ;) NotBigger: subi Rest,-(@1) ;отменяем вычитание dalee: dec tmp ;уменьшаем кол-во разрядов на 1 brne loop ;возвращаемся в начало цикла, если не все разряды сдвинуты .endm
для использования макроса нужно обьявить 16 битную переменную из двух 8 битных регистров. первый операнд - 16 битное делимое, второй операнд - 8 битный делитель. Rest и tmp изменяются. если нужно их сохранить, используйте push и pop. надеюсь помог)
Спосибо как я понял
@0H - старший регистр (в моем случае копия числа из таймера OCR1AH)
@0L- младший регистр (в моем случае копия числа из таймера OCR1AL)
@1 - то на что делим ( допустим 0x10)
_________________ Чем больше думаеш, тем дольше уснуть не можеш...
Посмотрел я тот проект зарубежный. Здорово, конечно. Но вот 200 диодов будут стоить 2000р - дороговато. По крайней мере для меня. И жрать будут дофига. Написать программу - проще пареной репы. Вот собрать железо - это действительно сложно. А если дождь? А если грязь? Как потом это ЧУДО отмывать?! Может кто-то предложит широко доступный, подходящий для наших целей корпус?
Корпус собираюсь делать из двух пластин оргстекла. А светодиоды надо было покупать как герлянды у китайцев под новый год выходило около 1.5-2 р за светодиод(+ провода и резистор на каждом светодиоде)
_________________ Чем больше думаеш, тем дольше уснуть не можеш...
Написал я прошивку(только прерывания без индикации) но она никак работать не хочет.
Сделал так как писал Evgen88 (как изначально и собирался делать сам)только все же на Attiny2313
[quote="Evgen88"]Кароче делать нада так:
1. забуть про 2313 - делай на меге (например Мега48 стоит почти также, но какая разница!)
2. запускаеш 16 битный таймер
3. делаеш захват значения таймера (нога ICR) датчиком хола
4. количество столбцов должно быть 256 (это шоб облегчить жизнь твоему контроллеру )
5. береш старший байт захваченного значения 16 битного тайммера и это значение заносиш в регистр сравнения 8 битного таймера - по переполнению которого будет выводится новая строчка
6. в момент захвата 16 битного таймера обнуляеш оба таймера и записываеш новое значение сравнения в 8 битный таймер.
/quote]
Подозрения на то что при обнулении таимера0 обнуляется и таимер1
т.к. с Tcnt1h всегда читаеться 0.....
В чем может быть дело ???
Блин, немного не в тему, зачем делать в протеусе? неужели нельзя сделать в железе и на нем проверять?
1)удобнее в тысячу раз.
2)нет никакой уверенности,что протеус правду показывает, учитывая все его глюки.
по поводу кода:
Код:
ldi Temp1,0b11111111 out ddrb, Temp1 ; настройка порта b
ldi Temp1,0b10111111 out ddrb, Temp1 ; настройка порта b
зачем два раза? еще и по-разному....
Код:
.def Temp4=R19 .def Temp5=R19
- это тоже настрожило
Код:
ldi Temp1,0b00000011 out [b]Tccr0[/b],Temp1 ;тактовый сигнал /64
в Tiny2313 для этих целей используется регистр TCCR0B
Код:
;******Прерывание по совподению ч.с. и таимер0***** TIMER0_COMPA: ldi temp1,0 OUT Tcnt0,temp1 ;обнуляем таимер0 inc temp4 reti ;выход из обработчика
здесь обязательно сохраняйте SREG а потом восстанавливайте.
теперь программные недочеты: не совсем понял, как вы боретесь с дребезгом, если за счет temp2, то вы явно перестарались... ну сработает у вас кнопка один раз и все... не будет больше temp2 = 0.... таким образом весь ваш код сводит на НЕТ вызов обработчика срабарывания кнопки... думаю поэтому и не работает...
насчет алгоритма который вам подсказал Evgen88. он говорил о прерывании захвата, а не о банальном считывании из счетного регистра. может быть это не принципиально, но зачем огород городить, если можно сделать по прерыванию( если надумаете так сделать, опять таки не забудьте про SREG)
насчет кнопки не буду спорить, не проверял, работает и слава богу....
SREG сохранять:
SREG-речистр флагов лог/мат операции микроконтроллера
если у тебя происходит прерывание перед проверкой условия
типа: breq или brne... ну и подобные, которые используют флаги регистра SREG для принятия "решения"
и в этом прерывании опять происходит какая то операция, которая меняет регистр SREG, то после возврата в точку, откуда прерывались, это условие может сработать неверно, поэтому предлагают :
Код:
;---обработчик прерывания--- in tmp,sreg push tmp ---------- -------какой то код------- ---------- pop tmp out sreg,tmp reti ;----------
... это условие может сработать неверно, поэтому предлагают :
Зачем же Вы новичку советы неправильные даете?! Ваш код будет портить регистр tmp, в результате, избавившись от одного глюка можно приобрести другой. Делать нужно либо так
Код:
;---обработчик прерывания--- push tmp in tmp,sreg push tmp ---------- -------какой то код------- ---------- pop tmp out sreg,tmp pop tmp reti ;----------
Либо так как показано ниже, но в этом случае необходимо, чтобы tmp использовался только для сохранения SREG и ни для чего другого. Также в этом случае нельзя использовать вложенные прерывания, т. е. разрешать прерывания в обработчике прерывания.
Код:
;---обработчик прерывания--- in tmp,sreg ---------- -------какой то код------- ---------- out sreg,tmp reti ;----------
действительно)) тогда потимально будет просто сохранять в регистр и нигде его больше не использовать.
а насчет прерывания в прерывании не понял идеи... почему же нельзя? если так же сохранить SREG???
В принципе Ваш способ тоже имеет право на жизнь, при одном условии - если tmp будет отведен только под сохранение SREG.
Про прерывания в прерывании относилось только к тому случаю когда для сохранения SREG используется регистр, а не стек. Посмотрите сами, вот у нас возникло прерывание, мы сохранили SREG и разрешили прерывания внутри обработчика, если внутри этого обработчика возникнет другое прерывание, то оно вызовет свой обработчик, в котором наверняка тоже нужно сохранять SREG, а у нас для этого используется регистр, и в нем уже есть какое-то значение SREG, значит это значение затрется, на его место встанет другое, и при извлечении может получиться косяк.
если tmp будет отведен только под сохранение SREG.
тогда нет смысла операции push:)
smac писал(а):
значит это значение затрется...
если использовать один и тот же регистр, то естественно затрется, я думаю это и новички понимают.
для тех кто не понял:
если для сохранения регистра SREG используется регистр r0-r31 и разрешается прерывание в прерывании, то для каждой операции сохранения нужно использовать отдельный регистр.
сохранил Tcnt1h и Tcnt1l в отдельно отведенные регистры до прерывания и востанавливал в прерывании.
Также запретил прерывание при индикации и обработке кнопки.
Теперь проблема с железом при одном нажатии кнопка срабатывает 2а (или больше) раза из-за этого в железе не работает(постоянно обнуляет число сравнения), а в протеусе без проблем с частатой внешнего сигнала от 1 до 20Гц(это те граници в каторых проверял).
Буду думать как изменить обработчик кнопок чтоб не глючил... Может задержку после чтения поставить ??
С опто парой работает нормально буду писать рисунок какой нибудь и светодиодов добавлю будет 14(пока8)
Решил остановиться пока на 1 полоске (при 3Гц уже нормально видно)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения