Forum: Mikrocontroller und Digitale Elektronik rand auf einem atmega


von Trax X. (trax)


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?

von Thomas R. (tinman) Benutzerseite


Lesenswert?

wozu random ? Reichen nicht sagen wir 20 feste ?

von Trax X. (trax)


Lesenswert?

Damit jeder user meines proggis nicht die selbe MAC bekommt.

von flätz (Gast)


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:=)

von Andreas K. (derandi)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

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

von Oliver (Gast)


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

von Lupin (Gast)


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.

von A. F. (artur-f) Benutzerseite


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

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.