Forum: Mikrocontroller und Digitale Elektronik Zufallszahl beim Start erzeugen mit ATtiny13 + Luna/Bascom


von Tim D. (Gast)


Angehängte Dateien:

Lesenswert?

Mein Frage wäre schon fast was fürs Analogforum, aber ich denke sie ist 
doch hier besser platziert.

Ich bin dabei elektronische Glühwürmchen zu basteln, die ich im Garten 
in die Sträucher hängen will (ATtiny13, LED + Batterie). Programmiert 
habe ich das mit LunaAVR (ähnlich Bascom).

Damit das Ganze nicht aussieht wie eine synchron blinkende Lichterkette, 
sollen die ATtiny13 unterschiedlich schnell starten. Der Start soll 
zwischen 0 und 50 Sekunden dauern. Das heißt ich brauche beim Start eine 
echte Zufallszahl.

Wie mache ich das am besten?

Mit seed und rnd() geht das nicht. Und für jedes Modul eine anderen 
seed-Wert anzugeben macht wenig Sinn und bringt auch kein gutes 
Ergebnis.
1
seed 11845
2
wartezeit=rnd()
3
wait wartezeit

Meine Idee wäre ein Rauschgenerator am ADC-Eingang gewesen. Allerdings 
läuft meine Schaltung mit 2,5-3V. Keine Ahnung wie ich da ein Rauschen 
erzeugen soll. Ich habe es wie in oben gezeigter Schaltung mit 
verschiedenen Germaniumdioden versucht, aber ich konnte selbst mit 9V 
keiner ein messbares Rauschen entlocken.

Eine 1N34A soll bei 3V angeblich 30mV rauschen:
https://noisio.de/blog/small-voltage-noise-source
Ich habe daran irgendwie Zweifel. Bei meinem Versuchsaufbau passierte 
nämlich gar nichts. Wenn das wirklich so ginge, bräuchte ich ja nur eine 
Diode zwischen zwei Ports klemmen.

Der Schaltungsaufwand sollte auch gering bleiben. Sonst könnte ich einen 
Port nutzen und mittels Drossel beim Start für ein paar Sekunden eine 
höhere Spannung erzeugen und einen Rauschenerator damit speißen. Dann 
wäre aber das Hühnerfutter teurer und größer als das ganze Huhn.

Eine andere Idee wäre die Spannung an einem LDR zu messen, den ich 
gleichzeitig nutzen könnte um am Tag Strom zu sparen.

von Sebastian S. (amateur)


Lesenswert?

Wozu der Aufwand?

Schaffst Du es tatsächlich z.B. 10 Blinkedinger exakt zur gleichen Zeit 
einzuschalten?
Oder schaltest Du sie einen nach dem anderen ein und das mit 
"menschlicher" Genauigkeit?

von michael_ (Gast)


Lesenswert?

Tim D. schrieb:
> Das heißt ich brauche beim Start eine
> echte Zufallszahl.

Du weißt sicher nicht, was du da sagst.
Für den Blinkefummel reicht irgendwas.

von Tim D. (Gast)


Lesenswert?

Sebastian S. schrieb:
> Schaffst Du es tatsächlich z.B. 10 Blinkedinger exakt zur gleichen Zeit
> einzuschalten?

Sie schalten sich bei Dunkelheit automatisch ein.


michael_ schrieb:
> Du weißt sicher nicht, was du da sagst.
> Für den Blinkefummel reicht irgendwas.

Natürlich reicht "irgendwas", aber das muss erst mal da sein. Ein 
Pseudozufallsgenerator bringt beim Start immer das gleiche Ergebnis.

von Hermann Kokoschka (Gast)


Lesenswert?

Da der ATiny13 mit internem R/C-Clock arbeitet, laufen die Oszillatoren 
ganz von selbst nach kurzer Zeit auseinander.

Ansonsten lass einfach einen ADC-Eingang in der Luft hängen und fang Dir 
so irgendeinen Startwert ein.

von Bauform B. (bauformb)


Lesenswert?

Tim D. schrieb:
> Sie schalten sich bei Dunkelheit automatisch ein.

Was will man mehr? Es muss nur jeder seinen eigenen LDR haben.
Oder STM32G041J6M. Erzeugt im SO-8 Gehäuse auf dem Chip ziemlich echte 
Zufallszahlen.

