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

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

Сообщение Vovaskin »

http://electronix.ru/forum/lofiversion/ ... 775-0.html раньше тема на 90 с лишнем страниц была растянута, странно что сейчас только 6 открывается
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 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 КБ) 549 скачиваний
Чем больше думаеш, тем дольше уснуть не можеш...
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 524
Зарегистрирован: Ср авг 27, 2008 10:13:19
Откуда: Украина, Харьков

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

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

Сообщение SeamaNCOS »

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

Сообщение Vovaskin »

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

Сообщение Vovaskin »

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

Сообщение Vovaskin »

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

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

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

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

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

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

Сообщение SeamaNCOS »

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

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

т.е. хранить картинки в массиве и вызывать функцией отдельной. Интересно можно ли применить вашу программу, используя в Си #asm("sei") и #asm("cli")?
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 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; (делители)
Чем больше думаеш, тем дольше уснуть не можеш...
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 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 КБ) 461 скачивание
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 249
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

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

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

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

Сообщение SeamaNCOS »

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

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

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