Forum: Mikrocontroller und Digitale Elektronik Speicheroszilloskop mit AVR, 20Mhz Sampling rate


von Clemens H. (sum)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

aus dem Thread

http://www.mikrocontroller.net/forum/read-1-404813.html#new

ist nun ein kleines Projekt entstanden.
Ich habe das ganze mal probehalber auf einer Lochrasterplatine mit
folgenden Komponenten aufgebaut:
1x Mega32,
1x Max232
1x ADS800U
1x Inverter/XOR

Es wird das Taktsignal des AVRs invertiert und dem AD-Wandler
zugeführt. Der UART vom AVR ist zwecks Debug und Input/Output mit dem
Max232 und dem PC verbunden. Nun liefert der AD-Wandler synchron zum
AVR-Takt den Wert der Eingangsspannung und dieser muss nur noch
geeignet eingelesen werden

Im Source gibt es grundsätzlich zwei Vorgehensweisen: 1. Single Shot
mit F_CPU/3 und repititives Zusammensetzten der Kurve mit F_CPU als
Frequenz. Beide Vorgehensweisen haben hier funktioniert und brauchbare
Ergebnisse geliefert.

Es gibt noch keinen guten Trigger-Eingang. Dieser ist beim repitivtiven
Zusammensetzten der Kurve aber von äußerster Wichtigkeit. Die Qualität
des Triggers ist ausschlaggebend für die Güte des gewandelten Signals.

