реклама на сайте
подробности

 
 
> Простой ГСП на Си
Herz
сообщение Jan 17 2014, 19:13
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Предположим, требуется моргать светодиодом с псевдослучайным интервалом от 2 до 30 секунд.
Посоветуйте простую функцию на Си для генерации целых чисел в таком малом диапазоне. Пусть от 1 до 255 максимум.
Функция rand() из библиотеки HT-PICC тяжеловата как-то...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Herz
сообщение Jan 18 2014, 22:16
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Fat Robot @ Jan 18 2014, 16:15) *
Не нужно вам никакого деления и остатка от деления.

Сразили! Я и слов-то таких не знаю: fractional. biggrin.gif Буде Ваша воля пояснить свою идею попроще, постараюсь разобраться...

Цитата(SM @ Jan 18 2014, 22:42) *
Ну а если аппаратное умножение имеется, то тут, разумеется, совсем другой расклад по производительности. Но вроде в обычном PIC его и нету...

На данном этапе имеется PIC18, в котором аппаратное умножение присутствует. Но хочется перенести проект на PIC16, где на эту задачу желательно потратить минимум ресурсов.

Цитата(Victor® @ Jan 18 2014, 23:12) *
Что-то все все усложняют...
На светодиод наверное человек смотреть будет?
Так вот через несколько он забудет, что видел при этом моргании.
Просто сделайте таблицу на пару минут и все...

Или игровой автомат? Тогда запись на видео лишит всего дохода... sm.gif

П.С.
Или Вам надо офигенно нормальное распределение?
Увы - ничего не выйдет....

Да нет, светодиод - это пример, упрощение. На самом деле нужно посылать некий сигнал, но нерегулярно. Чтобы не привыкнуть. Таблица отпадает - памяти маловато. Хотя...
Но, от добра добра не ищут: пример от ув. SM очень даже ничего.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 18 2014, 23:55
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Объясню предельно просто, не жонглируя терминологией

Пусть генератор после всех преобразований имеет выход X в диапазоне [0; (2^n)-1]
нужно и можно найти такие постоянные значения Y и Z, чтобы значение числа round((X*Y) >> Z) лежало в диапазоне [0; max-min]

Все, что для этого нужно это (((max-min) * X ) + (1 << (n - 1))) >> n.

Пусть n=7, a max-min=27
X в диапазоне [0; 127]
((X*27)+64)>>7 будет лежать в диапазоне [0;27]
выход операции умножения 16 бит

Если операции умножения у вас нет, но есть немного свободы в выборе значения для разности max-min, то нужно выбрать такое значение,
чтобы в нем было как можно меньше единиц в двоичных разрядах, тогда умножение из общего случая упростится в сумму сдвигов.

пусть вместо 27 из примера вас устроит 24 = (2^4) + (2^3), тогда преобразование будет таким:
(( X << 4 ) + ( X << 3 ) + 64 )>>7 и выход будет лежать в диапазоне [0;24]


Цитата(Herz @ Jan 18 2014, 23:16) *
Буде Ваша воля пояснить свою идею попроще, постараюсь разобраться...
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jan 19 2014, 08:05
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Fat Robot @ Jan 19 2014, 03:55) *
то нужно выбрать такое значение,
чтобы в нем было как можно меньше единиц в двоичных разрядах,

