Рисунок на колесе
http://electronix.ru/forum/lofiversion/ ... 775-0.html раньше тема на 90 с лишнем страниц была растянута, странно что сейчас только 6 открывается
- Реклама
1995kenny как скорость выбираеться(или это пределы скорости)
И не нашел у тебя датчика положения колеса.
Да и рисунок неудобно вбивать.
Вот сразу выдает готовую матрицу на рисунок в асме(точнее их там две по 128 256точек за оборот)
Моя штукенция работает от 0.24Гц до 21Гц вращения колеса.1995kenny писал(а): Скорость расчитана и выбирается 3 джамперами из списка(35;30;25;15;10км/ч; 60мс-тест). Проверял пока только дома в перевернутом положении
И не нашел у тебя датчика положения колеса.
Да и рисунок неудобно вбивать.
Вот сразу выдает готовую матрицу на рисунок в асме(точнее их там две по 128 256точек за оборот)
- Вложения
-
- matrix1.xls
- (171 КБ) 549 скачиваний
Чем больше думаеш, тем дольше уснуть не можеш...
Выбираются жестко расчитаные частоты "строчной развертки" под скорось вращения, кстати в предидущей прошивке они неправильно расчианы. Давно сам хотел сделать в excel, но лень было сделать. Уже почти дорисовал в нем Biohazard. 
Посмотри мой исходник. Намного лучше когда рисунок не зависит от скорости.
Все давольно просто индикация по прерываниям таимера0. В число сравнения загоняется старший бит таимера1. С тиньки2313 для меги8 на асме переписать делать нечего. Только переделать твою индикацию с регистрами.
Все давольно просто индикация по прерываниям таимера0. В число сравнения загоняется старший бит таимера1. С тиньки2313 для меги8 на асме переписать делать нечего. Только переделать твою индикацию с регистрами.
Чем больше думаеш, тем дольше уснуть не можеш...
http://www.webpark.ru/comments.php?id=50811 А вот это, ребята, конечный вариант.
- Реклама
It features 32 full color LEDs На каждую строку окружности свой RGB светодиод. Причем, заметьте, можно ставить и 2 и 4 блока на колесо. http://www.monkeylectric.com/
купите и не парьтесь, 70 уе для одного модуля, это смешная цена для такого девайса
Тоесть таймер должен запускаться по прерыванию, вызванному герконом? Подойдет ли INT1 ?
Что нужно выставить для правильной ео работы кроме частоты таймера-1(например500кгц)? В каком виде таймер выводит данные в регистр?
Или проще может где-то есть исходник на си, чтоб я понял принцип?
Что нужно выставить для правильной ео работы кроме частоты таймера-1(например500кгц)? В каком виде таймер выводит данные в регистр?
Или проще может где-то есть исходник на си, чтоб я понял принцип?
Геркон у меня работает не по прерыванию (типа обработчик кнопок)
Cycle:
rcall prov
rcall Display
rcall Press
rjmp Cycle
Press:
CLI
in Temp1,PIND ; чтение порта d
ori Temp1,0b10111111 ;обрезаем по маске
cpi Temp1,0b10111111
breq Press2 ;переход если нажата кнопка(поступил сигнал)
ldi Temp2,0
sei; разрешение глобальных прерываний
ret
Press2:
cpi Temp2,1
breq out1 ;вывод из обработчика при повторном срабатывании кнопки
Изменение индикации по прерыванию таимера0
Tcnt0 совпадения ocr0a
в обработчике кнопок:
in temp1,Tcnt1h ;чтение старшего регистра таимра1
out ocr0a,temp1
в ocr0a записываеться Tcnt1h т.е. время предидущего оборота колеса делим на 256 и вставляем в число сравнения таимера0 ocr0a.
И обнуляем оба таимера.
Это на тиньке а на меге надо переделать под свои таимеры(прерывания от геркона можно и через int1 или int0 сделать будет тоже самое даже лучше)
Cycle:
rcall prov
rcall Display
rcall Press
rjmp Cycle
Press:
CLI
in Temp1,PIND ; чтение порта d
ori Temp1,0b10111111 ;обрезаем по маске
cpi Temp1,0b10111111
breq Press2 ;переход если нажата кнопка(поступил сигнал)
ldi Temp2,0
sei; разрешение глобальных прерываний
ret
Press2:
cpi Temp2,1
breq out1 ;вывод из обработчика при повторном срабатывании кнопки
Изменение индикации по прерыванию таимера0
Tcnt0 совпадения ocr0a
в обработчике кнопок:
in temp1,Tcnt1h ;чтение старшего регистра таимра1
out ocr0a,temp1
в ocr0a записываеться Tcnt1h т.е. время предидущего оборота колеса делим на 256 и вставляем в число сравнения таимера0 ocr0a.
И обнуляем оба таимера.
Это на тиньке а на меге надо переделать под свои таимеры(прерывания от геркона можно и через int1 или int0 сделать будет тоже самое даже лучше)
Чем больше думаеш, тем дольше уснуть не можеш...
А как теперь заставить меняться кадры через определенные промежутки времени, определенные вашей функцией?
Кстати я в ассемнблере ничего не понимаю.
Кстати я в ассемнблере ничего не понимаю.
кадры меняються в прерывании по совподению Tcnt0 и ocr0a.
TIMER0_COMPA
(а я в С ничего не понимаю. асма помоему проще по крайней мере синтаксис)
TIMER0_COMPA
(а я в С ничего не понимаю. асма помоему проще по крайней мере синтаксис)
Чем больше думаеш, тем дольше уснуть не можеш...
т.е. хранить картинки в массиве и вызывать функцией отдельной. Интересно можно ли применить вашу программу, используя в Си #asm("sei") и #asm("cli")?
Если пишеш в С так и писать все в нем(вставки с асма думаю бессмысленно)
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped (старт
)
строки нужно записывать (менять) в прерывании // Timer/Counter 2 по совподению OCR2 и TCNT2
// Clock value: Timer 2 Stopped (старт
)
в
// External Interrupt(s) initialization
// INT0: Off
// INT1: on
MCUCR=0xХХ; -- разрешить прерывания(непомню какие)
в // External Interrupt(s) initialization (при сробатывании прерывания INT1) нужно записать в OCR2=TCNT1H
естественно нужно настроить
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
запретить прерывания по // Timer/Counter 1 и разрешить // Timer/Counter 2
и настроить TCCR1B=0x00; и TCCR2=0x00; (делители)
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped (старт
строки нужно записывать (менять) в прерывании // Timer/Counter 2 по совподению OCR2 и TCNT2
// Clock value: Timer 2 Stopped (старт
в
// External Interrupt(s) initialization
// INT0: Off
// INT1: on
MCUCR=0xХХ; -- разрешить прерывания(непомню какие)
в // External Interrupt(s) initialization (при сробатывании прерывания INT1) нужно записать в OCR2=TCNT1H
естественно нужно настроить
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
запретить прерывания по // Timer/Counter 1 и разрешить // Timer/Counter 2
и настроить TCCR1B=0x00; и TCCR2=0x00; (делители)
Чем больше думаеш, тем дольше уснуть не можеш...
Всмысле? таймеры будут остановлены? и таймер0 тоже остановить?SeamaNCOS писал(а): // Clock value: Timer 1 Stopped (старт)
настроить, чтоб делило на мои 64 строки? А потом:и настроить TCCR1B=0x00; и TCCR2=0x00; (делители)
Код: Выделить всё
if(OCR2==TCNT2){всмена строки};- Вложения
-
- AutoPov.c
- Программа, неуверен в работоспособности
- (3.97 КБ) 461 скачивание
По поводу питания схемы. Очень хорошо использовать систему как на беспроводных и без батареек мышах. У них на коврике первичная обмотка а в мыше вторичная.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
// Clock value: Timer 1 Stopped (старт
) в смысле запустить(не знаю как на С правильно пишеться) тоже и для Timer 2
TCCR1B=0x00; и TCCR2=0x00; (делители) его нужно будет расчитать в зависимости от частоты кварца чтоб определить границы работы оп скоростям (у меня при 10МГц OCR2=0xFF - 0.24Гц(0.24об/сек) OCR2=0x00 21Гц (21об/сек) при TCCR1B=0x03; и TCCR2=0x03 (0x03 деление частоты на 64))
а строк будет 256 это самое простое по коду и качесто картинки норм.
OCR2=TCNT2 это прерывание оно програмируеться битом TIMSK=0b10000000
хотя на С может и так надо писать if(OCR2==TCNT2){смена строки} (С вааЩе не знаю.... но начинаю учить
)
RUNA про две обмотки уже говарилось(хотя при изменяющихся угловых скоростях обмоток даже не знаю какой разброс напряжений получиться тоже проблема)
TCCR1B=0x00; и TCCR2=0x00; (делители) его нужно будет расчитать в зависимости от частоты кварца чтоб определить границы работы оп скоростям (у меня при 10МГц OCR2=0xFF - 0.24Гц(0.24об/сек) OCR2=0x00 21Гц (21об/сек) при TCCR1B=0x03; и TCCR2=0x03 (0x03 деление частоты на 64))
а строк будет 256 это самое простое по коду и качесто картинки норм.
OCR2=TCNT2 это прерывание оно програмируеться битом TIMSK=0b10000000
хотя на С может и так надо писать if(OCR2==TCNT2){смена строки} (С вааЩе не знаю.... но начинаю учить
RUNA про две обмотки уже говарилось(хотя при изменяющихся угловых скоростях обмоток даже не знаю какой разброс напряжений получиться тоже проблема)
Чем больше думаеш, тем дольше уснуть не можеш...
Если у меня RC Osc на 4 MHz, как посчитать TCCR? Могу еще настроить RC Osc на 8 MHz.
Границы скорости:от 1 до 24 об/сек.
Что записать в обработчик внешнего прерывания[EXT_INT1] ?
И по какому прерыванию у меня будет смена строки? :
На какой частоте запускать таймеры?Или не важно?
Границы скорости:от 1 до 24 об/сек.
Что записать в обработчик внешнего прерывания[EXT_INT1] ?
И по какому прерыванию у меня будет смена строки? :
Код: Выделить всё
TIMER2 COMP //Timer/Counter2 Compare Match
TIMER2 OVF //Timer/Counter2 Overflow
TIMER1 CAPT //Timer/Counter1 Capture Event
TIMER1 COMPA //Timer/Counter1 Compare Match A
TIMER1 COMPB //Timer/Counter1 Compare Match BПри 4МГц и пределах 0,95Гц - 24Гц(даже больше чем 24) TCCR1B=0x02; и TCCR2=0x02 (считать неохото мозги после ночи не варят просто подобрал в протеусе в своем проекте)
В INT1 надо
1. записать в OCR2 значение TCNT1H
2. обнулить TSNT1H, TSNT1L и TSNT2
ОЧЕНЬ ВАЖНО ЧТОБ INT1 СРОБАТЫВАЛ ТОЛЬКО 1 РАЗ ЗА ОБОРОТ!!!
иначе будут глюки с картинкой.
Сторки будкт меняться в
TIMER2 COMP //Timer/Counter2 Compare Match
В INT1 надо
1. записать в OCR2 значение TCNT1H
2. обнулить TSNT1H, TSNT1L и TSNT2
ОЧЕНЬ ВАЖНО ЧТОБ INT1 СРОБАТЫВАЛ ТОЛЬКО 1 РАЗ ЗА ОБОРОТ!!!
иначе будут глюки с картинкой.
Сторки будкт меняться в
TIMER2 COMP //Timer/Counter2 Compare Match
Чем больше думаеш, тем дольше уснуть не можеш...
Только не TSNT, a TCNT.
В Протеусе, кстати что-то не работает-только тест регистров проходит, а по прерываниям-ничего
В Протеусе, кстати что-то не работает-только тест регистров проходит, а по прерываниям-ничего
- Вложения
-
- autopov.c
- Программа на СИ
- (6.08 КБ) 455 скачиваний
-
- 4Proteus .zip
- Всё для проекта в протеусе
- (23.89 КБ) 295 скачиваний
Чтоб заработали прерывания от INT1 надо
gicr=0b10000000
MCUCR=0b00001100
gicr=0b10000000
MCUCR=0b00001100
Чем больше думаеш, тем дольше уснуть не можеш...


