Hallo miteinander,
Zufallszahlen und Computer sind grundsätzlich eine Herausforderung - ein Computer arbeitet immer deterministisch (also vorhersagbar), und Zufall ist das genaue Gegenteil davon.
Zufallszahlengeneratoren in Programmen erzeugen daher normalerweise immer "Pseudozufallszahlen": Sie errechnen aus einem "Seed" (einer Quelle) "verwurstete" Werte, die idealerweise gleichverteilt aus einem gegebenen Intervall stammen. Da das "Verwursten" immer durch einen Algorithmus erfolgt, hängt die Zufälligkeit der Pesudozufallszahl vor allem an dem "Seed". Viele Computer verweden dafür einen Teil der Uhrzeit (Sekundenbruchteile) oder einen anderen, halbwegs schwer vorhersagbaren Input-Wert. Für bestimmte Anwendungen (Verschlüsselungstechnik) ist das immer noch zu schlecht, daher arbeitet man da meist mit analogen Eingabegeräten (z.B. der Mausbewegung des Benutzers) oder mit Hardware, die quasi zufällige Werte "ausspuckt" (z.B. Rauschen), und verwendet diese Daten als "Seed". Dass man anschließend die Zufallswerte mit einem Algorithmus daraus ableitet, liegt in der Regel an der Langsamkeit der "echten" Zufallsquelle (man will ja auch nicht immer mit der Maus herumwackeln).
Beim TX ist das Problem, dass er keine Uhr oder ein festes Eingabe-Device besitzt, aus dem man ein zufälliges "Seed" ableiten könnte. Daher liefert das "Random"-Unterprogramm auch beim Starten immer denselben Wert. Ein Zufallsgenerator sollte besser irgendeinen (möglichst analogen) Sensor (z.B. einen der alten Fotowiderstände) beim Start auslesen - dabei möglichst nur das niederstwertige Bit verwenden. Hat man so Bit für Bit bspw. einen 16-bit-Wert gewonnen, kann man daraus dann mit einem geeigneten Algorithmus eine gleichverteilte Zufallsfolge erzeugen. Oft werden dafür Linear Rückgekoppelte Schieberegister, LFSR (
https://de.wikipedia.org/wiki/LFSR) verwendet - sie sind schnell in Hardware und auch in Software leicht zu programmieren. Die Gleichverteilung kann man mit statistischen Tests prüfen. Wenn ihr keine hohen Anforderungen an die Verteilung und die Geschwindigkeit stellt, dann genügt es auch, den Startwert bspw. zu quadrieren und dann den Rest nach Division durch eine Primzahl als Ausgabe zu verwenden.
Beste Grüße,
Dirk