Das Erzeugen wirklich zufälliger Zahlen auf einem Mikrocontroller ist eine bekannte schwierige Aufgabe.
Eine Möglichkeit besteht darin, zwei verschiedene Uhren zu betreiben und die Zeitverschiebung zwischen ihnen zu messen.
Der PIC16F1783, den ich benutze, hat zwei Uhren. Eine mit einem externen Kristall und dem LFINTOSC, der den Watchdog antreibt.
Gibt es eine Möglichkeit, an den LFINTOSC zu gelangen, während Sie von der externen Kristalluhr aus laufen?
Eine Idee, die ich hatte, war, den Watchdog ablaufen zu lassen und den Wert von TMR2 zu überprüfen, aber es funktioniert nicht, weil TMR2 durch Watchdog-Resets zurückgesetzt wird.
Man könnte einen Zähler in einer engen Schleife in das EEPROM schreiben und den Watchdog ablaufen lassen und dann den Inhalt des EEPROM überprüfen, aber dies scheint sehr unelegant zu sein. Bearbeiten: Es ist viel besser, in den Arbeitsspeicher zu schreiben, wie in einem der Kommentare vorgeschlagen.
Gibt es einen besseren Weg? Ohne externe Schaltkreise und ohne ADC-Rauschen (das möglicherweise nicht immer vorhanden ist)?
Datenblatt: http://ww1.microchip.com/downloads/en/DeviceDoc/40001579E.pdf
Bearbeiten: Ich möchte, dass die Zufallszahl eine GUID generiert, damit mehrere Geräte, die denselben RS485-Bus verwenden, voneinander unterschieden werden können. Meine Idee ist es, etwas Ähnliches wie die 1-Draht-Geräteerkennung zu verwenden. Dazu muss ich jedoch auf verschiedenen Geräten unterschiedliche GUIDs haben, und ich möchte den Aufwand vermeiden, sie mit eindeutigen IDs programmieren zu müssen.