Forum: Mikrocontroller und Digitale Elektronik Speicheroszi - selber bauen ??


von Andreas Kutschbach (Gast)


Lesenswert?

Hallo Programmierer und Bastler,
Was haltet ihr davon :

ich habe in letzter Zeit ein dringendes Verlangen
nach einem Oszi. Da die Teile aber teuer sind und
schon fertig aufgebaut [ :-) ] möchte ich mir ein
ganz einfaches langsames Speicheroszi selber bauen.

Dazu braucht es nicht viel. Der Schaultungsaufwand
wär minimal und der Preis unter 10 Euro. Ich denke mir das so:

ein günstiger Prozi (zB. Mega8) mit ADC soll mir
so etwa 400 Werte in voller Geschwindigkeit mit 8 Bit
sampeln. Diese Werte werden im Prozi zwischengespeichert
und nachdem alle 400 Werte angekommen sind soll er die
Werte via Uart an meinen PC weitergeben. Dort werden diese
dann zb.in Excel automatisch dargestellt. Nach der Datenübergabe
an den PC fängt der µC von vorn an.

Die Frage ist, wie schnell schafft das der Prozi ?

* Ich gehe von 16 MHz aus.
* Der ADC schafft mit 8 Bit 200kS/s
  (das sampling soll free-running sein)
* Ich zeichne somit 0,002 s lang auf
  (entsprechned länger für langsamere Sample-Raten,
   welche ich über irgendwelche Taster wählen können muss)

Sind 200kS/s realistisch ? Wenn ja, wie weit kann ich noch
gehen, wenn ich zB. einen externen ADC mit zB. 500kS/s nehme ?
Dann kommt doch der Prozi mit dem Einlesen gar nicht mehr
hinterher, oder ? Gibt es da eine Möglichkeit, die Werte
in ein SRAM-Baustein oder so zu schreiben und die
dann ganz ruhig mit dem µC auszulesen ??


Jeder Vorschlag oder Kommentar hierzu könnte hilfreich sein.
Es ist ja nur ein Hobbyprojekt und kann auch wackelig sein.

von Sebastian Wille (Gast)


Lesenswert?

Hi,

externer SRAM geht runter bis zu 15ns.

Sebastian

von Markus Kaufmann (Gast)


Lesenswert?

Hallo Andreas,

Dir sollte erstmal klar sein, daß man für eine Schwingung mindestens 10
Samples braucht, d.h. bei 200kSPS kannst Du maximal bis 20kHz messen.
Wobei mir nicht wirklich klar ist, wie schnell der interne ADC ist. Die
200kHz sind der Arbeitstakt des ADCs, er braucht 13 Takte für die
Konvertierung, das ergibt die angegebenen 15kSPS bei 10 Bit Auflösung.
Bei höherem Takt sinkt die Auflösung, es ist aber nicht angegeben um
wieviel.

Prinzipiell würde ich einen externen A/D-WAndler nehmen. Der TDA8703
ist relativ günstig und macht 40MSPS. Die Werte kannst Du dann mit ein
paar MHz ins interne RAM einlesen (einfache Lösung) oder mit 13MHz in
externes RAM (60ns RAM ist relativ günstig herzukriegen)  oder 40MHz in
externes RAM (25ns RAM bekommt man quasi umsonst von alten 486er
Mainboards). Dazu brauchst Du noch einen Adressgenerator (z.B.
Zähler-ICs, gibts bis 200MHz) oder ein CPLD (schnell, elegante Lösung,
aber vermutlich viel zu aufwendig für Dich).

Für den Anfang würde ich Dir die Lösung ohne externes RAM empfehlen,
das macht die Sache sehr viel einfacher.

Wie schnell Du konkret auslesen kannst kann ich nicht genau sagen. Du
brauchst eine Schleife, die den Wert einliest, evtl. dann die neue
Konvertierung startet (der externe ADC braucht ja auch einen Takt), das
gelesene Byte in den Speicher schreibt, den Speicherpointer erhöht und
überprüft, ob der Speicher schon voll ist. Die Geschwindigkeit dieser
Schleife bestimmt, wie schnell Du die Daten einlesen kannst. So aus dem
Stehgreif würde ich mal auf 1-2MSPS tippen.

Markus

von Ralf (Gast)


Lesenswert?

Hallo,

wenn du sowieso nur mit 200kS/s abtasten willst und wie oben schon
gesagt damit nur 20kHz darstellen kannst, könntest Du doch auch die
Soundkarte verwenden. Es gibt glaube ich eine ganze Menge Infos dazu im
Netz.

Viele Grüße,

Ralf

von Peter (Gast)


Lesenswert?

Hallo