von Stefan+ (Gast)


Lesenswert?

Hallo,
bedenke aber:
"männliche Glühwürmchen betören die Damen mit Blinken im Gleichtakt"

Gruß

von Nightowl (Gast)


Lesenswert?

Du brauchst garnichts tun. Solange du keine externen Quarze oder 
Oszillatoren verwendest, werden die Teile in wenigen Sekunden bereits 
mit dem bloßen Auge sichtbar asynchron laufen. Nach ein paar Minuten 
dann komplett. Hatte das "Phänomen" neulich mit einigen STM32, die den 
gleichen Code haben und parallel eingeschaltet werden und bei den alten 
AVR-Dingern wird es noch viel schlimmer sein.

von Tim D. (Gast)


Lesenswert?

Hermann Kokoschka schrieb:
> Da der ATiny13 mit internem R/C-Clock arbeitet, laufen die Oszillatoren
> ganz von selbst nach kurzer Zeit auseinander.

Wenn die wirklich so driften, wäre das ja super. Jedenfalls für meine 
Anwendung. Ich probiere es später mal aus.


Stefan+ schrieb:
> Hallo,
> bedenke aber:
> "männliche Glühwürmchen betören die Damen mit Blinken im Gleichtakt"

Ja, das bei meiner Anordnung zeitlich unterschiedliche Aufleuchten 
entspricht nicht dem natürlichen Verhalten von Leuchtkäfern. An meinem 
alten Wohnort konnte ich sie in der Natur beobachten. Vor ein paar 
Wochen habe ich mir noch Videos angesehen. Sie fliegen auch umher und da 
ich meine Platinen nicht fliegen lassen kann, soll wenigstens der 
Eindruck entstehen, dass sie sich bewegen. Das versuche ich durch 
zeitversetztes Aufleuchten sowie durch den Einsatz von zwei LEDs je 
Schaltung. Wenn die Dinger fertig sind, zeige ich Fotos bzw. ein Video 
und die Schaltung mit Code.

von Florian (Gast)


Lesenswert?

Wie jetzt? Weil die Natur keine Glühwürmchen bietet, basteln wir uns 
Elektromüll? Ist es echt schon so weit?
"Erst wenn der letzte Baum gerodet, der letzte Fluss vergiftet, der 
letzte Fisch gefangen ist, werdet ihr merken, dass man Geld nicht essen 
kann."
SCNR

Beitrag #7020852 wurde von einem Moderator gelöscht.
von Peter D. (peda)


Lesenswert?

Man könnte den ADC mit kleiner Referenz betreiben, um das 
Quantisierungsrauschen zu nutzen. Z.B. mit 3 Widerständen Uref = 100mV, 
Uin = 50mV.
Oder nen ATtiny25 nehmen und dessen Temperatur auslesen.

von Jan (Gast)


Lesenswert?

WDT aktivieren. Via ISR die LED toggeln. Fertig. 5 Zeilen. Ich würd das 
in einen attiny4 packen.

von HildeK (Gast)


Lesenswert?

Tim D. schrieb:
> Wenn die wirklich so driften, wäre das ja super. Jedenfalls für meine
> Anwendung.

Nicht nur das. Wenn jedes 'Glühwürmchen' sich über z.B. einen eigenen 
LDR lichtabhängig einschaltet, wirst du nie ein synchrones Verhalten 
erreichen. Die Bauteiltoleranzen und auch die Ausrichtung des LDR werden 
dafür sorgen, dass das zu deutlich unterschiedlichen Zeiten passiert, 
u.U. im Minutenbereich.

von Jan (Gast)


Lesenswert?

Hmm ok den gibts nicht mehr. Früher gabs die für 25 Cent. Dann halt den 
billigsten, den du finden kannst.

von Tim D. (Gast)


Lesenswert?

HildeK schrieb:
> die Ausrichtung des LDR

Die unterschiedliche Ausrichtung hatte ich gar nicht bedacht. Ich 
probiere es einfach aus.

von Schlaumaier (Gast)


Lesenswert?

hm

Bei den meisten Programmiersprachen kann man RND angeben.

Bei BASCOM  Gibst du ein Bereich an in den die Zufallszahl liegt.

