mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik rand auf einem atmega


Autor: Trax Xavier (trax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Wie kann ich bei einem Atmega 644 progi (pseudi)zufalls zahlen 
generieren, ich nehme mal stark an das ohne eine extra RTC ich 
srand(time(null)); vergessen kann.

Ich bräuchte was um mir Board mitteln des mega einpaar Zufalls zahlen zu 
bekommen, könnte es sein das ein hash über das gesamte ram einpaar 
Zufalls zahlen liefern? oder wird der ram immer mit 00en initialisiert?


Was ich beabsichtige ist ne funktion zu schreiben die beim ersten start 
meines Smart WebServers eine zufällige MAC Adresse für das board 
generiert, falls keine im eeprom vorhanden.

Ich denke ich könnte auch ohne MAC einpaar broadcasts aufschnappen und 
die dann als Hash futter verwenden um ne Zufalls zahl zu bekommen, wäre 
das was, oder gehts e'h einfacher?

Autor: Thomas R. (tinman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wozu random ? Reichen nicht sagen wir 20 feste ?

Autor: Trax Xavier (trax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit jeder user meines proggis nicht die selbe MAC bekommt.

Autor: flätz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das mal folgendermaßen gemacht:

Timer starten und mit höchster Frequenz frei laufen lassen;
Elko über einen Widerstand laden und mit dem Analogcomparator einen 
Schaltzeitpunkt bestimmen;
Im Compatorinterrupt den Timer auslesen -> Zufallszahl.

Je schlechter der Elko um so besser ist die Zufallszahl:=)

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte vielleicht das Rauschen des ADC verwenden, das ist thermisch 
bedingt und daher auch gleich noch wirklich zufällig.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rückgekoppeltes Schieberegister. Ist auch auf einem AVR ohne Probleme 
implementierbar. Suche mal nach LFSR (Linear Feedback Shift Register).

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Damit jeder user meines proggis nicht die selbe MAC bekommt.

Ein Netzwerkteilnehmer mit einer nach jedem Einschalten per 
Zufallsgenerator erzugten MAC ist so ziemlich der Supergau in jedem 
Netzwerk. Lass das lieber.

Oliver

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur beim ersten Einschalten wird die MAC zufällig erzeugt.

Ich würde auch einfach das rauschen des ADCs verwenden, vielleicht an 
dem entsprechenden ADC Eingang noch eine lange Leiterbahn anschließen 
(damit man sich noch mehr einfängt). Am besten einen ADC Eingang mit 20x 
verstärkung verwenden.

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, damit kanst du dir viel Ärger einhandeln, wenn deine Geräte 
verkauft werden. Am besten besorgst du dir die Microchip EEPROMs, die 
haben 2Kbit und eine gratis MAC dazu für rund 24 Cent.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> Rückgekoppeltes Schieberegister.

Genau das (*) macht random() ja schon, aber das ist halt nur Pseudo-
Zufall.  Wenn man echten Zufall haben will, muss man zumindest den
Startwert beeinflussen.

(*) Oder zumindest etwas Vergleichbares.

Für echten Zufall braucht man irgendwas, das auf physikalischen
Zufällen beruht.  Das Rauschen einer Z-Diode mit dem ADC zu messen,
hatte ich hier schon einmal demonstriert.

Die Frequenzdifferenz zweier frei laufender Generatoren (RC-Oszillator
und Watchdog-Oszillator) oder eines frei laufenden gegen einen Quarz
kann man auch ausnutzen.  Der SRAM ist meiner Erfahrung nach nicht
übertrieben zufällig: die Zellen haben so eine Art Vorzugslage
eingebaut -- nicht vorsätzlich, aber die ergibt sich aus der Geometrie.
Kann aber sein, wenn man über alle Zellen eine CRC bildet, dass sie
sich dann zumindest zwischen verschiedenen Exemplaren hinreichend gut
unterscheidet.  Das sollte man sinnvoller Weise dann im startup-Code
vor dem Ausnullen der statischen Daten machen.

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.