Forum: Mikrocontroller und Digitale Elektronik zufallsfunktion mit pic16


von Tim R. (herrvorragend)


Lesenswert?

hallo,

ich hatte auf einem pic24 die gute alte srand() funktion benutzt um mir 
"zufallszahlen" generieren zu lassen. nun bin ich auf einen pic16 
umgestiegen. dabei hab ich den compiler gewechselt (nun hi-tech). dieser 
kennt diese funktion nicht. ich habe mit google und der threadsuche hier 
nicht viel zu diesem thema gefunden. weiß jemand wie ich diese funktion 
trotzdem implementieren kann? das sollte doch eigentlich recht leicht 
möglich sein oder ?!

danke und liebe grüße

von Achim M. (minifloat)


Lesenswert?

Tim R. schrieb:
> weiß jemand wie ich diese funktion
> trotzdem implementieren kann? das sollte doch eigentlich recht leicht
> möglich sein oder ?!

Kennst du das gute alte Rückgekoppelte Schieberegister? Das macht z.B. 
Pseudozufallszahlen.
Wenn der µC einen AD-Wandler hat, kann man eine beliebige Rauschquelle 
da dran hängen und die untersten 8bits hernehmen.

mfg mf

von Tim R. (herrvorragend)


Lesenswert?

rückgekoppelte schieberegister ... ohha mal gehört hehe ...

das mit der rauschquelle verstehe ich nicht ganz, könntest du das näher 
erläutern? ich schätze du meinst durch das schwanken des übersetzten 
wertes kann man "zufallszahlen" generieren aber mit rauschverhalten habe 
ich mich nie wirklich auseinander gesetzt um sagen zu können, dass dort 
immer verschiedene zahlen generiert werden könnten?!

von STK500-Besitzer (Gast)


Lesenswert?

Tim R. schrieb:
> das mit der rauschquelle verstehe ich nicht ganz, könntest du das näher
> erläutern? ich schätze du meinst durch das schwanken des übersetzten
> wertes kann man "zufallszahlen" generieren aber mit rauschverhalten habe
> ich mich nie wirklich auseinander gesetzt um sagen zu können, dass dort
> immer verschiedene zahlen generiert werden könnten?!

z.B. ein offener AD-Wandler-Eingang...

von holger (Gast)


Lesenswert?

google einfach mal nach "pic16 random".
Da wirst du schon was finden.

von holger (Gast)


Lesenswert?

>z.B. ein offener AD-Wandler-Eingang...

Fängt sich bevorzugt 50Hz ein.

von Rainer (Gast)


Lesenswert?

Falls es deinen Anforderungen genügt:

http://mondo-technology.com/random.html

Rainer

von Tim R. (herrvorragend)


Lesenswert?

ok danke für die antworten ... es scheint wohl auf den offenen ad 
eingang hinaus zu laufen ...

nur folgendes problem ... das hätte ich erwähnen sollen:
das ganze möchte ich simulieren und danach aufbauen. und ein offener ad 
eingang in einer simulation? das schafft noch kein programm oder ?

@Rainer, danke das werde ich mal testen

von iaoffline (Gast)


Lesenswert?

Tim R. schrieb:
> das ganze möchte ich simulieren und danach aufbauen. und ein offener ad
> eingang in einer simulation? das schafft noch kein programm oder ?

Mach dir ne random table und füttere den A/D Stimulus damit (Mplab).

Aber wie ihr auf den Gedanken kommt das ein offener A/D Eingang einen 
Zufallswert liefern soll verstehe ich nicht. Ein Pic A/D hat so ca. 100 
kOhm Eingangswiderstand und nen S&H Kondensator hinter den Kanal- und 
LeseJetzMalNeSpannungEin Schaltern. Damit kannst du wunderbar den 
Kriechstrom auf der Leiterplatte zum Pin messen oder eben das 
FastNichtentladen des S&H Kondensators beim nächsten Messzyklus oder was 
sich seit dem letzten Einlesen am Pin so aufgebaut hat. Da kommt dann 
immer ein ähnlicher Wert bei raus (was deine random table schön kurz 
macht ;-).

von Chris (Gast)


Lesenswert?

in Hi-Tech sollte es eingentlich eine rand() Funktion geben. Genaueres 
sowie
Seed sollte das Manual liefern.Zur Initialisierung, Timer0 ist auch 
nicht schlecht, speziell wenn man nach einem POR ein WDT macht.

von Sascha (Gast)


Lesenswert?

Sorry, dass ich das nochmal hoch hole.

Also srand() bzw. rand() gibt es im Hi-Tech definitiv. Ich benutze sie 
selbst momentan. Da musst Du irgendetwas noch nicht richtig eingestellt 
haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.