Such mal nach Oszifox im Internet, das ist zwar kein richtiges
Oszilloskop, aber für meine Hobbybastelei hat es bisher gereicht, und
es ist günstiger als ein "echtes" Oszilloskop.

von Markus Kaufmann (Gast)


Lesenswert?

Ralf:
Wenn man mit der Soundkarte arbeitet, dann kann man nur mit ca. 44kSPS
(je nach Modell) Abtasten und erhält dann eine nutzbare Bandbreite von
4kHz.

Markus

von Tim (Gast)


Lesenswert?

hier ein Lösungsansatz mit ADC TDA8703 und PC (LPT-Port) als
Schnittstelle

http://forum.electronicwerkstatt.de/phpBB/viewtopic.php?topic=5080&forum=6


Gruß

Tim

von Rainer (Gast)


Lesenswert?

Sollte frei nach Shannons Abtasttheorem eine Sampling-Rate von 200kS/s
nicht für ein Signal mit maximaler Frequenz von 100kHz ausreichen?
Abtastfrequenz >= 2 * max. Signalfrequenz, oder?!

von Matthias (Gast)


Lesenswert?

Hi

für ein reines Sinussignal (fast) ja. Das Gleichheitszeichen muß weg.
Für alles andere: Nein.

Matthias

von Rainer (Gast)


Lesenswert?

OK, verstehe :)

von Markus Kaufmann (Gast)


Lesenswert?

Hallo Rainer,

Es geht dabei um zweierlei:
a) Nach Shannon muß die Abtastrate min. 2*f_max sein, um die Frequenz
restaurieren zu können. Die Wellenform wird dabei allerdings noch nicht
restauriert! Stell Dir mal vor, die Abtastfrequenz sei doppelt so hoch
wie die Frequenz des Sinussignals, die Amplitude des Signals ist +-1.

Versuch 1:
Die 1. Messung geht von 0-180°, d.h. das Signal beginnt bei 0, steigt
auf +1 und sinkt dann wieder auf 0. Im Mittelwert sind das 0,64. Bei
der 2. Messung gehts von 180°-360°, das ergibt diesmal im Mittel -0,64.


Versuch 2:
Gleiches Signal, aber diesmal beginnt die Messung etwas später. Und
zwar genau um 90° später.
Die 1. Messung erfolgt dabei von 90°-270° (Start also bei +1, Ende bei
-1, Ergibt im Mittel 0), die 2. Messung geht dann von 270° bis 450°
(Start also bei -1, Ende bei +1, Ergibt im Mittel 0). Man bekommt eine
Nulllinie, obwohl sehr wohl ein Signal anliegt.

Beim ersten Versuch ist die gemesene Amplitude falsch (36% Meßfehler),
beim zweiten Versuch bekommt man gar keine Werte. Man sieht sofort, daß
man damit nicht arbeiten kann.

An der Stelle könnte man einwerfen, daß die Abtastrate natürlich nicht
genau 2*f_max sein darf, sondern darüber liegen muß. Aber zum einen
macht es ja nicht wirklich einen Unterschied, ob ich nun ein zu
messendes Signal mit 10kHz habe oder eines mit 9,99999999kHz, zum
anderen ergibt sich hier der nächste häßliche Effekt: Das Meßergebnis
schwankt zwischen den Werten von Versuch 1+2 hin und her. Wenn ich also
z.B. einen Sinus mit 9,9kHz mit 20kSPS abtaste, dann kommen als
Meßwerte ungefähr (nicht gerechnet) folgende Werte raus: +0,64, -0,64,
+0,6, -0,6, +0,55, -0,55, ... usw. bis 0 und dann steigt das langsam
wieder. Jetzt scheint also auch noch die Amplitude zu schwanken. Man
mißt totalen Unsinn.

b) Man braucht einen Filter, der die unerlaubt hohen Frequenzanteile
rausfiltert. Wenn man nun bei 20kSPS ein Rechtecksignal mit 9kHz hat,
dann hat dieses eben Oberwellen bei 27kHz, 54kHz, ...
Diese werden dann vom Filter weggefiltert, so daß das Rechteck dann
eher wie ein Sinus aussieht.

Markus

von Reinhard (Gast)


Lesenswert?

Hi!

Wäre es theoretisch möglich, mehrere ADCs "parallel" zu schalten und
deren CLK verzögert zu takten, um so die Sampling-Rate zu erhöhen?
Jeder ADC bräuchte wohl ein eigenes RAM...oder ist SRAM schnell genug,
um alle Daten aufzunehmen? Hab mir nämlich über die Timings noch keine
Gedanken gemacht.

Ich denke, ein anderer Ansatz wäre, bei periodischen Signalen die Zeit,
die zwischen Trigger und Beginnn der Abtastung vergeht, variabel zu
machen, um so mehr Abtastpunkte zu erhalten.

mfg
Reinhard

von Markus Kaufmann (Gast)


Lesenswert?

Hallo Reinhard,

ja, das geht im Prinzip.

Probleme:

a) Die Samplezeit muß kurz genug sein, d.h. wenn Du z.B. zwei
A/D-Wandler mit 1MSPS hast, dann nutzt es Dir nichts, wenn beide das
Meßsignal 1µs lang abtasten. Dann würde ja der erste von 0-1µs messen
und der zweite von 0,5-1,5µs. Damit hättest Du ja nichts gewonnen. Du
brauchst A/D-Wandler, bei denen die Samplezeit kürzer als die
Wandlungszeit ist. Wenn der A/D-Wandler 1MSPS macht, dann braucht er
für eine Wandlung 1µs. Wenn die Samplezeit bei 0,5µs liegt, dann kannst
Du zwei A/D-Wandler benutzen die abwechselnd arbeiten.

b) Genauigkeit. Kein A/D-Wandler ist ganz genau. Sind die beiden
A/D-Wandler aber verschieden genau, dann wechseln sich die Fehler beim
Ergebnis ab. Hat der Wandlertyp z.B. eine Genauigkeit von +-1% und der
erste Wandler ist gerade bei +1% und der andere bei -1%, dann schwankt
der gemessene Wert im Ergebnis von Messung zu Messung immer um 2%.
Völlig vermeiden läßt sich sowas wohl nicht, man sollte dabei wohl
darauf achten, daß man zwei identische Typen möglichst aus der gleichen
Charge nimmt und der Schaltungsaufbau möglichst symetrisch für die
beiden Wandler ist.

Zur Geschwindigkeit von A/D-Wandlern und SRAM:
Wenn man sich mal auf den Seiten der A/D-Wandlerhersteller so umschaut,
dann kann man ganz schnell ins träumen kommen. Ein Blick auf die Preise
holt einen dann recht unsaft wieder in die Realität zurück. Ähnlich ist
es bei SRAM. Man könnte als Speicher z.B. SD-RAM oder DDR-RAM vom PC
nehmen. Sehr schnell, sehr groß, ziemlich billig. Aber wenn man ein
DDR-RAM voll ausnutzen will, dann braucht man ein CPLD/FPGA mit sehr
vielen Pins (200+), eine vierlagige Mulitlayer-Platine (wegen Masse-
und Versorgungsplane) und außerdem eine gesunde Portion Erfahrung im
Layoutdesign bei diesen Frequenzen...

Markus

von Reinhard (Gast)


Lesenswert?

Hi Markus!

Danke für deine Info! Werd mich - falls ich dazu komme - in nächster
Zeit ein wenig mit diesem Thema beschäftigen...mal schaun, was
rauskommt....

mfg
Reinhard

von Andreas Kutschbach (Gast)


Lesenswert?

@Ralf
BVezüglich Soundkarte: Der Tip ist nicht soo schlecht. Ich
habe mir gleich mal "Oszi für Win" und weitere Shareware-Tools
runtergeladen. Prinzipiell ist die Sache ganz gut, zumal auch
ein FFT-Programm dabei ist mit variablem Sweep usw.

Die Sache hat aber auch einige Nachteile: Der AD-Wandler
der Soundkarte (ich habe eine Creative, welche zu den Rausch-
armsten günstigen Modellen gehört) hat eine Eingangsimpedanz jenseits
von gut und böse (unter 20KOhm). Das läßt sich mit einer Vorschaltung
korrigieren (Spannungsfolger). Das Rauschen macht sich bisher nicht
bemerkbar.

Des Weiteren sind die mir bekannten soundkarten ac-gekoppelt,
und ich kann somit keine Gleichanteile messen, selbst bei
sehr guten Rechtecksignalen wird das deutlich :-(
Lässt sich da was machen ?? Vielleicht kann mir jemand sagen,
ob es einen Eingangskondensator gibt, den man mal brücken könnte ?

Dann gibts das Problem der Absolutwerte. Die sind nämlich nicht
ermittelbar. Ich könnte mir da höchstens eine Referenz mit einem
mir bekannten Sinussignal vorstellen. Aber durch die stark begrenzte
Bandbreite ist die jeweilige Freqenz von großer Wichtigkeit, da
mir der Eingangsverstärker eine kräftige Dämpfung einbringt.

Alles in allem ist das mit den Soundkarten schon machbar, aber
nur zum Schauen, nicht zum Messen. Es sei denn, die AC-Kopplung
läßt sich unterbinden.

Wer kann da helfen ??

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.