Hallo allemaal,

Ik ben bezig met een programma wat 16 lampen aan stuurt. Eigenlijk is de hele software en hardware al klaar. Maar ik wil de lampen in verschillende patronen laten knipperen, ook dit is nog geen probleem, tot ik het idee had om de random te laten knipperen.
heeft iemand een idee hoe je een random getal uit een pic krijgt??? het gaat om de pic16F84A (idd, van het artikel van deze site)

alvast bedankt

Groeten

Bart

dat staat uitgelegd op : www.picbasic.nl

staat volgens mij in een van de cursusen

ok, das snel!
maar dit gaat over basci, ik ben met assembly bezig...

de ASM die uit besic komt , daar kun je dan toech zien hoe ze het doen?

LAat je PIC/AVR met een paar onstabiele factoren rekenen.
BV de lichtsterkte, warmte etc.
Niets zo variabel als analoog en als je zoiets ADC omzet, heb je een paar mooie factoren om mee te rekenen.

Ik denk dat ik de code van basic pic ff ga uit ravelen. moet vast wel leuken.
ik heb helaas geen analogen signaalen op me pic. anders had k wel iets van een sinus generator op een ingang gezet en dan iderekeer bepalen of het 1 of 0 is. maar dat gaat nu niet. (pic zit nok vol.)

PN generator maken in assembly. Moet kunnen.

Gejat van www.piclist.com

16-bit random generator (tested)

The 0xA1 is part of a prime polynom value 0xA1A1 which generates a full LFSR

Random:
    BCF     STATUS,C    
    RRCF    LFSRVALUEH,F
    RRCF    LFSRVALUEL,F
    BTFSS   STATUS,C
    RETURN
    MOVLW   0xA1
    XORWF   LFSRVALUEH
    XORWF   LFSRVALUEL    
    RETURN

Zie of je de seed (de startwaarde) ergens willekeurig vandaan kan halen (tijd dat een knopje bijvoorbeeld is ingedrukt), anders begin je gewoon met 0x0000.

Ok,
ik heb net een ander stukje code van die site gestest! :)
dit werk volgens mij nu goed.
in idergeval bedankt!

gr

Bart

Load a register called "RANDOM" with any non-zero value, then call this routine each time you'd like a new pseudo-random value:
LFSR: RLF RANDOM,W
RLF RANDOM,W
BTFSC RANDOM,4
XORLW 1
BTFSC RANDOM,5
XORLW 1
BTFSC RANDOM,3
XORLW 1
MOVWF RANDOM
RETLW 0

Scott Dattalo says:
[with the double RLF at the start of this routine,] Andy is implementing 'roll left' where the most significant bit of RANDOM will get copied to least significant position. This is how it works. The first RLF will copy the most significant bit of RANDOM into the carry. What ever was in the carry prior to the first RLF will get copied into the least significant bit position - but we don't care. Also, since the destination is the W register, the variable RANDOM is unaffected. The second RLF repeats the same rotate operation, but this time the carry has been initialized to the MS bit of random. So this second rotate will copy the MS bit into the least significant bit. All of the other bits are of course shifted left one bit position. See?

Ik heb laatst in assembler een dobbelsteen gebouwd, deze ging zolang de switch ingeduwd was aftellen.
Als de waarde 0 was begon hij weer bij 6. Je moet wel opletten dat je bij de overstap van 0 naar 6 even veel kloktikken kwijt bent als bij het aftrekken. Hiervoor heb ik vertraging gebruikt.


TELLER	BTFSS		PORTA,SW4
		GOTO		VERVOLG1
		DECFSZ	DOBBEL, 1
		GOTO		VERTRAGING
		MOVWF		DOBBEL
		NOP
		GOTO		TELLER
VERTRAGING	GOTO		TELLER