Achja: der Mega32 ist bei mir nur bis 16Mhz ausgeschrieben. Bei 25Mhz
lief er noch einwandfrei (kommunikation mit dem PC), nur das einlesen
des Ports an dem der AD-Wandler hängt, hat nicht funktioniert :(

Bitte lasst mal höhren, was ihr dazu meint.

Clemens

PS: Der Sinn eines Oszilloskops das 10Mhz Bandbreite hat, ist durchaus
umstritten. Allerdings habe ich hier auf dem Tisch auch "nur" ein
15Mhz Gerät zu stehen (analog).

von Christoph H. (Gast)


Lesenswert?

Hallo Clemens,

mit wieviel Megasamples kannst du 1KByte Ram im AVR vollschreiben ?

Gruss,
Christoph

von Benedikt (Gast)


Lesenswert?

steht doch da:
"...Single Shot mit F_CPU/3..."

von Paul Baumann (Gast)


Lesenswert?

Vielleicht geht ein 74HC14 oder ein 74HC244 als Trigger vor dem
Prozessor. Schade ist nur, daß es den Wandler nur mit diesen
kleinen Gehäusen gibt. (Soic und ssop)
Welches Programm hast Du auf dem PC zur Darstellung laufen?

MfG Paul

von Clemens H. (sum)


Lesenswert?

@Paul:
ich hatte noch an eine Art analoge vorbeschaltung gedacht. Zum
Comparator im AVR habe ich leider keine Timing-Angaben gefunden. Diese
sind hier aber besonders wichtig.

Man könnte auch einen anderen ADC nehmen, der in einem größeren Gehäuse
kommt, er braucht halt nur eine Samplerate, die so groß ist wie der
CPU-Takt. Diesen hatte ich zufällig noch da.

Vielleicht hat ja jemand mal lust, eine analoge Vorbeschaltung
auszuarbeiten und als Schaltplan (vorzugsweise Eagle...) hier
einzustellen?

Auf dem PC habe ich derzeit zu laufen:
# baudrate einstellen
picocom -b 19200 -r
# ^a x drücken
# kanal aufbauen
cat /dev/ttyS0 & cat >> /dev/ttyS0
# jetzt per befehl wandlung starten, es kommen alle werte als
dezimalzahlen mit leerstellen zurück, diese nach octave/gnuplot
kopieren und darstellen...

Derzeit noch eine weniger optimale vorgehensweise, da ich noch keine
Erfahrung mit grafischen Oberflächen unter Linux habe.

Clemens

von Benedikt (Gast)


Lesenswert?

Wie macht man eigentlich repititives Zusammensetzten auf dem AVR ?
SBIS ....
RJMP ....
benötigt 3 Takte, der Trigger wird also worst case nach 3 Takten
ausgewertet, was für ein repititives Zusammensetzten unbrauchbar ist,
oder ?

von Clemens H. (sum)


Lesenswert?

Hallo Benedikt,

derzeit mach ich das so, und dann sind es im worst case 3 Takte Fehler,
ja.
Wenn es eine externe (schnelle) Beschaltung gibt, so könnte man die
auch auf den ICP setzen und bei einem Sample das ICR von der aktuellen
Zeit des Counters abziehen und hätte auch einen repräsentativen Wert
mit Fehler 0. Wegen mangelnder Außenbeschaltung hatte ich das
allerdings noch nicht implementiert. Vielleicht sollte ich mal ein
Kabel einlöten ...

Clemens

von Christoph H. (Gast)


Lesenswert?

>steht doch da:
>"...Single Shot mit F_CPU/3..."

Hallo Benedikt,
wahrscheinlich hast Du meine Frage nicht verstanden: Ich will nicht
wissen, wie lange ein Einzelschuss benötigt.

Meine Frage war:
Welche Samplingrate für 1000 Werte ins RAM ?

von Clemens H. (sum)


Lesenswert?

Christoph:
mit beiden Methoden kann man den gesamten RAM füllen. Bei der schnellen
Methode ist allerdings ein zuverlässiger Trigger von äußerster
Wichtigkeit.

Kennt wer einen guten Komparator, der auch zu haben ist und möglichst
schnell ist? Man könnte ja auch eine Differenzsstufe mit schnellen
Transistoren aufbauen, da die Offsetspannung eigentlich nicht
interessiert... Was meint Ihr?

Clemens

von Benedikt (Gast)


Lesenswert?

@Christoph H.

Du scheinst den Begriff Single Shot nicht zu kennen.
Das heißt einfach nur x Werte aufzeichnen und da gilt F_CPU/3.

Mit der anderen sind theoretisch unendlich viel möglich, solange man
die Phase des Sampletaktes und den Samplezeitpunkt fein genug
verschieben kann.

@Clemens
LM311 ist mit 200ns ziemlich schnell, und leicht zu bekommen.
Ansonsten einen LT1016 mit 10ns. Gibts bei Reichelt, kostet aber >5€.

von Paul Baumann (Gast)


Lesenswert?

@Clemens
Der MAX903 ist ein guter Kandidat für solche Aktionen. Einen solchen
Kollegen habe ich als Eingangsstufe in meinem Frequenzmesser.

MfG Paul

von Christoph H. (Gast)


Lesenswert?

>Du scheinst den Begriff Single Shot nicht zu kennen.
>Das heißt einfach nur x Werte aufzeichnen und da gilt F_CPU/3.

Eigentlich frage ich nur, weil ich nicht glaube, dass man die 1K mit
F_CPU/3 füllen kann.

von alfsch (Gast)


Lesenswert?

billiger comp: lm319 , 80ns, 30 ct bei rei.

von Benedikt (Gast)


Lesenswert?

@Christoph

Es ist aber so:
in r16, PINC
st Z+, r16
usw.

Braucht genau 3 Takte

von Christoph H. (Gast)


Lesenswert?

Danke, das war genau was ich gesucht habe.

Meiner Meinung nach gehört der Vollständigkeit wegen erwähnt, dass man
für das Einlesen von 1KB den Code 1000 mal hintereinandergereiht werden
muss. Auf deutsch:

Es werden 4KB Code verbraten.

Insofern ist die Single Shot-Aussage nur von begrenztem Wert.

von Clemens H. (sum)


Lesenswert?

Christoph:
der Wert hängt immer von den verfügbaren Resourcen ab. Wenn man einen
AVR nehmen will, der etwas mehr RAM hat, hat er auch gleich ellen viel
Flash, folglich kann man ruhig 4kByte Flash verbraten für Single shot -
er kostet ja nix, wenn er gebraucht wird und nicht überläuft.


An alle:
Die Komparatoren sind sehr interessant. Ich glaube aber, es ist ein
Layout nötig, bevor man vernünftige Ergebnisse erhalten kann (auf der
Lochrasterplatine bei mir sind schon 8Bit nicht mehr sicher - eher
sowas wie 6-7Bit). Folglich müsste man erstmal ein Layout machen.

Wie bekomme ich die analoge Referenzsspannung für den Komparator? PWM
und RC-Glied wird sich sicher nicht so gut eignen, es sei denn, man hat
am Eingang noch einen variablen Verstärker, der die Signal anhebt, so
dass sie groß im Vergleich zum Ripple des PWMs ist.

Oder man nimmt die "überschüssigen" Pins vom Mega32 und baut sich
einen R2R-DA-Wandler. Kann man dann auch gleich als Generator nutzen
(natürlich nur mit Filter dahinter) :-)

