rand auf einem atmega

OP #1202585
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?
Gast #1202593
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:=)
Gast #1202711
>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
Gast #1202718
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.
Moderator Persönliche Seite #1202758
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.