Не у всех микроконтроллеров есть аппаратный генератор случайных чисел. Например, у серии STM32F4 есть рандомайзер на базе специального АЦП, выдающего шумы. Поэтому там можно легко получить 32 рандомных бита, которые точно нельзя никак предсказать.
Но у младших и дешёвых серий вроде STM32F070, на котором я хочу сделать рандомайзер, аппаратного генератора нет. Поэтому нужно генерить числа программно, на основе случайных величин вроде измеренных значений температуры кристалла и состояния системного таймера.
Я нашёл интересную формулу, которая очень сильно запутывает значения с каждым новым вызовом. А для инициализации надо задавать рандомные значения Z1, Z2, Z3, Z4. Их можно менять перед каждым вызовом или через какое-то количество вызовов.
Получается очень хороший и быстрый псевдогенератор случайных чисел, но с возможностью добавления энтропии через задание Z1, Z2, Z3, Z4 на основе каких-либо случайных величин.
Идею я взял вот тут. Не знаю, какая тут лицензия, надеюсь, свободная:) Называется этот алгоритм LFSR113.
Но у младших и дешёвых серий вроде STM32F070, на котором я хочу сделать рандомайзер, аппаратного генератора нет. Поэтому нужно генерить числа программно, на основе случайных величин вроде измеренных значений температуры кристалла и состояния системного таймера.
Я нашёл интересную формулу, которая очень сильно запутывает значения с каждым новым вызовом. А для инициализации надо задавать рандомные значения Z1, Z2, Z3, Z4. Их можно менять перед каждым вызовом или через какое-то количество вызовов.
#define SEED 987654321
static uint32_t z1 = SEED, z2 = SEED, z3 = SEED, z4 = SEED;
double lfsr113 (void)
{
uint32_t b;
b = ((z1 << 6) ^ z1) >> 13;
z1 = ((z1 & 4294967294U) << 18) ^ b;
b = ((z2 << 2) ^ z2) >> 27;
z2 = ((z2 & 4294967288U) << 2) ^ b;
b = ((z3 << 13) ^ z3) >> 21;
z3 = ((z3 & 4294967280U) << 7) ^ b;
b = ((z4 << 3) ^ z4) >> 12;
z4 = ((z4 & 4294967168U) << 13) ^ b;
return (z1 ^ z2 ^ z3 ^ z4) * 2.3283064365386963e-10;
}
Получается очень хороший и быстрый псевдогенератор случайных чисел, но с возможностью добавления энтропии через задание Z1, Z2, Z3, Z4 на основе каких-либо случайных величин.
Идею я взял вот тут. Не знаю, какая тут лицензия, надеюсь, свободная:) Называется этот алгоритм LFSR113.
Сделать у микросхемы вывод "НЕ ИСПОЛЬЗОВАТЬ" то же самое, что сделать большую красную кнопку с надписью "НЕ НАЖИМАТЬ".
С одной стороны, понимаешь, что лучше придерживаться рекомендаций, а с другой - приходит мысля "А что будет?"😁
С одной стороны, понимаешь, что лучше придерживаться рекомендаций, а с другой - приходит мысля "А что будет?"😁
Схема рандомной мигалки из видео
Тут всё очень просто. На микросхеме NE556 (цена 15 р, там два независимых таймера 555) собрано два генератора: на R1, R2 и C1 низкочастотный (где-то 3 Гц) и на R3, R4 и C3 высокочастотный (примерно на 5 кГц). Причём у высокочастотного генератора частота плавает от температуры, потому что R3 это чип-термистор (B57330V2103J260, цена 10 р).
Далее обе частоты подаются на входы D-триггера в миниатюрной микросхеме 74AUP1G79 (цена 10 р). По сигналу низкой частоты, подаваемой на вход CLK триггера, происходит запоминание значения на линии высокой частоты. А поскольку эти два генератора независимы и их фазы плавают относительно друг друга, в триггер постоянно заносятся непредсказуемые значения. Из-за этого светодиод мигает по-разному.
Причём изменение характера мигания меняется то медленно, то резко. В идеале это псевдо рандомайзер, но в реальности обе частоты непредсказуемо плавают от температуры, поэтому это уже реально рандомный генератор. Если использовать сразу несколько терморезисторов с разными коэффициентами и расположить их по краям схемы (поближе к внешней среде), то хаотичность будет выше.
Напряжение питания может быть где-то в пределах от 3.9 В до 5 В. То есть, будет работать от аккумулятора, трёх батареек или от стандартных 5 В.
В общем, это интересная игрушка для начинающих электронщиков. Я думаю, что надо развести печатную плату, заказать их штук 30 и сделать из них рандомно мигающую гирлянду на новый год:)
Тут всё очень просто. На микросхеме NE556 (цена 15 р, там два независимых таймера 555) собрано два генератора: на R1, R2 и C1 низкочастотный (где-то 3 Гц) и на R3, R4 и C3 высокочастотный (примерно на 5 кГц). Причём у высокочастотного генератора частота плавает от температуры, потому что R3 это чип-термистор (B57330V2103J260, цена 10 р).
Далее обе частоты подаются на входы D-триггера в миниатюрной микросхеме 74AUP1G79 (цена 10 р). По сигналу низкой частоты, подаваемой на вход CLK триггера, происходит запоминание значения на линии высокой частоты. А поскольку эти два генератора независимы и их фазы плавают относительно друг друга, в триггер постоянно заносятся непредсказуемые значения. Из-за этого светодиод мигает по-разному.
Причём изменение характера мигания меняется то медленно, то резко. В идеале это псевдо рандомайзер, но в реальности обе частоты непредсказуемо плавают от температуры, поэтому это уже реально рандомный генератор. Если использовать сразу несколько терморезисторов с разными коэффициентами и расположить их по краям схемы (поближе к внешней среде), то хаотичность будет выше.
Напряжение питания может быть где-то в пределах от 3.9 В до 5 В. То есть, будет работать от аккумулятора, трёх батареек или от стандартных 5 В.
В общем, это интересная игрушка для начинающих электронщиков. Я думаю, что надо развести печатную плату, заказать их штук 30 и сделать из них рандомно мигающую гирлянду на новый год:)
Когда я был ещё маленький, я бывал в радиокружке и там увидел старые кассетницы из спичечных коробков, в которых были разложены детальки. Мне эта идея понравилась, поэтому я насобирал коробков и склеил себе две вот такие большие кассетницы.
Сначала я складывал в них всё, что выковыривал из старых приборов. В основном это были резисторы МЛТ, советские диоды, транзисторы и микросхемы, в которых я даже толком не разбирался.
Позже я распечатал и наклеил номиналы и разложил туда SMD резисторы и конденсаторы. До сих пор так и пользуюсь этой кассетницей:)
Хотя вот думаю, что можно же распечатать на 3D принтере какие-то коробочки. Они лишними не бывают у тех, кто постоянно копит запчасти на будущее😁
Сначала я складывал в них всё, что выковыривал из старых приборов. В основном это были резисторы МЛТ, советские диоды, транзисторы и микросхемы, в которых я даже толком не разбирался.
Позже я распечатал и наклеил номиналы и разложил туда SMD резисторы и конденсаторы. До сих пор так и пользуюсь этой кассетницей:)
Хотя вот думаю, что можно же распечатать на 3D принтере какие-то коробочки. Они лишними не бывают у тех, кто постоянно копит запчасти на будущее😁
Скинул в ChatGPT эту фотку и попросил определить номинал резистора. Вот что он написал:
В реальности номинал 51кОм. Он спутал вторую коричневую линию с чёрной и красную с коричневой. Но в целом, результат крутой конечно:)
На изображении изображён резистор с цветовой маркировкой. Слева направо видны следующие цветные полосы:
Зелёный (5)
Чёрный (0)
Чёрный (0)
Коричневый (×10)
Коричневый (±1% — допуск)
Расчёт номинала:
Первые три полосы: 5, 0, 0 → 500
Множитель (коричневый): ×10 → 500 × 10 = 5000 Ом
Допуск (коричневый): ±1%
Результат:
Номинал резистора: 5,0 кОм ±1%
В реальности номинал 51кОм. Он спутал вторую коричневую линию с чёрной и красную с коричневой. Но в целом, результат крутой конечно:)
This media is not supported in your browser
VIEW IN TELEGRAM
Пора делать цветные игровые консольки:)
Здесь 160х80 пикселей с диагональю 0.96'' и драйвер ST7735S. Очень маленький, но для простых игр вполне подойдёт.
На алиэкспрессе эти дисплеи сейчас где-то по 130 рублей с платой.
Здесь 160х80 пикселей с диагональю 0.96'' и драйвер ST7735S. Очень маленький, но для простых игр вполне подойдёт.
На алиэкспрессе эти дисплеи сейчас где-то по 130 рублей с платой.
Эту плату я, как обычно, нашёл на техносвалке. Мне даже прокомментировали её появление: надо было быстро попробовать новую микросхему. а заказывать плату было некогда или не на что. Поэтому советского монтажника запрягли спаять такую макетную плату. Было это лет 30 назад и паялось советским паяльником.
Эта микросхема (тут цифровой генератор синуса) в корпусе LQFP-48. Шаг выводов - 0.5 мм, а сами выводы шириной 0.27 мм. Провода - какой-то тонкий МГТФ. Часть уже отвалилось, потому что плата долго валялась вместе со всяким хламом.
Теперь она у меня в личной коллекции:) Люблю всякие старые электронные артефакты разглядывать:)
Эта микросхема (тут цифровой генератор синуса) в корпусе LQFP-48. Шаг выводов - 0.5 мм, а сами выводы шириной 0.27 мм. Провода - какой-то тонкий МГТФ. Часть уже отвалилось, потому что плата долго валялась вместе со всяким хламом.
Теперь она у меня в личной коллекции:) Люблю всякие старые электронные артефакты разглядывать:)
Представьте, вы хотите купить маленькое портативное устройство, которое заряжается по USB-C. Хотели бы вы, чтобы там был в комплекте короткий USB кабель? Этот провод стоит дополнительные 120 р (за сам провод и увеличение размера коробки).
Anonymous Poll
16%
Да, лучше дороже, но с кабелем зарядки.
55%
Нет, лучше подешевле и без кабеля. Сам куплю отдельно (или уже есть).
29%
Посмотрю по ситуации (в зависимости от устройства, цены и т. д.).
This media is not supported in your browser
VIEW IN TELEGRAM
Похоже, этот робот усталь и очень хочет спатиньки:) Но вредные людишки заставляют его встать и идти работать😁
Убедился в том, что маленькие цветные дисплеи - классные!
Управлять ими легко, данные быстро загружаются, хороший контраст и углы обзора. А главное - низкая цена!
Но очень уж они маленькие... Мало что разглядишь на них😁
Скоро выложу короткое видео с играми на этой консольке:)
Управлять ими легко, данные быстро загружаются, хороший контраст и углы обзора. А главное - низкая цена!
Но очень уж они маленькие... Мало что разглядишь на них😁
Скоро выложу короткое видео с играми на этой консольке:)