Autor |
Rausch"generator" für 5V Betriebsspannung==> möglich? Suche nach: generator (3191) |
|
|
|
|
BID = 433562
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
|
Hui, guckt mal auf das Bild im Anhang.
Der AVR hatte heute etwas Zeit und hat deshalb 4 Millionen ADC-Werte eingelesen
Im Anhang das Diagramm.
Den Aufbau (Steckbrett, AVR auf Platine) hab ich in eine Keksdose von Mutti verfrachtet und diese mit GND verbunden.
Was mir hier auffällt ist, dass diese "übergeordnete" Schwingung etwas dezimiert ist, sie ist nicht mehr so gut sichtbar wie in den zwei vorigen Bildern (dieser "Bogen", den die ganze Kurve machte).
Dafür sind die Peaks mit einer Erstaunlichen regelmässigkeit vorhanden...Es lässt sich sogar ein fast regelmässiges Muster beobachten, nach einem positiven Peak fällt es ab und steigt dann wieder... Ich find das irgendwie eindrücklich... Wie kann das denn so regelmässig sein
Werde dann bei Zeiten noch nach einem besseren OpAmp suchen.
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
[ Diese Nachricht wurde geändert von: Steppenwolf am 31 Mai 2007 18:42 ] |
|
BID = 433760
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| Wie kann das denn so regelmässig sein | Typischer Linearitätsfehler des ADC.
Möglicherweise wird der Fehler dadurch hervorgerufen, daß der µC stets zu einem bestimmte Zeitpunkt nach dem StartConversion, wenn im SAR das Bit3 zur Entscheidung ansteht, einen Störimpuls auslöst, indem er an einer der Ausgangsleitungen fiddelt.
Auch interne Umschaltvorgänge kommen dafür in Frage. Bei einigen µC gibt es deshalb spezielle Betriebsmodi, bei denen der Prozessor angehalten wird, bis die AD-Wandlung beendet ist.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
[ Diese Nachricht wurde geändert von: perl am 1 Jun 2007 15:38 ] |
|
BID = 433775
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hmm, wieso treten denn diese Fehler nur bei bestimmten Pegeln auf? Es ist ja mehrmals das Gleiche nacheinander und nicht eine "globale" Abweichunge o.Ä.
Was heisst das jetzt im Konkreten? (dieser Linearitätsfehler)?
Wie soll ich mir das vorstellen? Anstelle des real anliegenden Wertes von z.B. 123 wird 120 vom ADC gemessen, oder wie muss man das sehen?
Wie kann ich denn nun rausfinden, wie perfekt dieser Generator ist, sprich, ob noch irgendwo was überlagert ist o.Ä., wenn mir der ADC das Ganze "versaut"...
Herzlichen Gruss
Mario
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 433783
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| Wie soll ich mir das vorstellen? |
Das im n-Bit-ADC verwendete SAR benötigt n-Vergleiche bis das Ergebnis feststeht.
Angefangen wird stets mit dem MSB, indem z.B. beim 8-Bit-Wandler das Bit 7 eines DAC gesetzt wird und dann gefragt wird: Ist der DAC-Output minus Messwert > 0?
Falls ja, bleibt im DAC das Bit7 gesetzt, sonst wird es zurückgesetzt.
Anschliessend wird Bit6 getestet usw., bis nach acht Vergleichen das Ergebnis feststeht.
Das ist nur das Prinzip. Im schaltungstechnischen Detail kann das anders gelöst sein.
Wenn der µC zu der Zeit, wenn Bit3 (Wertigkeit = 8 ) getestet wird, einen Störimpuls produziert, kann das Ergebnis dieses Vergleichs falsch ausfallen, und im Endeffekt erhält man solche oder ähnliche (z.B. sägezahnförmige) Störungen, die sich im Abstand von 8 wiederholen.
Zitat :
| Wie kann ich denn nun rausfinden, wie perfekt dieser Generator ist, sprich, ob noch irgendwo was überlagert |
Sorge dafür, daß der µC möglichst nichts mehr tut, solange die Umwandlung läuft.
Insbesondere keine I/O-Operationen. Ein bischen rechnen stört meist nicht so sehr.
Am besten ist es den µC sofort nach dem StartConversion-Befehl eine Sleep-Anweisung zu geben und ihn später durch den EndOfConversion-Interrupt wieder aufzuwecken.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 433785
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Ok, dann programmier ich das Ganze mal etwas um (Sleep)
Werde berichten.
Vielen Dank für den Tipp!
Gruss
Mario
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434199
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hmhm... ich sags mal so:
http://www.youtube.com/watch?v=Fo4SblJ_SnU
Hab jetzt den ADC neu programmiert. Er läuft nicht frei, löst mit 8 Bit auf, hat als Referenz die internen 5V und es wird der ADC noise reduction mode gebraucht und an AREF hängen 100nF gegen GND.
Zum starten der Konversion wird in diesen Sleep-Mode gewechselt, danach wacht er durch den ADC-completion-Interrupt wieder auf.
Das Bild im Anhang zeigt eine Messung mit vier Millionen Konversionen..
Wieso denn das plötzlich?? Sieht mir wie ne Glockenkurve aus, nur halt zackig.
Hardwareseitig ist alles gleich, am Oszi schaut das Rauschen wie vorhin aus. Die Keksdose als Abschirmung des Steckbrett-Aufbaus war nicht in Verwendung. Die Samplingfrequenz für den ADC liegt bei etwa 750kHz. (ist das der Fehler?)
Hier mal der verwendete Code:(Bascom)
Code : |
On Adc Adcinterrupt
Ddrc.1 = 0 ' Kanal 1
Admux = &B01100001 ' Referenz: 5V. 8 Bit. Quelle: ADC1
Adcsra = &B10001011 ' ADC ein, noch nicht starten, nicht freilaufend, int. 1, Teiler: 8
' Sleep:
Mcucr = &B10010000
Sreg.7 = 1
Do
!Sleep 'startet automatisch den ADC
If I = 4000000 Then
For B = 1 To 258
Print Stat(b)
Next B
I = 0
End
End If
Loop
Adcinterrupt: 'nach einer Messung
Wert = Adch
Incr Stat(wert)
Incr I
Return |
|
Irgendwie unterhaltsam
Herzlichen Gruss
Mario
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434234
Jornbyte Moderator
Beiträge: 7178
|
Du sartest Messreihen und verwendest Bascom. Das kann nur schief gehen, da du keine Ahnung hast was der Compiler in den µC bruzelt. Mache mal paar Test mit in ASM geschriebenen Programm.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 434238
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hm, inwiefern meinst du das jetzt? Das "Kritische" ist ja nicht über Bascom-Befehle gelöst, nur die Variablendeklarationen und Abfragen...
Wo meinst du, könnten "werteverändernde" Unterschiede auftreten, im Bereich des Speicherns oder im Bereich der "Benützung der Hardware von Bascom-Seite"?
Und ASM... au weia... mal sehen, was sich machen lässt.
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434241
Jornbyte Moderator
Beiträge: 7178
|
Zitat :
| ...im Bereich der "Benützung der Hardware von Bascom-Seite"
|
Genau da.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 434244
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hmm... ich versteh trotzdem nicht, wo dann an den Werten des ADC wegen Bascom rumgeruckelt werden sollte...
Bei der Übergabe des ADC-Werteregisters in die ominöse Bascom-Variable?
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434255
Jornbyte Moderator
Beiträge: 7178
|
Perl hat dir ja einiges geschrieben, was beachtet werden muss.
Nun würde ich gern von dir wissen, in welchem Modus der ADC arbeitet?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 434261
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Die Konversationen möchte ich verbessern, indem der AVR während der Konversation in den Sleep-Modus geht, er schaltet die CPU ab.
Durch den !Sleep-Befehl wird dieser Schlafzustand aufgerufen und gleichzeitig eine ADC-Konversation gestartet. Sobald er fertig ist, wird der AVR mit dem Interrupt wieder aufgeweckt und macht weiter. Das hat Perl weiter oben angesprochen.
Was meinst du mit "in welchem Modus"? Er läuft nicht frei, sprich, er wandelt nicht ständig Werte um, die dann sehr schnell abrufbar sind, sondern startet erst auf ausdrücklichen Befehl eine Konversation.
Oder was meinst du?
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434263
Jornbyte Moderator
Beiträge: 7178
|
Zitat :
| Was meinst du mit "in welchem Modus"? Er läuft nicht frei, sprich, er wandelt nicht ständig Werte um, die dann sehr schnell abrufbar sind, sondern startet erst auf ausdrücklichen Befehl eine Konversation.
|
Nur genau das macht er nicht unter Bascom. Lerne ASM und Analysiere mal den Code vom Bascom. Da wird dir schnell ein Licht aufgehen.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 434266
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Wie oben geschrieben, hab ich den ADC ja gar nicht über Bascom konfiguriert, sondern direkt die einzelen Register gesetzt, siehe mein Codeauszug... Die Bascom-Befehle werden für den ADC nie benutzt. Auch die Anweisung zum Starten der Konversation (= in den Sleep gehen) kommt nicht von Bascom.
Das Einzige, wo Bascom ADC-technisch die Finger im Spiel hat ist bei der Übernahme des ADC-Wertes aus dem Register in die Variable...
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 434272
Jornbyte Moderator
Beiträge: 7178
|
Das habe ich mir angesehen, nur frage ich mich jetzt, warum du den ADCL nicht liest? Und nebenbei, der Single Modus währe die bessere Wahl.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|