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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Vovaskin
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт июн 09, 2009 09:25:23
Откуда: Крым
Контактная информация:

Сообщение Vovaskin »

http://electronix.ru/forum/lofiversion/ ... 775-0.html раньше тема на 90 с лишнем страниц была растянута, странно что сейчас только 6 открывается
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

1995kenny как скорость выбираеться(или это пределы скорости)

1995kenny писал(а):Скорость расчитана и выбирается 3 джамперами из списка(35;30;25;15;10км/ч; 60мс-тест). Проверял пока только дома в перевернутом положении :)

Моя штукенция работает от 0.24Гц до 21Гц вращения колеса.
И не нашел у тебя датчика положения колеса.
Да и рисунок неудобно вбивать.
Вот сразу выдает готовую матрицу на рисунок в асме(точнее их там две по 128 256точек за оборот)
Вложения
matrix1.xls
(171 КБ) 545 скачиваний
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

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

Сообщение SeamaNCOS »

Посмотри мой исходник. Намного лучше когда рисунок не зависит от скорости.
Все давольно просто индикация по прерываниям таимера0. В число сравнения загоняется старший бит таимера1. С тиньки2313 для меги8 на асме переписать делать нечего. Только переделать твою индикацию с регистрами.
Чем больше думаеш, тем дольше уснуть не можеш...
Vovaskin
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт июн 09, 2009 09:25:23
Откуда: Крым
Контактная информация:

Сообщение Vovaskin »

http://www.webpark.ru/comments.php?id=50811 А вот это, ребята, конечный вариант.
Vovaskin
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт июн 09, 2009 09:25:23
Откуда: Крым
Контактная информация:

Сообщение Vovaskin »

It features 32 full color LEDs На каждую строку окружности свой RGB светодиод. Причем, заметьте, можно ставить и 2 и 4 блока на колесо. http://www.monkeylectric.com/
Vovaskin
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вт июн 09, 2009 09:25:23
Откуда: Крым
Контактная информация:

Сообщение Vovaskin »

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

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

Тоесть таймер должен запускаться по прерыванию, вызванному герконом? Подойдет ли INT1 ?
Что нужно выставить для правильной ео работы кроме частоты таймера-1(например500кгц)? В каком виде таймер выводит данные в регистр?

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

Сообщение SeamaNCOS »

Геркон у меня работает не по прерыванию (типа обработчик кнопок)
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 сделать будет тоже самое даже лучше)
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

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

Сообщение SeamaNCOS »

кадры меняються в прерывании по совподению Tcnt0 и ocr0a.
TIMER0_COMPA
(а я в С ничего не понимаю. асма помоему проще по крайней мере синтаксис)
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

т.е. хранить картинки в массиве и вызывать функцией отдельной. Интересно можно ли применить вашу программу, используя в Си #asm("sei") и #asm("cli")?
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

Если пишеш в С так и писать все в нем(вставки с асма думаю бессмысленно)
// 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; (делители)
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

SeamaNCOS писал(а):// Clock value: Timer 1 Stopped (старт :) )

Всмысле? таймеры будут остановлены? и таймер0 тоже остановить?
и настроить TCCR1B=0x00; и TCCR2=0x00; (делители)
настроить, чтоб делило на мои 64 строки? А потом:

Код: Выделить всё

if(OCR2==TCNT2){всмена строки};
?
Вложения
AutoPov.c
Программа, неуверен в работоспособности
(3.97 КБ) 459 скачиваний
Аватара пользователя
RUNA
Прорезались зубы
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

По поводу питания схемы. Очень хорошо использовать систему как на беспроводных и без батареек мышах. У них на коврике первичная обмотка а в мыше вторичная.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

// 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 про две обмотки уже говарилось(хотя при изменяющихся угловых скоростях обмоток даже не знаю какой разброс напряжений получиться тоже проблема)
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

Если у меня RC Osc на 4 MHz, как посчитать TCCR? Могу еще настроить RC Osc на 8 MHz.
Границы скорости:от 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

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

Сообщение SeamaNCOS »

При 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
Чем больше думаеш, тем дольше уснуть не можеш...
Аватара пользователя
1995kenny
Вымогатель припоя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков
Контактная информация:

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

Только не TSNT, a TCNT.
В Протеусе, кстати что-то не работает-только тест регистров проходит, а по прерываниям-ничего :(
Вложения
autopov.c
Программа на СИ
(6.08 КБ) 453 скачивания
4Proteus .zip
Всё для проекта в протеусе
(23.89 КБ) 292 скачивания
Аватара пользователя
SeamaNCOS
Встал на лапы
Сообщения: 107
Зарегистрирован: Ср дек 10, 2008 15:10:59
Откуда: KPACHO9PCK
Контактная информация:

Сообщение SeamaNCOS »

Чтоб заработали прерывания от INT1 надо

gicr=0b10000000
MCUCR=0b00001100
Чем больше думаеш, тем дольше уснуть не можеш...
Закрыто

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