синхронизация волчка
У меня в офисе где-то в загашниках валяется "Propeler Clock" с синхрой от акселерометра. ТАк оно грутится на вентиляторе и ничего - работает, работало... Пока не попало на полку 
- Реклама
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
ну исходник элементарный. допустим у нас 2 датчика, тогда на 1 оборот волчка получаем 2 импульса или каждый импульс на угол Пи. меряем период между импульсами,умножаем на два, получаем время одного оборота. делим это время на желаемое число пикселей на оборот и получаем время горения одного столбца. такие проекты описаны в "Вопросы по механической развертке"
Поэтому тут тип датчика не важен, лишь бы на выходе был четкий импульс.
Поэтому тут тип датчика не важен, лишь бы на выходе был четкий импульс.
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
- Реклама
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
это основной алгоритм по формированию рисунка .
или такой же как говорил WildCat , или что-то подобное (я не профессионал пока в этом ) .
включается счётчик , потом приходит прерывание от датчика на 32 ногу (нарастающий сигнал ) , в переменную заносится время счётчика , потом идёт проверка новый ли это круг (
правильно ли я понял ?
) , если новый , то идёт поправка на скорость вращения . прерывания от таймера 0 идёт каждую миллисекунду и он считает кол-во проходов своих , т.е. банально счётчик мс без переполнения . максимально 255 .
далее прерывание по счётчику 1 , потом с ним что-то интересное делается , потом выполняется проверка не сбилась ли синхронизация и если сбилась , то выводить предыдущую колонку (вывод идёт колонками , колонки как я понимаю имеют вид массива ).
ждём более подробных коментариев от спецов
PS : манипуляции с таймером 1 мне почти не понятно . что там да как . и ещё - что такое #ifdef и #endif ?
PSS : vistador , а картинки реального размера или есть по-больше ? если есть , то дайте пожалуйста ссылки .
или такой же как говорил WildCat , или что-то подобное (я не профессионал пока в этом ) .
включается счётчик , потом приходит прерывание от датчика на 32 ногу (нарастающий сигнал ) , в переменную заносится время счётчика , потом идёт проверка новый ли это круг (
далее прерывание по счётчику 1 , потом с ним что-то интересное делается , потом выполняется проверка не сбилась ли синхронизация и если сбилась , то выводить предыдущую колонку (вывод идёт колонками , колонки как я понимаю имеют вид массива ).
ждём более подробных коментариев от спецов
PS : манипуляции с таймером 1 мне почти не понятно . что там да как . и ещё - что такое #ifdef и #endif ?
PSS : vistador , а картинки реального размера или есть по-больше ? если есть , то дайте пожалуйста ссылки .
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
Кто б спаял волчек - я б прошивку сделал
у самого руки дойдут еще неизвестно когда... эх...
Исходник проги содержит главные моменты синхронизации - формирование рисунка там практически отсутствует, наверное, в основном цикле выводится из какого-то массива столбцов в порты... А в остальном все верно догадались: зафиксировали синхро-импульс, рассчитали скорость вывода столбиков, и т.д. Т.е. обязательно ведется подстройка - волчек-то замедляет свое вращение с каждым оборотом... По идее предусмотрен вариант, когда несколько синхроимпульсов успевает прийти за один оборот - кажется, это и задается директивами, но после беглого взгляда точнее не скажу - всего лишь предположения.
Исходник проги содержит главные моменты синхронизации - формирование рисунка там практически отсутствует, наверное, в основном цикле выводится из какого-то массива столбцов в порты... А в остальном все верно догадались: зафиксировали синхро-импульс, рассчитали скорость вывода столбиков, и т.д. Т.е. обязательно ведется подстройка - волчек-то замедляет свое вращение с каждым оборотом... По идее предусмотрен вариант, когда несколько синхроимпульсов успевает прийти за один оборот - кажется, это и задается директивами, но после беглого взгляда точнее не скажу - всего лишь предположения.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
как я понял формирование рисунка там уже заложено . остаётся только доставать числа из массива и отправлять их в порт . счётчик массива в программе уже есть .
попытался просимулировать в протеусе(МК + источник такта + сдвиговый регистр + светодиодная матрица) и вот что выскакивает :

как избавиться ?
разобрался более-менее с директивами , но их применение (как вообще , так и в данной программе) вызывает недоумение . после #ifdef идёт странный кусок кода ... его практическое применение я могу предполагать только в счётчике кол-ва раскруток волчка и с каждой следующей раскруткой будет меняться рисунок . иначе при неопределённом выражении ROTATION_COUNTER этот блок пропускается .
ещё дополениня : game_status - это состояние второго переключателя , game_ongoing - дословно "продолжающаяся игра" - тут вариантов нету что это . но понятно что идёт сравнение состояния выключателя с чем-то и в случае совпадения идёт прибавка счётчика рисунка . game_ongoing скорей всего используется в какой-то части программы для определения остановился ли волчёк . скорей всего это будет происходить по достижении счётчика кол-во проходов таймера0 значения 255 (т.е. 255 мс нету импульсов от датчика вращения).
ну и ещё мысль : идея с получением импульсов от сети 50Гц совсем не вяжется с программой - предусмотрен счётчик до 255мс , что противоречит 50Гц - импульс 20мс , т.е. счётчик никогда не достигнет значения более 20 .
ну и ещё одна мысля : второй датчик служит только противовесом , т.к. умножения в программе не встречается , да и подключать его вроде как некуда.
и ещё :
говорит о том , что перерасчёт времени свечения будет происходить при кол-ве выведенного изображения в 80% от заданного . лично мне не нравится такая реализация , т.к. надо будет рассчитывать общее кол-во колонок и заранее вносить пустые колонки , а с другой стороны будет убираться наложение колонок друг на друга ... я в раздумьях ...
да , кто-нибудь , отвтетьте в теме по всему вышесказанному , а то уже надоело нажимать кнопку "правка"
попытался просимулировать в протеусе(МК + источник такта + сдвиговый регистр + светодиодная матрица) и вот что выскакивает :

как избавиться ?
разобрался более-менее с директивами , но их применение (как вообще , так и в данной программе) вызывает недоумение . после #ifdef идёт странный кусок кода ... его практическое применение я могу предполагать только в счётчике кол-ва раскруток волчка и с каждой следующей раскруткой будет меняться рисунок . иначе при неопределённом выражении ROTATION_COUNTER этот блок пропускается .
ещё дополениня : game_status - это состояние второго переключателя , game_ongoing - дословно "продолжающаяся игра" - тут вариантов нету что это . но понятно что идёт сравнение состояния выключателя с чем-то и в случае совпадения идёт прибавка счётчика рисунка . game_ongoing скорей всего используется в какой-то части программы для определения остановился ли волчёк . скорей всего это будет происходить по достижении счётчика кол-во проходов таймера0 значения 255 (т.е. 255 мс нету импульсов от датчика вращения).
ну и ещё мысль : идея с получением импульсов от сети 50Гц совсем не вяжется с программой - предусмотрен счётчик до 255мс , что противоречит 50Гц - импульс 20мс , т.е. счётчик никогда не достигнет значения более 20 .
ну и ещё одна мысля : второй датчик служит только противовесом , т.к. умножения в программе не встречается , да и подключать его вроде как некуда.
и ещё :
Код: Выделить всё
if (current_column > (COLUMN_NUMBER*8)/10) // если текущая выводимая колонка больше кол-ва колонок умноженного на 0.8
{
timer1_startvalue = 1000/COLUMN_NUMBER*current_round_time; // то рассчитать по новой таймер1
current_column = 0; // и сбросить текущую колонку да , кто-нибудь , отвтетьте в теме по всему вышесказанному , а то уже надоело нажимать кнопку "правка"
- Вложения
-
- Снимок4.JPG
- (14.91 КБ) 438 скачиваний
Последний раз редактировалось LINKS_234 Чт янв 15, 2009 00:07:52, всего редактировалось 1 раз.
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
балин , хрень какая-то - совмещаются оба прерывания под тегами [ code ]
так что так помещу : ...
вротмненоги ... и так совмещается ...
значит рисунок


наконецтаки я дошёл до того , что разобрался с механической развёрткой
по поводу программы - есть одна нелогичная строчка . зачем она - понять не могу (в коде есть комент соотв. ) ! данный исходник рекомендую к ознакомлению новичкам , т.к. прокоментил каждый кусок кода
PS : весь исходник в код не вмещается , так что привёл только фрагмент где у меня непонятки . всё остальное с коментами в аттаче .
так что так помещу : ...
вротмненоги ... и так совмещается ...
значит рисунок


наконецтаки я дошёл до того , что разобрался с механической развёрткой
по поводу программы - есть одна нелогичная строчка . зачем она - понять не могу (в коде есть комент соотв. ) ! данный исходник рекомендую к ознакомлению новичкам , т.к. прокоментил каждый кусок кода
PS : весь исходник в код не вмещается , так что привёл только фрагмент где у меня непонятки . всё остальное с коментами в аттаче .
- Вложения
-
- vol4ok.c
- (4.49 КБ) 415 скачиваний
Последний раз редактировалось LINKS_234 Чт янв 15, 2009 01:39:26, всего редактировалось 1 раз.
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
на сишке проще
к тому же у меня каждая строка расписана что да куда . там только разобраться с одной строкой . когда есть условие и если условие не выполняется , то надо текущую колонку уменьшать . или это сделано из-за того что прерывание по таймеру1 может раньше придти таймера0 или я хз . прерывание от таймера0 идут каждую мс . т.е. получается время горения должно быть меньше 1мс и рассчитывается по формуле - 1000/(кол-во колонок)*(частота вращения - от 1 до 255 )
хотя я тут посчитал ... допустим волчёк делает 1 оборот за 1мс
, для нормального текста требуется около 50 колонок . тогда время на отображение 1 колонки составит 20 единиц . т.к. таймер1 работает на 1МГц , то это составит 1/10^6 * 20 = 20мкс . 20мкс *50 = 1000мкс = 1мс . прерывания от таймера0 идут с той же частотой ... т.е. блин надо офигенно раскрутить волчок в вакууме чтобы он не только не потерял свою первоначальную скорость , но блин и набрал свыше первоначальной
тогда сработает строчка
if (current_column < COLUMN_NUMBER)
{
current_column++;
}
else
{
current_column--;
к тому же у меня каждая строка расписана что да куда . там только разобраться с одной строкой . когда есть условие и если условие не выполняется , то надо текущую колонку уменьшать . или это сделано из-за того что прерывание по таймеру1 может раньше придти таймера0 или я хз . прерывание от таймера0 идут каждую мс . т.е. получается время горения должно быть меньше 1мс и рассчитывается по формуле - 1000/(кол-во колонок)*(частота вращения - от 1 до 255 )
хотя я тут посчитал ... допустим волчёк делает 1 оборот за 1мс
if (current_column < COLUMN_NUMBER)
{
current_column++;
}
else
{
current_column--;
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
ну вот этот журнал в нете.....
http://www.alltomelektronik.se/tidn2008.html
но нет там еще этого в показе....последний номер 9 и все( я кстати его купил месяца полтора назад)...так что все появляется на электронке у них с опозданием. И вообще все заточено под торговлю запчастями...и лазеек всяким продвинутым оставляют немного.
остается людям только покупать его в бумаге......еще есть на дисках ..но цена европейская
http://www.alltomelektronik.se/tidn2008.html
но нет там еще этого в показе....последний номер 9 и все( я кстати его купил месяца полтора назад)...так что все появляется на электронке у них с опозданием. И вообще все заточено под торговлю запчастями...и лазеек всяким продвинутым оставляют немного.
остается людям только покупать его в бумаге......еще есть на дисках ..но цена европейская
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
а смысл покупать такие журналы , если они появляются в инете ? причём неважно когда , т.к. они всёравно опережают славян по развитию и технологиям , и некоторых комплектующих можно просто не найти . старые журналы так же хорошо читаются как и новые .
судя по всему мы тут остались вдвоём и никто даже исходник глянуть не желает и высказаться по нему ...
судя по всему мы тут остались вдвоём и никто даже исходник глянуть не желает и высказаться по нему ...
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
смысл в том, что этот журнал заточен только под продажу таких конструкторов, там на каждый элемент - свой артикул для заказа по нету (ОПЯТЬ ЖЕ)поэтому выгоднее впаривать такие схемы на каждом шагу всем .Авось кто и заинтересуется.LINKS_234 писал(а):а смысл покупать такие журналы , если они появляются в инете ? причём неважно когда , т.к. они всёравно опережают славян по развитию и технологиям , и некоторых комплектующих можно просто не найти . старые журналы так же хорошо читаются как и новые .
...
что касается отставания...да..отдельные индивидуумы тут могут хорошо развиваться , поскольку можно купить по нету все.Например я в России искал одну микросхему...на меня продавцы смотрели с дикостью - типа не найдете вы ее никогда.
А тут посмотрел на сайте - лежит себе доллара за полтора всего....
Но поголовно население не интересуется ничем таким...и в развитии они не очень далеко ушли вперед. Не много надо ума , чтоб заказать по нету процессор 64выводной прошитый под протоколы диагностики, припаять все это на готовую плату и считать себя оооочень крутым парнем , создавшем типа самому CAN -адаптер для готового же софта на лаптопе.А реально создали все это просто парни, в кого вложили уже реальные деньги.
извините за оффтоп
Что-то мне кажется, что эта тема оченно перекликается с http://radiokot.ru/forum/viewtopic.php?t=12864&start=20 Propeller clock.
Вы уж определитесь, где флудить, а где- обсуждать конструкции.
Вы уж определитесь, где флудить, а где- обсуждать конструкции.
- Сообщения: 2296
- Зарегистрирован: Пн июл 14, 2008 18:12:37
Сэр Мурр , извините за offtopic
но тема эта отличается от пропеллера и хотелось бы её сохранить .
по поводу прошивки - та строка , которая была не понятна теперь прояснилась . допустим время оборота 21мс , столбиков 8 , тогда 1000/8*21 = 5,952380952380952380952380952381
в таймер1 занесётся только целая часть , т.е. 5 . итого имеем по таймеру1 время полного оборота 5*21*8=840 , а прерывания от таймера0 приходят каждую 1мс , тогда 1000-840=160мкс куда-то должно деваться , тогда таймер1 зацикливает последнее число массива , пока не придёт прерывание от таймера0 с пересчётом времени оборота . на 160мкс мы имеем 160/21=7 лишних импульсов .
однако тут же и непонятки : на частоте генератора 100Гц должно остатся 40мкс не востребованных . 40/10=4 имульса последней ноги туда-обратно . в симуляции она делает почти 20 О_0 откуда такая разбежка - хз .
программа вроде как работает . симуляцию в протеусе прилагаю . осталось разобраться с задержкой прерывания таймера1 . больно долго её нету .
но тема эта отличается от пропеллера и хотелось бы её сохранить .
по поводу прошивки - та строка , которая была не понятна теперь прояснилась . допустим время оборота 21мс , столбиков 8 , тогда 1000/8*21 = 5,952380952380952380952380952381
в таймер1 занесётся только целая часть , т.е. 5 . итого имеем по таймеру1 время полного оборота 5*21*8=840 , а прерывания от таймера0 приходят каждую 1мс , тогда 1000-840=160мкс куда-то должно деваться , тогда таймер1 зацикливает последнее число массива , пока не придёт прерывание от таймера0 с пересчётом времени оборота . на 160мкс мы имеем 160/21=7 лишних импульсов .
однако тут же и непонятки : на частоте генератора 100Гц должно остатся 40мкс не востребованных . 40/10=4 имульса последней ноги туда-обратно . в симуляции она делает почти 20 О_0 откуда такая разбежка - хз .
программа вроде как работает . симуляцию в протеусе прилагаю . осталось разобраться с задержкой прерывания таймера1 . больно долго её нету .
- Вложения
-
- волчок на меге8.rar
- симуляция в протеусе и прошивка
- (16.49 КБ) 255 скачиваний
есть вопросы ? чего-то не знаешь ? [url=http://s61.radikal.ru/i174/1006/79/bc6a635c1451.jpg][color=blue][b]прежде всего смотри это[/b][/color][/url]
- Сообщения: 1393
- Зарегистрирован: Ср янв 30, 2008 17:52:55
примите извинения за оффтоп.Сэр Мурр писал(а):Что-то мне кажется, что эта тема оченно перекликается с http://radiokot.ru/forum/viewtopic.php?t=12864&start=20 Propeller clock.
Вы уж определитесь, где флудить, а где- обсуждать конструкции.
и если можно...смею заметить , что тема конечно перекликается с соседней...но только принципом построения изображения...как то - механическая развертка по горизо....сорри по окружности.
моя же тема о необычной синхронизации. так как например в той схеме импульсы берутся тупо и жестко с датчика холла, который собственно и определяет четкое положение изображения .




