PDA

View Full Version : Random PBP



strujnimen
- 20th January 2010, 17:14
I need code to generate random number from 1 to 7 in PICBASIC PRO. How to? Thanks.

ScaleRobotics
- 20th January 2010, 18:48
Might not be the best way, but here is one way (untested):


random_word var word
randomdig var byte

generate_random:
Random random_word 'generate random number and put into random_word var
randomdig = random_word DIG 1 'read only first digit
if randomdig = 8 then goto generate_random 'if its 8 then do over
if randomdig = 0 then goto generate_random ' if its 0 then do over

ScaleRobotics
- 20th January 2010, 20:30
Oh yeah, and filter out 9 as well.

RussMartin
- 23rd January 2010, 05:30
To filter, you can also use:

if randomdig > 7 or randomdig < 1 . . .

Russ

Darrel Taylor
- 23rd January 2010, 07:00
I need code to generate random number from 1 to 7 in PICBASIC PRO. How to? Thanks.
PBP's RANDOM command is FAR from RANDOM.
Makes good pink noise though ...

But anywho ...


RANDOM RandVar
Result = RandVar ** 7 + 1

RussMartin
- 25th January 2010, 15:18
PBP's RANDOM command is FAR from RANDOM.

Just how far from "random" is it?

Darrel Taylor
- 25th January 2010, 19:38
Just how far from "random" is it?
Pretty FAR!

It's a REPEATING sequence of 65535 numbers.

If you start with the same "Seed" each time ...
You will get the exact same numbers every time you run your program.

If you start with a different seed, all that does it put you somewhere in the middle of that same repeating sequence.

There's really nothing "RANDOM" about it.
It's called pseudo-random, but even that's a stretch.
<br>

boroko
- 25th January 2010, 23:11
OK.....

What is the best way to approach the need for the appearance of "random"?

I have seen that there is a pattern and haven't figured out a way to circumvent it other than to make the sequence long to make it harder to see the pattern (LEDs)
Mark

Darrel Taylor
- 26th January 2010, 00:16
When you have a microprocessor that does the exact same thing every time you turn it on, it's very difficult to get truly "Random" numbers.

I've seen people suggest amplifying the noise from a diode junction and reading it with the A/D. But I doubt the distribution of numbers would be very good because it ALWAYS returns to 0, and only infrequently makes it to 1023.
So you would get many more low numbers than you would high ones.

If you're interfacing with a Human, you can sort of get random numbers by having a timer free-running, and grab the timer value when the person presses a button. But if you need a lot of numbers really fast, that won't help either.

I've never really seen a good method of getting truly random numbers with a PIC.
<br>

Melanie
- 26th January 2010, 09:27
I've designed a few items that require some form of 'Random' (search 'Electronic Dice' for a primitive example). Most applications for 'true' Random are things like Games of chance, and usually require the User to Switch-On. Nobody keeps their finger on a Button for the same length of time, and if you're simply incrementing a variable (like a Timer as Darrel suggested) until the finger is off the Button, the chance of getting the same value twice is pretty minimal. Generating Random isn't difficult, generating 'equal weighting' for something like a Dice throw is a little more tricky!

There is a place for 'Pseudo-Random' too. Especially in Science (and Mathematics), where there is a need to be able to accurately recreate an experiment (or a series of calculations) even if they contain an element of randomness.

Michael
- 3rd October 2021, 19:14
PBP's RANDOM command is FAR from RANDOM.
Makes good pink noise though ...

But anywho ...


RANDOM RandVar
Result = RandVar ** 7 + 1


This is an older post I searched because I need to generate a random number and saw you can do it with a word variable. Like this fella, I need a smaller number.

I'm having a hard time grasping what is going on with Result = ** 7 + 1
Huh ?

Saw --
** Returns the high 16 bits of a 16-bit multiply result

But even that isn't making sense to me.

Has there been any updates to random where you can apply it to more than a word? -thanks

HenrikOlsson
- 3rd October 2021, 19:46
That line of code will scale the WORD sized Randvar variable (0 to 65535) to a value ranging from 1 to 7.

Bascially it's the same as doing Result = Randvar * 7 / 65536 + 1

/Henrik.

CuriousOne
- 3rd October 2021, 21:26
Use biased zener connected to ADC and sample the input :)

Ioannis
- 4th October 2021, 12:58
What would the range be? Near the bias?

I think a running timer that user reads the current state maybe good enough, although sure not random since it is repeating with specific period. But the reading period is not specific or related to the timer period.

Ioannis

mpgmike
- 4th October 2021, 18:14
Most of the newer PICs have Internal Temp Sensing through the ADC Module. The Temperature result would be a good source for Random Seed generation, as it will fluctuate quite a bit.