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).
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
@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
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 ?
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
>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 ?
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
@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.
@Clemens Der MAX903 ist ein guter Kandidat für solche Aktionen. Einen solchen Kollegen habe ich als Eingangsstufe in meinem Frequenzmesser. MfG Paul
>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.
@Christoph Es ist aber so: in r16, PINC st Z+, r16 usw. Braucht genau 3 Takte
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.
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
>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.
Hallo Clemens Ich hätte da eine andere Frage : Wo (bzw. wie) greifst du die Taktfrequenz des Mikrocontrollers ab ?
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
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.