Also zwischen 0 - "deine Wahl"

wartezeit=rnd(50)

Gibt einen Wert von 1 bis 50 aus.

Hier nachzulesen.

https://avrhelp.mcselec.com/index.html?rnd.htm

Wenn du den Wert also in einer Schleife neu berechnen solltest jedes mal 
sollte das mit Sicherheit zufällig genug sein.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag bevor einer meckert.

Ich weiß nicht ob RND bei 0 oder mit 1 als kleinste Zahl ausgibt.

Das machen die Programmiersprachen wie sie Laune haben. Bei vielen 
Basic-Versionen liegt der RND-Wert zwischen 0 und 1. und man muss ihn 
mit den Wunschfaktor mal nehmen und dann integer setzen. Da ist genau 0 
nicht möglich.

von Mario M. (thelonging)


Lesenswert?

Schlaumaier schrieb:
> Nachtrag bevor einer meckert.

Wir meckern trotzdem, weil Du die Problematik nicht verstanden hast. 
Beim Einschalten hat der Seed auf jedem Controller den gleichen Wert, 
weswegen RND immer mit dem selben Wert startet.

von ziege (Gast)


Lesenswert?

Ich meckere jetzt aber doch: Die Natur von Pseudozufallszahlen ist dir 
bekannt? Selber Seed, selbe Zahlen? Wenn jetzt auf jedem µC das selbe 
Programm mit dem selben Seed läuft ist genau nichts erreicht. Hat ja 
auch der OP schon geschrieben...

von Falk B. (falk)


Lesenswert?

Mario M. schrieb:
> Wir meckern trotzdem, weil Du die Problematik nicht verstanden hast.
> Beim Einschalten hat der Seed auf jedem Controller den gleichen Wert,
> weswegen RND immer mit dem selben Wert startet.

Stimmt. In einem Spiel hab ich den Pseudozufallsgenerator immer im 100Hz 
Interrupt mitlaufen. Wenn dann Eingaben kommen und das Spiel beginnt, 
ist der Wert "echt" zufällig, weil der Startzeitpunkt unmöglich auf 10ms 
genau getroffen oder reproduziert werden kann.

von Schlaumaier (Gast)


Lesenswert?

Falk B. schrieb:
> Mario M. schrieb:
>> Wir meckern trotzdem, weil Du die Problematik nicht verstanden hast.
>> Beim Einschalten hat der Seed auf jedem Controller den gleichen Wert,
>> weswegen RND immer mit dem selben Wert startet.

Doch habe ich.

Ich habe nur nicht gewusst das der SEED immer gleich ist. Da mir dieser 
Befehl noch nicht untergekommen ist.

Bei einigen Basic-Dialekten setze ich "Randomize Timer" als Befehl 
davor. Damit wird das was du als SEED bezeichnest , durch den Timer 
zufällig verwusselt.

Im Prinzip das selbe wie FALK macht.

Ist halt alles ein Klimmzug weil es keine Mathematische Unlogik gibt. 
Weshalb Verschlüsselungssystem PI so gern mögen. ;)

von HildeK (Gast)


Lesenswert?

ziege schrieb:
> Wenn jetzt auf jedem µC das selbe
> Programm mit dem selben Seed läuft ist genau nichts erreicht. Hat ja
> auch der OP schon geschrieben...

Ist natürlich so.
Aber er hat auch einen LDR, der Tag und Nacht erkennt. Vor dem 
Abschalten am Morgen kann er ja die nächste generierte Zufallszahl als 
neues Seed zwischenspeichern und dann am nächsten Abend daraus eine 
Zufallsfolge starten. Immer vorausgesetzt, die laufen mit unabhängigem 
Takt (das würde schon reichen) und erst recht mit der 
Tag-/Nacht-Erkennung.

Ich sag mal so: wenn er die Aufgabe hätte, n autonome 
'Glühwürmchen'-Einheiten mit der Tag-/Nacht-Erkennung absolut synchron 
laufen zu lassen, dann hätte er ein Problem!

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Also ich nehme dafür gerne einen in der Luft hängenden ADC Pin, gerne 
den Reset weil der eh übrig ist und den dann noch mehrfach mit der 
Differenz zwischen Watchdog und Main Clock geschoben.

