Hallo,
ich habe mit einem LM393 den genial einfachen Rauschgenerator aus Julien
Thomas' XR232USB (USB-Zufallsgenerator) nachgebaut, siehe Anhang. Nun
gibt es in meinem Controller (PIC16F1719) schon zwei Komparatoren, die
ich gerne dafür nutzen würde. Aber der gleiche Aufbau mit den internen
Komparatoren des PIC gibt nur eine niederfrequente Schwingung am ersten
und Stille am zweiten Komparator. Die LM393-Schaltung dagegen läuft
schon ohne Puffer-Stufe stabil, man kann z.B. einen kleinen Piezo an den
Ausgang des ersten Komparators hängen und direkt das Rauschen hören.
Ich habe die Schaltung mit zwei PICs aufgebaut, bei beiden ist das
gleiche Knattern zu hören. Natürlich sind Filter und Hysterese
abgeschaltet, trotzdem verhalten sich die Komparatoren so, als hätten
sie eine. Durch Variation der Widerstände lässt sich die
Knatter-Frequenz zu einem Fiepen steigern, lange Kabel führen manchmal
zu sogar einer gewissen Zufälligkeit, aber so richtig rauschen tut es
nicht.
Sind die internen Komparatoren im PIC grundsätzlich anders als ein
LM393?
Der 1. Komparator wird als analoger Verstärker betrieben. Das ist bei
den meisten Komparatoren nicht definiert. Wenn der Komparator im PIC
eine interne Hysterese hat (was sehr wahrscheinlich ist), wird die
Schaltung um den 1. Komparator zu einem Oszillator mit mehr oder weniger
definierter Frequenz (ca. 1/ (100 nF*220 K) * Vcc/Hysterese ).
Ja, so scheint es. Die Hysterese ist aber extra anschaltbar, daher würde
ich davon ausgehen, dass sie auch wirklich aus ist, wenn das
entsprechende Bit nicht gesetzt ist. Im Datenblatt ist die Hysterese
auch nur für den angeschalteten Fall angegeben.
Wenn ich die 100 nF vom ersten Komparator abklemme und dann den Ausgang
berühre, gibt es für ca. 1/2 Sekunde richtiges Rauschen, siehe Bild.
Vielleicht kann man es so einstellen, dass es dauerhauft bleibt.
Pekka schrieb:> Sind die internen Komparatoren im PIC grundsätzlich anders als ein> LM393?
Vermutlich.
Der LM393 kann jedenfalls nur negative Rail am Eingang.
Die erste Stufe arbeitet als irgendwas, nur nicht als Komparator. Die
Stromquelle und der Stromspiegel am +Eingang sind komplett gesperrt,
wenn er auf +VCC liegt.
In MCs sind die Komparatoren dagegen oftmals R2R.
Bei einen R2R Comparator ist die Funktion der 1. Stufe undefiniert.
Hat diese einen positiven Offset, bleibt der Ausgang konstant auf VCC,
denn der -Eingang kann ja nicht höher als VCC gehen. Da rauscht dann
definitiv nichts.
Ich vermute mal, die Schaltung ist rein zufällig entstanden. Der Autor
hat nicht dran gedacht, daß der LM393 nicht R2R ist und ihn
versehentlich außerhalb des Common Mode Bereichs betrieben.
Der LM393 arbeitet hier nur mit der (-) Seite seines
Differenzverstärkers, und zwar bei Vcc - 1,xV, haarscharf an der
Spannungsgrenze der Eingangstransistoren entlang. D.h. der normalerweise
mit konstantem Summenstrom arbeitende Differenzverstärker ist hier
weitgehend abgedreht und arbeitet mit weit niedrigerem Strom.
Das dies ein völlig anderes Verhalten des ICs zur Folge haben kann, als
im normalen Arbeitsbereich, dürfte nicht überraschen. Kann schon sein,
dass man mit einem anderen Komparator ohne Signalrückkopplung ebenfalls
ein nichtdeterministisches Verhalten herbeizaubern kann, aber es ist
nicht gewährleistet.
Wenn man die 10k zwischen Ausgang und VCC überbrückt, rauscht es. Aber
ob es gut ist, den Ausgang direkt mit VCC zu verbinden...
Peter Dannegger schrieb:> Ich vermute mal, die Schaltung ist rein zufällig entstanden. Der Autor> hat nicht dran gedacht, daß der LM393 nicht R2R ist und ihn> versehentlich außerhalb des Common Mode Bereichs betrieben.
Das Projekt ist hier beschrieben: http://www.jtxp.org/tech/xr232usb.htm
Ich habe den Rauschgenerator-Teil nachgebaut und ein bisschen
rumprobiert, ohne wirklich nachzuvollziehen, wie er funktioniert.
Ich finde den Eingang an VCC auch komisch. Ich würde eigentlich denken,
dass man einen Spannungsteiler aufbaut, so wie am 2. Komparator. Diese
Spannung auf beide Eingänge, über jeweils einen weiteren Widerstand.
Dann den Ausgang über einen großen Widerstand an den negativen Eingang
und hoffen dass es nicht oszilliert, sondern rauscht. Werds mal
ausprobieren.
Es funktioniert mit besagtem Spannungsteiler (4k7 und nochmal 220k vor
jedem Eingang), wenn der Ausgang ohne R an den negativen Eingang
angeschlossen und mit 100 nF gepuffert ist. Das Rauschen ist lauter als
mit dem LM393, allerdings ist das ganze System störanfällig, z.B. auch
durch Last an der Puffer-Stufe. Vielleicht geht es ja noch stabiler mit
anderen Paramtern.
Wäre doch schön, einen analogen Rauschgenerator und echten Zufall direkt
im µC zu haben.
Sorry, dass ich mich hier die ganze Zeit öffentlich mit mir selbst
unterhalte. Mit 100 nF am negativen Eingang läuft es jetzt stabil.
Ich habe keinen Entropie-Test gemacht, aber anhören tut es sich nach
sauberem weißen Rauschen (brauche es eh nur für Audio).
Ist das jetzt besser als den + Eingang an VCC? Ich habe beide Varianten
nochmal angehängt, zur besseren Übersicht ohne die Pufferstufe.
Ich muss mich korrigieren: Der Plan in pic_comparator_noise_3.png stimmt
nicht. Die 10k (wie in xr232_noise.png ganz oben zu sehen) müssen
gekappt werden und die 220k überbrückt. Allerdings gibt dieser Aufbau
gerade ein unschön knisterndes Rauschen.
@ Terotec:
pic_comparator_noise_2.png ist der komplette Plan für den
Rauschgenerator, man kann an den Ausgang z.B. einen Piezo hängen und
sich das Rauschen anhören. Je nachdem, wie man das Signal verwendet,
schaltet man noch die Pufferstufe dahinter oder nicht.
Mit einem USB-fähigen PIC könnte man in der Tat den USB-TRNG mit nur
einem Chip bauen. Den Ausgang der Pufferstufe würde ich dann direkt an
die Datenleitung vom SPI legen, so kann man immer gleich ein ganzes Byte
lesen.
Auch reizvoll fände ich, das als USB-Audio-Gerät zu realisieren: Man
steckt den Stick an und hat dann einen Audio-Eingang, an dem echtes
Rauschen anliegt.
Was fehlt denn an dem Plan? Die Verdrahtung des Komparators ist zu
sehen, der Rest ist controller- und applikationsspezifisch. Ich habe es
mit einem PIC16F1719 aufgebaut, bei dem ich wegen anderer Funktionen die
Pins umkonfiguriert habe. Plan und Code wäre damit für einen Nachbau
unnötig kompliziert.
Um einen kompletten USB-Rauschgenerator zu bauen / programmieren habe
ich im Moment keine Zeit, aber wenn ich das mal mache, poste ich
natürlich den kompletten Plan und Code.
Ich habe gestern zufällig noch eine andere Variante gefunden, die noch
einfacher und stabiler ist, werde das nachher mal posten.