Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
Обращаюсь к почтенным гуру программирования. На горизонте показался дембель (будут выгонять на пенсию). На работе остается множество моих рационализаторских девайсов. Хочу оставить, на память о себе, некоторые приколы. Например, мигание индикации, с псевдослучайными интервалами от нескольких часов до нескольких суток. Сам эффект реализовать нетрудно, вопрос упирается в таймер этих интервалов. Делать на счетчиках, да еще со случайными интервалами... Сами понимаете, насколько громоздкой будет схема. А таймер на микроконтроллере - милое дело, только вот не дружу я с программированием. Лежат у меня PIC12F629, PIC10F200. Может, кто-нибудь возьмётся написать программку? Буду премного благодарен. Если найдётся добрая душа - опишу свою задумку подробно.
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
О! Не ожидал, что так быстро, спасибо! Смогу пробовать только с понедельника... Раз пришла помощь, то я немного уточню, чего мне хочется. -Во-первых, интервалы надо бы увеличить раза в 3, но первый интервал можно оставить 1,43 ч -общий алгоритм такой: интервал, 5минут "мигания", интервал и т.д. -во время интервала на двух выходах должна быть лог. 1 -во время "мигания" - 2 противофазных меандра на выходах, частотой 2Гц, продолжительность 5 минут -управление одной кнопкой: нажатие во время интервала - тест мигалки, нажатие во время мигания - стоп мигалки.
я выдернул кусок из генератора шума, убрал пару строк, закинул в цикл и кручу 63 раза, а потом кидаю два старших байта(всего крутится 4 байта) в переменную time, которая определяет количество интервалов (тут примерно по 10 сек интервал простой программной задержкой). если time < 360, то задаем ей значение 360, чтобы не было интервала менее часа.
вот так все коряво, но вроде работает как бы случайно
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
Урвал полчасика и прошил ПИК. Подключил питание и определил, что ножки 6 и 7 -это выходы, 4 - вход. Впаял на вход подтягивающий резистор, поскольку без него схемка реагирует на наводки. Ждать 1й интервал сегодня не буду, валюсь с ног. При замкнутом с землёй входе, на выходах идёт меандр 12 Гц (много!), а при размыкании входа, на выходах сразу устанавливается лог. 1. Всё, иду спать.
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
Вчера спаял таймер на маленькой платке, подключил к одному из выходов (через транзисторный ключ) вибромоторчик. Получился девайс для тестирования, который можно носить в кармане. Включил сегодня в 5:50 утра... Пока еще не было ни одного срабатывания. Жду. vladlen, а можно ли скорректировать частоту на выходах? Почему-то, вместо 2 Гц на выходы идёт 12 Гц
Это сообщение отредактировал Barbos - Oct 22 2014, 08:39 AM
Присоединённое изображение (Нажмите для увеличения)
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
Ну да, кроме кнопки "тест", не помешала бы кнопка "отладка". А вот городить много случайных интервалов, для моей цели, нет надобности. 5-7 разных интервалов, от 70 до 500 часов, создадут иллюзию случайности.
Группа: Автор
Сообщений: 3767
Пользователь №: 39917
Регистрация: 30-November 08
Место жительства: Архангельская область
QUOTE (Barbos @ Oct 22 2014, 05:52 PM)
Ну да, кроме кнопки "тест", не помешала бы кнопка "отладка". А вот городить много случайных интервалов, для моей цели, нет надобности. 5-7 разных интервалов, от 70 до 500 часов, создадут иллюзию случайности.
Я бы сделал массив из 20-ти чисел, например от 10 до 500, в режиме отладки это будут секунды, в боевом режиме это будут часы. и всё, псевдослучайная выборка будет делаться при помощи нестабильности встроенного генератора + на основании длительности прошлого сгенерированного интервала
Если под AVR кому то будет актуально, пишите, напишу прошивку.
Это сообщение отредактировал Zlodey - Oct 22 2014, 09:43 PM
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
Прошло 5 суток после включения... То ли прозевал сработку, то ли интервал не равен 5 суткам. В течение этих суток, решил не ждать и встроил еще один таймер в "боевой" девайс. Жду реакцию операторов. Однозначно, нужен режим отладки. На AVR я готов попробовать, купить нужный МК не проблема.
Прошло 5 суток после включения... То ли прозевал сработку, то ли интервал не равен 5 суткам.
Превый интервал 0xC330 = 49968, ( 49968 * 10 ) : 3600 = 138.8 часов = 5 суток 18 часов 48 минут.
Если включили 22 числа в 5:50 утра(Гитлер предпочел бы 4:00))) , то сработку нужно ждать приблизительно (из-за нестабильности) между 22:00 часами 27 числа и 02:00ч. 28го .
Пять суток в ожидании и это еще не самый большой интервал
Группа: Автор
Сообщений: 7594
Пользователь №: 38411
Регистрация: 26-October 08
Место жительства: Киев
СРАБОТАЛА!!! Жена разбудила в пол-третьего ночи: "Что это жужжит?" Первый интервал получился 5сут. 20час. 35мин. (если я не пропустил более ранних сработок). Да, с режимом отладки будет значительно легче, особенно, если знать коэффициент ускорения. Тогда можно, с секундомером, вычислить все интервалы. Но всё равно, спасибо vladlen ! На тиньке тоже попробую, интересно.
Группа: Автор
Сообщений: 3767
Пользователь №: 39917
Регистрация: 30-November 08
Место жительства: Архангельская область
Таймер для тини2313 написал, файлы на работе остались. Завтра постараюсь выложить. Недостаток- первый интервал при включении всегда известен. Следующие интервалы- псевдослучайные, взятые из массива на 20 значений (которые забиваются пользователем).
Это сообщение отредактировал Zlodey - Oct 29 2014, 10:33 PM
...Недостаток- первый интервал при включении всегда известен. ...
Избавился от этого без дополнительных внешних цепей. Используется один SFR, таймер WDT, воздействие предыдущего вычисления, табличная замена. WDT работает независимо и довольно нестабильно (флуктуации напряжения и температуры) так что каждый раз будет некоторое изменение входного значения для таблицы замены. Табличная замена позволяет улучшить результат случайности, т.к. изменение входного значения на единицу вызовет нелинейное(по-моему так это назывеется) изменение выходного значения. В результате узнать заранее интервалы становится очень проблематично, а может даже и не возможно.
Группа: Автор
Сообщений: 3767
Пользователь №: 39917
Регистрация: 30-November 08
Место жительства: Архангельская область
Избавиться от этого можно и без WDT, использовав обычный таймер. Но не вижу смысла. После истечения 1-го интервала, остальные интервалы будут непредсказуемы. Если интервалы сделать длинными, то отловить (предсказать) глюк будет очень не просто. Мой вариант позволяет задавать интервалы от 1 часа до 255 часов (10 суток), а в режиме отладки - от 1 до 255 секунд. Правда в режиме отладки "случайность" будет похуже
Это сообщение отредактировал Zlodey - Oct 30 2014, 10:09 AM