mikrocontroller.net

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


Autor: Clemens Helfmeier (sum)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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).

Autor: Christoph H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Clemens,

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

Gruss,
Christoph

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
steht doch da:
"...Single Shot mit F_CPU/3..."

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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€.

Autor: Paul Baumann (Gast)
Datum:

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

MfG Paul

Autor: Christoph H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: alfsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
billiger comp: lm319 , 80ns, 30 ct bei rei.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christoph

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

Braucht genau 3 Takte

Autor: Christoph H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin #### (martin-)
Datum:

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

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin #### (martin-)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Clemens Helfmeier (sum)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.