Beitrag #7021148 wurde von einem Moderator gelöscht.
von gkujghkhj.nl (Gast)


Lesenswert?

Um die Zeiten noch "zufälliger" zu machen, kannst Du den 
Watchdog-Oszillator als Systemtakt verwenden. Der streut noch viel 
extremer. Allerdings sind 128 kHz nominal schon ziemlich langsam. Aber 
fürs LED Blinken könnte das noch reichen.

von Patrick C. (pcrom)


Lesenswert?

Als seed kann man auch noch denken an
- Startup Counter in EEPROM *1
- Wert von OSCCAL
- Alle benuztte und unbenutzte ADC kanaele
Vorzugsweise combination von diese und alle genennte seed-Quellen

*1 : Beim Programmieren kann man bewusst jeden Prozessor einen anderen 
Startup Counter geben durch mehrmals ein/ausschalten

Patrick aus die Niederlaende

von H. H. (Gast)


Lesenswert?

HildeK schrieb:
> Aber er hat auch einen LDR, der Tag und Nacht erkennt.

Und durch die Toleranz starten die Dinger eh alle zu verschiedenen 
Zeiten.

von Schlaumaier (Gast)


Lesenswert?

freitag ist frei schrieb im Beitrag #7021148:
> Warum kannst du die Zufallszahl bei den paar Dingern nicht "hart" in den
> Quellcode hauen?

Weil die Zufallszahl immer auf einer Berechnung einer Grundlage Basiert. 
Ist die Grundlage gleich ist es die "Zufallszahl" auch.

Wie geschrieben , ES GIBT KEIN MATHEMATISCHEN ZUFALL.

Die einfachste Lösung ist (bei Arduinos z.b. weil die kleinen 
Flash-Speicher haben) die letzte Zufallszahl in den Flash zu schreiben, 
und die beim Neustart als neue SEED o.s. zu benutzen. Also als Grundlage 
der Berechnung der neuen Zufallszahlen.

von Tim D. (Gast)


Lesenswert?

Jan schrieb:
> WDT aktivieren. Via ISR die LED toggeln. Fertig. 5 Zeilen. Ich würd das
> in einen attiny4 packen.

Das wäre dann ein "ewiger" Blinker.

von Thomas W. (Gast)


Lesenswert?

Moin, -

ein richtig guter Ansatz waere der Einsatz einer Lava-Lampe (siehe z.B. 
Wikipedia). Das Flackern der Lampe kannst Du dann als Seed fuer Deinen 
Pseudo-Zufallzahlen-Generator benutzen (Cloudflare benutzt Lava-Lampen 
https://www.cloudflare.com/learning/ssl/lava-lamp-encryption/)

Gruesse

Th.

P.S.: Wie Du das mit Deinem Gluehwuermchen verheiratest -> groesseres 
Projekt

von LostInMusic (Gast)


Lesenswert?

>ein richtig guter Ansatz waere der Einsatz einer Lava-Lampe

Absolut! Man nehme eine grüne Lampe, lackiere sie komplett schwarz und 
kratze ein kleines Loch frei. Ergibt ins Gebüsch gestellt die perfekte 
Illusion.

von freitag ist frei (Gast)


Lesenswert?

Schlaumaier schrieb:
> Ist die Grundlage gleich ist es die "Zufallszahl" auch.

Würfel kaufen.

@TE: Wie soll das Konstrukt eigentlich gleichzeitig eingeschaltet 
werden, wenn das batteriebetriebene und voneinander unabhängige 
Einheiten sind?

Schaltest du die manuell ein?
→ Verzögerung automatisch vorhanden
Laufen die einfach durch und gehen nach x Stunden aus/an?
→ Verzögerung durch ungenauen internen Takt nach etwas Laufzeit 
vorhanden
Steuerst du das über einen LDR?
→ Verzögerung durch LDR-Toleranzen, ADC-Rauschen, bewegliche 
reflektierende Blätter etc. vorhanden

von michael_ (Gast)


Lesenswert?

freitag ist frei schrieb im Beitrag #7021148:
> Warum kannst du die Zufallszahl bei den paar Dingern nicht "hart" in den
> Quellcode hauen?

Oder einen mehrfachen DIP-Schalter am Anfang abfragen.
Oder verschiedene Quarze einsetzen.

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.