? На, к примеру, 31 тоже ведь легко умножить.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Herz   Простой ГСП на Си   Jan 17 2014, 19:13
- - thermit   x(n)=(1664525*x(n-1)+32767) mod 2^32 и берем старш...   Jan 17 2014, 19:21
- - TSerg   Любой RNG на основе сдвигового регистра 8 р, но лу...   Jan 17 2014, 19:28
|- - Herz   Спасибо, коллеги за скорую помощь! Цитата(...   Jan 17 2014, 19:50
|- - aaarrr   Цитата(Herz @ Jan 17 2014, 23:50) Я тольк...   Jan 17 2014, 19:52
|- - Herz   Цитата(aaarrr @ Jan 17 2014, 21:52) Она н...   Jan 17 2014, 20:04
- - SM   интервал определен как [offset, offset+max) два в...   Jan 17 2014, 20:49
- - Herz   Спасибо, SM! Но, по правде говоря, ничего не п...   Jan 17 2014, 22:04
|- - SM   Цитата(Herz @ Jan 18 2014, 02:04) Вас на ...   Jan 18 2014, 07:38
|- - _Pasha   Цитата(SM @ Jan 18 2014, 11:38) Да щасссс...   Jan 18 2014, 08:05
|- - Herz   Спасибо большое, есть что покурить. Цитата(_Pasha...   Jan 18 2014, 08:54
|- - _Pasha   Цитата(Herz @ Jan 18 2014, 12:54) Ну, это...   Jan 18 2014, 09:02
|- - SM   Цитата(_Pasha @ Jan 18 2014, 13:02) что m...   Jan 18 2014, 09:07
|- - Herz   Цитата(_Pasha @ Jan 18 2014, 11:02) Ага, ...   Jan 18 2014, 09:16
- - _Pasha   Кодu8 rnd8(u8 min, u8 max) { static u16...   Jan 18 2014, 07:30
- - Herz   Странно, но вот у меня такая функция: Кодunsigned...   Jan 18 2014, 10:55
- - SM   Я допустил описку, сорри... Писал прямо в форум......   Jan 18 2014, 11:07
- - Herz   Семён Семёныч! Да, теперь работает отлично....   Jan 18 2014, 11:13
|- - SM   Цитата(Herz @ Jan 18 2014, 15:13) Кстати,...   Jan 18 2014, 11:16
|- - Herz   Цитата(SM @ Jan 18 2014, 13:16) По ANSI э...   Jan 18 2014, 11:22
|- - SM   Цитата(Herz @ Jan 18 2014, 15:22) Нет, я ...   Jan 18 2014, 11:30
- - Herz   ОК, я понял. То есть и у TSerg смысла в явном при...   Jan 18 2014, 11:40
|- - SM   Цитата(Herz @ Jan 18 2014, 15:40) То есть...   Jan 18 2014, 11:42
|- - Fat Robot   Не нужно вам никакого деления и остатка от деления...   Jan 18 2014, 14:15
|- - SM   Цитата(Fat Robot @ Jan 18 2014, 18:15) од...   Jan 18 2014, 20:42
- - Victor®   Цитата(Herz @ Jan 17 2014, 23:13) Предпол...   Jan 18 2014, 21:12
- - Herz   Благодарю Вас, теперь ясно.   Jan 19 2014, 06:58
- - TSerg   Использование чисто арифметических методов приведе...   Jan 19 2014, 13:24
|- - SM   Цитата(TSerg @ Jan 19 2014, 17:24) Вместо...   Jan 19 2014, 14:40
||- - TSerg   Цитата(SM @ Jan 19 2014, 18:40) мои глюки...   Jan 19 2014, 15:51
|- - Herz   Цитата(TSerg @ Jan 19 2014, 15:24) Исполь...   Jan 19 2014, 22:06
||- - SM   Цитата(Herz @ Jan 20 2014, 02:06) Мне каж...   Jan 20 2014, 08:24
|- - Herz   Цитата(TSerg @ Jan 19 2014, 15:24) Лучше ...   Jan 20 2014, 13:01
- - TSerg   Сильно извиняюсь.. слегка забегаю в Инет, принимая...   Jan 20 2014, 13:23
|- - Herz   Цитата(TSerg @ Jan 20 2014, 15:23) Сильно...   Jan 20 2014, 13:25
|- - Tanya   Цитата(Herz @ Jan 20 2014, 17:25) А поче...   Jan 20 2014, 13:32
|- - Herz   Цитата(Tanya @ Jan 20 2014, 15:32) А поче...   Jan 20 2014, 13:40
|- - Tanya   Цитата(Herz @ Jan 20 2014, 17:40) МК уже ...   Jan 20 2014, 13:48
|- - Herz   Цитата(Tanya @ Jan 20 2014, 15:48) И лишн...   Jan 20 2014, 17:12
- - TSerg   Спасибо за поздравление, Herz! Однако нам не ...   Jan 20 2014, 20:14
- - SM   Кстати, на сколько я помню, для любого линейно-кон...   Jan 20 2014, 20:42
- - TSerg   Ну, так я и без претензий - просто сделал попытку ...   Jan 20 2014, 20:53
- - SM   Да и я без претензий... просто сделал попытку мате...   Jan 20 2014, 20:55
|- - TSerg   Цитата(SM @ Jan 21 2014, 00:55) Вот у M-п...   Jan 20 2014, 21:04
- - Herz   Цитата(TSerg @ Jan 20 2014, 22:14) Поэтом...   Jan 21 2014, 07:12
- - TSerg   ЦитатаОчень Вам признателен. Да не за, что - гости...   Jan 21 2014, 07:41
- - ARV   для задач типа случайного мигания светодиодом, т.е...   Jan 22 2014, 06:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 22:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016