-
        

Ergebnis 1 bis 7 von 7

Thema: Mit RND Befehl eine wirkliche Zufallszahl erzeugen?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.07.2005
    Beiträge
    49

    Mit RND Befehl eine wirkliche Zufallszahl erzeugen?

    Anzeige

    Hallo,

    ich bräuchte für eine Schaltung eine Zufallszahl, die aber schon ab Power-on-Reset wirklich zufällig sein soll.
    Das Problem beim RND-Befehl ist ja, dass er immer die selben Zahlen liefert, wenn der selbe SEED-Startwert verwendet wird.
    Wenn ich jetzt einen Timerwert verwenden würde, wären es ja wieder die selben Zahlenfolgen.

    Ich hab mit der Forum-Suche was von einem Rauschgenerator oder zwischenspeicherin im EEPROM gelesen, das ist mir aber zu aufwändig bzw. zu epromvernichtend.

    Meine Idee: einen ADC-Port "in der Luft" hängen lassen und den ermittelten Wert als Startwert verwenden.

    Würde das funktionieren oder sind die Ports dafür zu niederohmig, wenn sie als ADC arbeiten?

    Oder einfach einen Digitalport ohne Pullup in der Luft hängen lassen und jedes mal wenn er high ist, eine Variable hochzählen und diesen Wert dann verwenden.

    Was haltet Ihr von meinen zwei Vorschlägen?

    MfG, Dane

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569

    Re: Mit RND Befehl eine wirkliche Zufallszahl erzeugen?

    Zitat Zitat von Dane
    Das Problem beim RND-Befehl ist ja, dass er immer die selben Zahlen liefert, wenn der selbe SEED-Startwert verwendet wird.
    Nimm halt den Inhalt des nicht Initialisierten RAM's als SEED
    Der ist übrigens jedesmal verschieden.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.07.2005
    Beiträge
    49
    Hallo,

    das hört sich interessant an.

    Kannst Du mir auch mit einem Beispielcode weiterhelfen?
    Das wär super!

    greetz, Dane

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Hmm, schau mal in der Bascom Doku nach ... oder hier im Wiki.

    Grüße,
    da Hanni.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.07.2005
    Beiträge
    49
    Hallo,

    im Wiki hab ich leider nix gefunden und in der Hilfe zum RND-Befehl steht nur was von der Verwendung des Timers als SEED.

    Dane

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du kannst ja auch den aktuelle RND() Wert im EERAM speichern und beim nächsten Start von dort weiterrechnen lassen (als SEED)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Als Seed kann man bei AVR sehr gut uninitialisierten RAM-Inhalt verwenden, der nach einem PowerDown-RESET gut streut. Und selbst wenn es nur ein externer Reset oder so war, sind das RAM als Seed gut brauchbar.

    Aus dem RAM-Inhalt berechnest du eine Seed, und zwar bevor dein Programm das RAM und die Variablen initialisiert hat, und speicherst das in einer Variablen, die nicht initialisiert wird (also nicht von deinem Programm mit ini-Werten besetzt wird).

    schont den EEPROM

    Für C beschrieben ists hier, muss nur noch nach Bascom "übersetzt" werden...
    Disclaimer: none. Sue me.

Berechtigungen

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