-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Rnd - Wo ist der Seed Befehl?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.01.2006
    Alter
    27
    Beiträge
    35

    Rnd - Wo ist der Seed Befehl?

    Anzeige

    Hallo,

    ich hoffe ihr findet die "Überschrift" genauso kurios wie ich.

    Ich wollte gerade mal ein Programm schreiben was per Zufall irgendwelche Led's an und aus macht.
    Das habe ich halt mit x = Rnd(8 ) gelöst - Da aber wie erwartet immer die gleiche Reihenfolge auftrat habe ich in der Hilfe von RND() geguckt und einen Hinweis auf den Seed Befehl gefunden - Jedoch gibt es keine Erklärungen zum Seed Befehl!!!

    Ich habe einfach mal so Sachen wie Seed = Zeit probiert - Wobei Zeit die Zeit war die seit dem starten des Programmes vergangen war ist.
    Jedoch wurde Seed nicht einmal als Befehl blau markiert. Auch nicht Rseed und sonstige Möglichkeiten die in der Hilfe bei RND() standen.

    Weiß jemand ob es den Befehl überhaupt noch gibt (lol?!?!) oder ob er eventuel umbenannt wurde in Bascom.

    MfG
    Isator


    P.S.: Ich benutze Bascom Version 1.11.7.9

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Zufall

    Hallo Isator,

    sieh dir das RND-Beispiel in der Bascom-Doku mal genauer an:
    Das mit "seed" ist eine System-Variable namens ___rseed (beachte die Unterstriche!).
    Mit ihr kann man einen neuen Anfangswert setzen:
    Dim ___rseed As Word
    ___rseed = 10234

    Statt 10234 kann man andere Werte nehmen (Timer, irgendein Sensor ...).

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.01.2006
    Alter
    27
    Beiträge
    35
    Hi,

    zeigt Bascom System Variablen nicht farbig an? (Schade eigentlich)

    Hast du mal ein Beispiel für den richtigen Umgang mit __rseed - Ich komme jetzt nur so weit das immer alle leuchten.

    Danke für die Erklärung!

    MfG

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Egal was du als Wert für Rseed angibst du bekommst nur eine weitere Pseudozufällige Sequenz aufgetischt.

    Schreib doch einfach das Beispiel ab in dein Programm und probiers aus.
    so schwer zu verstehen ist das nun auch nicht.


    Wenn du echte Zufallssequenzen willst dann nim nen freien AD-Eingang und häng nen kleinen Rauschgenerator drann (2 Transen und etwas Hühnerfutter) dann haste einen relkativ echten Zufallsgenerator.
    Gruß
    Ratber

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    31.01.2006
    Alter
    27
    Beiträge
    35
    Hi,

    ich brauche keinen "perfekten" Zufall. Aber in dem Umgang mit __rseed stelle ich mich echt dämlich an...

    Hiermal ein Codeschnipsel:
    Dim __rseed as Integer
    Do
    __rseed = Zeit
    x = Rnd(8 )
    Print X
    Loop
    Wobei Zeit die Schleifen Durchgänge in der Hauptschleife sind.

    Was stimmt bei dem Code nicht?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ganz einfach,es ist immernoch eine feste Folge denn wenn das Programm startet dann ist der Schleifenzähler "Zeit" immer der gleiche und damit auch die Seed's für den zufallsgenerator.

    Für einen annähernd zufälligen Zufallsgenerator (Ich weiß,kleiner Scherz.Konnt ich mir nicht verkneifen) ist eine "unberechenbare" komponennte nötig.

    Hast du den nichts in der Schaltung über dessen Einschaltzustand der Controller nicht 100% bescheidt weiß ?

    Zb. nen Poti für ne Geschwindigkeitsreglung ?
    Gruß
    Ratber

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    31.01.2006
    Alter
    27
    Beiträge
    35
    Noch nicht - Das einzige was dran hängt sind 2 Motoren bis jetzt. Aber ich habe leider keinen Poti den ich dazwischen klemmen könnte. Ich muss demnächstmal ne Bestellung aufgeben.
    Oder kann ich eventuell den Quarz benutzen?!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Du meinst einfach den Xtal1/2 an nen AD-Port klemmen und so ein quasi zufälliges Signal zu bekommen ?

    Is ne Möglichkeit aber damit destabiliserst du den Schwingkreis.

    Man kann besser eine andere Resource des Controllers anzapfen aber dafür müßte ich mal wissen welchen Controller du nutzen willst.


    Wie gesagt,wenn ein Taster im Spiel wäre nach dessen Betätigung der Zufallswert fällig ist wäre das kein akt.

    Am Besten wäre wie gesagt ein Rauchgenerator mit ner Zehnerdiode.

    Eine weitere Möglichkeit ist das du den Controller mit nem absichtlich instabilen RC-Oszillator betreibst.
    Also als Widerstand nen PTC/NTC oder Fotowiderstand und einen möglichst billigen Kondensator.

    Wenn du den Fotowiderstand in der nähe einer oder mehrerer der LED's unterbringen kannst dann reicht sogar der alleine.

    Noch ne Möglichkeit:

    Den AD-Wandler absichtlich nicht entstören (Kein 100nF,kein Elko,Eingang absichtlich in der Nähe von störquellen) und die Eingangsleitung möglichst lang lassen um sozusagen eine antenne zu schaffen.
    Die Werte sollten jetzt recht gut fluktuieren (1-3 bit oder vieleicht auch mehr).
    Normalerweise bekommen die Leute das immer unbeabsichtig hin also warum nicht mal mit Absicht ?



    Such dir was aus.
    Gruß
    Ratber

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    rseed

    Hallo Isator,

    ich würde den "Startwert" der Pseudozufallszahlen nicht bei jeder RND-Abfrage setzen, sondern nur am Anfang und evtl. vor einem größeren neuen Block von Zufallszahlen.
    Für das ___rseed kann man den Timer nehmen, wenn die Stelle im Programm, wo ___rseed gesetzt wird, nicht immer nach dem Booten genau gleich ist (d.h. vom Booten bis zum Aufruf vergeht meist genau die selbe Zeit!). Man kann sich damit helfen, dass man z.B. den User eine Taste drücken läßt, bevor ___rseed mit dem Timer geladen wird.
    Alternativ kann man z.B. einen Helligkeitssensor nehmen oder einen Geräuschsensor (oder daraus irgendeine Rechenformel, z.B. Helligkeit * Temperatur * Pferdemist - Wettervorhersage...).

    Also so:
    Code:
    Dim __rseed as Integer 
    
    __rseed = Zeit 
    
    Do 
    x = Rnd(8 ) 
    Print X 
    Loop
    Gruß Dirk

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    31.01.2006
    Alter
    27
    Beiträge
    35
    Mh genau so habe ich es ja im Grunde. Er mist die Schleifendurchgänge in bis eine Taste gedrückt wird und den wert nimmt er dann für __rseed.

    Aber irgendwie muss ich __rseed auch dazwischen noch tauschen können weil, man sieht bei 8 Lampen dann doch ziemlich schnell das Muster. Ich müsste also zwischen durch wegenmeiner die alten Schleifedurchgänge* die neuen schleifengänge nehmen, aber irgendwie bleibt es trotzdem gleich.

    MfG

    P.S: Ich habe mal __Rseed auf 2 und danach auf 3 gesetzt. Es blinken in beiden Fällen die gleichen LEd's in der gleichen Reihenfolge - Irgendwas stimmt mit __Rseed wohl doch nicht Oo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •