mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR und Zufallszahlen erzeugen


Autor: Jens-Erwin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

möchte Zufallszahlen einsetzen - aber wie.


DA-Wandler brauche ich - kann ich nicht verwenden.


Bisher habe ich Zufallszahlen im SRAM "gesammelt" (z.B. beim
Verändern des AD-Wertes Timer auslesen)

Bin über alle Erfahrungen damit dankbar.

Gruß Jens-Erwin

Autor: Marcel Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
assembler, c oder welche sprache?

in c gibts dafür funktionen, in codevision z.B.

int rand (void)
generates a pseudo-random number between 0 and 32767.

Autor: Jens-Erwin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich programmiere nur in Assembler.
Ich könnte mir ja mal den C-Code anschauen.

Autor: Alexander Höller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhmmm .... du könntest einen Timmer immer Laufen lassen, und wenn du den
Zufallswert benötigst liest du ihn einfach aus.
Ist zwar, nicht wirklich "Zufall" ... aber sollte für die meisten
Anwendungen (außer aufwendige Verschlüsselung, etc.) ausreichend sein!

mfG
Alex

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

einfach mal nach "Zufallszahlen" und "Schieberegister" googeln.
Schieberegisterimplementation in Assembler ist das einfachste und
schnellste, anstatt Modulo-Operationen.

Olli

Autor: Jens-Erwin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich probiere das mal mit dem Schieberegister.

Timer einfach irgendwann auslesen geht natürlich nicht, da ja alles
wirklich präzise abläuft und genau um das irgendwann geht es ja.

Wann soll ich ihn also auslesen?

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier im Forum habe ich meine GLCD Sourcen gepostet. Diese Sourcem
enthalten auch einen SG-LFSR in Assembler. Dies ist ein sogenanntes
Lineares Feedback Shift Register als Shrinking Generator. Seine Periode
beträgt 2^63-2 Bits, ist also bei weitem ausreichend. Enthalten sind
auch jeweils 1000 vorberechnete nicht reduzierbare Polynome, die
ebenfalls sehr wichtig sind, damit sie die mathematischen Eigenschaften
eines LFSR auch ergeben.
Der Source selber dürfte in ASM sehr leicht zu adaptieren sein, und
umfasst 72 Bytes Code.

Wichtig ist auch das zB. die BasicCard Cryptokarten diesen Algo. als
Verschlüsselung benutzten. D.h. dieses SG-LFSR ist ein sehr guter
Zufallsgenerator.

Eines will ich hier noch loswerden, da ich öfters im Netz auf Aussagen
treffe das ein Hardware Zufallsgenerator besser wäre als ein
Pseudo-Zufallsgenerator. Diese Aussage ist schlichtweg falsch. Denn man
kann bei einem HW-Generator NIEMALS mathematisch exakt beweisen das der
HW-Generator auch wirklich Zufall produziert. Ganz im gegensatz dazu
stehen Pseudo-Zufalls-Geenratoren. Diese entsprechen ganz exakt der
Mathematik, sind also absolut exakt vorhersehbar, und somit kann man
über die Wahl der richtigen Paramerter und Verfahren auch ganz exakt
ausrechnen wie sicher der produzierte Zufall tatsächlich sein wird.
Bei einem Zufallsgenerator ist es primär nur wichtig das die
produziereten Zahlenfolgen statistisch gesehen zufällig sind. Durch die
korrekte Wahl von Startwerten = Seed's und deren Geheimhaltung, kann
nunmehr auch der Zufalls geschützt werden. Wie gesagt, alle diese
Eigenschaften können mit Rauschgeneratoren, Radioaktivem Zerfall bisher
NICHT mathematisch beweisen werden, man geht bei solchen Generstoren
einfach davon aus das sie Zufall produzieren, einfach weil der Mensch
bisher kein Muster entdecken konnte. D.h. aber nicht das kein Muster
exsitieren kann.

Gruß Hagen

Autor: Jens-Erwin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

ich schau mir das gleich mal an. Ich habe mal blos ein ganz kleines
Programm geschrieben und geht für meine Ansprüche. Bin schon denke ich
auf dem richtigen Weg.

MacheZufZahl:  lds  temp,SR_ZufZahl
    lds  temp2,(SR_ZufZahl+1)   ;2 Byte im SRAM
    ror  temp              ror  temp2

                mov  temp3,temp2
    andi  temp3,0b00000011  ;Maske

    cpi  temp3,0      ;Exor
    breq  ClrBit7                ;kann man auch
                                               ;anders machen
    cpi  temp3,3
    breq  ClrBit7

  SetBit7:       sbr   temp,1<<7
           rjmp   EndMacheZuf

  ClrBit7:       cbr    temp,1<<7

  EndmacheZuf:   sts    SR_ZufZahl,temp
           sts   (SR_ZufZahl+1),temp2
           ret                         ;temp kann man
                                                    dann nehmen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.