Hat noch wer Ideen?

Clemens

von Benedikt (Gast)


Lesenswert?

>Ich glaube aber, es ist ein Layout nötig, bevor man vernünftige
Ergebnisse erhalten kann (auf der Lochrasterplatine bei mir sind schon
8Bit nicht mehr sicher

Ist alles eine frage vom Aufbau. Gehen tut das problemlos wenn man die
Leitungen ein wenig durchdacht legt.

>PWM und RC-Glied wird sich sicher nicht so gut eignen, es sei denn,
man hat am Eingang noch einen variablen Verstärker, der die Signal
anhebt, so dass sie groß im Vergleich zum Ripple des PWMs ist.

Wenn man das Signal verstärkt, verstärkt sich auch der Ripple.
Wenn man den Tiefpassfilter nur ausreichend dimensioniert, erreicht man
problemlos <1mV Ripple. Das Filter kann ja eine Grenzfrequenz von 1Hz
haben, so schnell verändert man im Normalfall den Triggerpegel nicht.

von Martin #. (martin-)


Lesenswert?

Hallo Clemens
Ich hätte da eine andere Frage : Wo (bzw. wie) greifst du die
Taktfrequenz des Mikrocontrollers ab ?

von Clemens H. (sum)


Lesenswert?

Hallo Martin,

ich habe den Takt des AVRs einfach am XTAL-Ausgang abgegriffen (schau
mal ins Datenblatt, ob 1 oder 2, bin mir grad nicht mehr so sicher).
Dazu muss man allerdings noch die richtige Fuse setzten, damit er den
Ausgang auch mit High-Power treibt. Für meinen ADC musste ich den Takt
auch noch invertieren, damit die Daten beim Einlesezeitpunkt des AVRs
schon anliegen.

Benedikt:
Ich meinte, man müsste das Eingangssignal verstärken, damit der
Komparator nicht eine konstante (Eingangs-)Spannung mit dem Ripple vom
PWM vergleicht.

Schöne Grüße, Clemens

von Martin #. (martin-)


Lesenswert?

Danke für die Antwort Clemens
Also man kann Takt-Signal am AVR abgreifen, ich schau mich dann ich
Datenblatt um.
Ich habe befruchte dass es nur mit externen Oszillator geht.

>Ich meinte, man müsste das Eingangssignal verstärken....
Also wenn ich das ganze richtig verstanden habe:
Du möchtest die Spannung mit der man TriggerLevel reguliert, irgendwie
mit dem µC erzeugen.
Benedikt hat vorgeschlagen mit PWM einen DA-Wandler zu bauen und seine
Oberefrequenz auf 1Hz herabzusetzen.
Du möchtest jetzt (wenn ich es richtig verstehe) das Eingangsignal
verstärken damit Ripple vom DA-Wandler keine Rolle spielt.
So habe ich das verstanden.

Aus meiner Erfahrung soll man das Signal sowieso Fall auf den gleichen
Level bringen wie es für AD-Wandler optimal ist, sprich wenn
Messbereich des Oszilloskops 100mV ist, und AD-Wandler 1V als Maximum
ansieht, soll 100mV am Oszi-Eingang zu 1V am AD-Wandler-Eingang
verstärkt werden. Das hast du dir sicher auch so erdacht.
Nun aber um zu verhindern, dass Ripple auf den Komparator Einfluss
nehmt muss man eine kleine Hysteresis einführen, z.B in dem man ein
1MOhm Widerstand zwischen Plus-Eingang und Ausgang des Komparators
schaltet.
Ich habe mal so eine Trigger-Einheit gebaut und konnte sie nur so zum
Laufen bringen.
Ich hoffe ich habe es verständlich dargelegt (und helfen konnte).

von Clemens H. (sum)


Lesenswert?

Hallo Martin,

ja, man braucht keinen extra Oszillator.

Klaro muss man auch das Eingangssignal verstärken, da hast du Recht.
Dann wird es auch groß gegenüber dem Ripple auf der TriggerSchwelle
sein, und folglich nur noch geringen Einfluss auf den Trigger-Jitter
haben.

Die Komparatoren müssen auch eine Hysterese haben, sonst wird es
warscheinlich Rückkopplungen über die Versorgung geben und zum
"Prellen" kommen.

Clemens

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.