Hi ! Ich hab vor folgendes Projekt zu starten: Eine Art Oszilloskop, dass die Daten direkt an den PC weitergibt (und später noch gleichzeitig auf einem vollgrafik display anzeigt). Ich habe vor das mit einem ATMEGA 16 (16Mhz) (evtl.später einen weiteren zur grafikberechnung fürs display), mit einem USB interface (oder später LAN/RJ45) zu übertragen. Das teil soll 3 kanäle mit je 15 bit haben ( was haltet ihr vom MAX1428? ). Glaubt ihr, dass reicht aus ? Die Daten werden dann auf dem PC durch eine entsprechende software gespeichert und können jederzeit abgerufen und analysiert werden. Was sollte das teil, damit man es gebrauchen kann für ne aktualisierungsrate haben ? und was sollte ich für chips verwenden ? Kennt jemand schon so ein ähnliches projekt ? Also nochmal in kürtze: ich will ein digitales speicheroszi bauen dass eine PC-Schnittstelle hat. Ich bin für jeden tipp dankbar. MfG Axos
15bit halte ich etwas übertrieben. Selbst die teuren Agilent Oszis haben nur 8bit + Bereichsumschaltung was auch ausreicht. Geh lieber mit der Samplerate noch etwas höher. Die Aktualisierungsrate braucht nicht bei 25fps oder höher zu liegen, es reichen 5fps. Wie willst du denn die 450MB/s speichern ?
ich glaub du traust einem avr einiges zu viel zu. er kann die daten weder so schnell darstellen noch wirst du die daten so schnell an einen pc schicken können. selbst bei theoretischen 1 befehl pro sample wäre bei 16mb/s ende. in der praxis wärest du noch m ein vielfaches drunter
hab mal ein Oszi versuchsweise auf einer Steckplatine aufgebaut. Dabei hab ich nen Mega16 verwendet und ein MAX153 als ADC. Die Werte vom ADC hab ich dann im internen RAM des AVR zwischengespeichert (etwa 500 Byte). Dabei bin ich mit der Samplerate nicht weiter als etwa 400 kHz gekommen. Besser ist ein schneller ADC mit direktem Draht zu externem RAM (15ns). Ein Zähler macht die Adressierung und ein Oszillator bestimmt die Abtastrate. Wenn der Speicher voll ist, liest der AVR den Speicher aus und sendet die Daten an den PC. Mal noch ne Frage, weiß jemand, welche Übertragungsrate der UART des AVR mitmacht?
@Matthias H. 400kHz Samplerate ? Mit einem mega8515@16MHz und 64kb SRAM komme ich auf etwa 2MHz Zum UART: Schau doch einfach mal ins Datenblatt...
hast du dabei die Daten über den AVR in den RAM geschrieben? Da würde mich der Code schon interessieren. Kann ja dann nur daran liegen. Oder hat der AVR nur den Takt vorgegeben?
hab mir das Datenblatt noch mal angeschaut und es sieht so aus, als ob die Baudrate jenseits von Gut und Böse einstellbar ist. Dann ist das ja kein Problem? Danke noch mal.
problem sind dann die pcs, die meist nur mit 115k2 baud agieren können... dave
Danke an alle ! Huu....ganz schöner beitragsansturm @Benedikt 8Bit ? des wären dann ja 256 abstufungen. und das bei nem spannungspegel von beispielsweiste TTL wären das 0,019 V/stufe. ich glaub des würd reichen ;) Von welcher aktualisierungsrate sprichst du ? Kannst du mir mal erklähren, wie du auf 450 MB/s kommst ? @Tobi 16mb/s -> am anfang schon aber später kann ich das ja z.B. mit nem anderen controller aufbauen. oder sogar mehrere, die die daten gelichzeitig verarbeiten. @dave 115k2 ?? woher hast deu die zahl ? Sollte das nicht über USB schneller gehen. Kannt da jemand ein geeigneten baustein (evtl. für usb 2.0)? die maximale tehoretische datenübertragungsrate liegt bei usb 2.0 bei 60 Mb/s (natürlich in der praxis weit darunter wegen dem usb host controller und so). man könnte ja, wie bereits gesagt) die daten vom adc direkt in den ram schreiben und dann 2 atmega16 jeweils einen speicherbereich zur verarbetung zuweisen (ATMega16 Nr1. 0.-250. Byte, ATMega16 Nr1. 251.-500. Byte). MfG Axos
wenn du die Daten im RAM zwischenspeicherst, muss die Datenübertragung ja gar nicht mehr so schnell sein. Sind die Daten erstmal im RAM, kann sich der AVR ja theoretisch alle Zeit der Welt nehmen um die Daten zum PC zu übertragen. Wenn er fertig ist startet er dann die nächsten Messungen.
Hi ! @Matthias H. Stimmt ! Ich hab mal n blockdiagramm aus der sache gemacht ! was haltet ihr davon. Verbesserungsvorschläge und Kritik ist erwünscht. Mit was arbeiten eigentlich die high end geräte ? Was fürn cpu takt habed die ?`und haben die ne seperate cpu für die Grafikgenerierung ? Was ist das was an denen sooooooo teuer ist ? MfG Axos
ich denke mal, einen großen Teil des Preises macht die Genauigkeit und die Qualität der Digitalwandlung aus. Wenn man dann irgendwo jenseits der 100 MSPS ist, wird geigneter Speicher und die ganze Adressierung ebenfalls recht teuer. Zum Blockdiagramm: den Zugriff des µC auf den ADC würd ich weglassen. Der wird ja eh nur vom Takt gesteuert. Ich habe vor, für die Ansteuerung von ADC und Speicher einen CPLD zu verwenden. Der bekommt dann vom µC nur noch die Freigabe und vielleicht einen Startwert für den Adresszähler.
@Matthias H wenn du grad auch an so einem projekt dich versuchst wär ja am besten wenn wir in kontakt bleiben würden ! hast du icq ? kannst mir ja per email schicken, wenn du nicht willst dass sie jeder weiss. MfG Axos
Ein Oszilloskop welches auf diese Weise funktioniert war auch in meinem Kopf schon seit längerem in Planung. :-) Wäre es nicht sinnvoll, wenn eine Art Trigger existieren würde. Also die A/D Aufzeichnung beginnt erst wenn der A/D Wert einen bestimmten vom Benutzer festgelegten Wert über bz. unterschreitet. Des weiteren wäre möglicherweise für den RAM ein externer Adresszähler sinvoll, da dieser deutlich schneller zählen könnte als ein AVR der möglicherweise nebenher noch andere Sachen machen muss. Dieser Zähler bräuchte dann aber ebenfalls einen vom Benutzer einstellbaren Takt. All dies spräche sicherlich (wie bereits oben genannt) für einen CPLD. Allerdings habe ich von deren Programmierung und Fähigkeiten (noch) keine Ahnung. PS: 10MSPS (oder besser gleich 20MSPS) wäre das mit der oben genannten Technik realistisch erreichbar?
über den Trigger hab ich mir auch schon den Kopf zerbrochen. Ein Oszi zeigt aber auch Gleichspannung an. Wie soll da der Triggerpunkt festgelegt werden? Wie wäre es wenn man die Aufzeichnung des Signals beliebig startet und länger aufzeichnet, als man darstellen kann. Dann kann man per AVR oder Software einen geeigneten Triggerpunkt suchen und ab da die Kurve darstellen. Oder halt bei Gleichspannung die Linie von Anfang an anzeigen. Als Adresszähler sollte auf alle Fälle was Externes her. Der AVR gibt dann nur den Abtasttakt frei und gibt dem Zähler einen Startwert. Danach bekommt er ne Rückmeldung, wenn der Zähler bei 0 ist.
Die nachträgliche Erkennung hätte zum Nachteil dass seltene, kurze Impulse nicht erfasst werden könnten oder nur zufällig. Gleichspannung würde auch angezeigt werden, wenn der Schwellwert einfach unter der Gleichspannung liegt.
Was ist, wenn auf dieser Gleichspannung noch eine Brummspannung reitet? Sollte da nicht nach der Brummspannung getriggert werden? Wie soll der Schwellwert vorgegeben werden? PWM?
Ich würde an einem PORT des AVR den Trigger Wert als einstellbaren Wert ausgeben. Danach fallen mir zwei Möglichkeiten ein: a (analog): Am PORT befindet sich ein R2R Netzwerk welches eine Analoge Spannung erzeut. Diese wird dann mit einem Komparator direkt mit der zu messenden Spannung des A/D Wandlers verglichen. Sobald die Spannung des R2R Netzwerks die der zu Messenden Spannung über bz. Unterschreitet, fängt der Adresszähler an zu zählen. Anstelle des R2R Netzwerks könnte auch PWM verwendet werden, das müsste dann aber entsprechend gut geglättet werden. b (digital): Der Ausgangswert des PORTS wird mit dem bereits gewandeltem Wert des A/D Wandlers (digital) verglichen. Sobald der eine Wert größer bz. kleiner als der Andere ist, fängt der Adresszähler an zu zählen. Das Starten des Adresszählers kann entweder durch eine Freigabe des Resets oder des Taktes erfolgen. Auf Wunsch kann dann noch ein automatisches Einstellen des Triggers erfolgen, indem nach einer ersten Aufzeichnung in den RAM der AVR die MIN und MAX A/D Werte ermittelt und den Mittelwert automatisch als Trigger nimmt. Wie sieht es eigentlich mit einem weiterem A/D Kanal bei entsprechend halbierter Abtastrate aus? Bei dem A/D Wandler müsste sich entweder der Ausgang hochohming schalten lassen können oder es muss ein RAM mit getrenntem Ein/Ausgang verwendet werden. Schön wäre es wenn sich der Adresszähler, der 8 Bit Vergleicher und Takt Vorteiler zusammen in einem CPLD o.ä. realisieren ließe.
Ich hab mal ne (dumme) Frage: Wieviele MilliSekunden sollte denn die Messung gehen? Also ich denke 100mS sind schon anzustreben... und dann kommt meine Frage auf, wie man das zwischenspeichern will. Vielleicht müsste man dazu mal nen 16ner DRAM zugänglich machen, so wären raten bis 32mhz drin (bei 0,5sek). Sonst: vielleicht einfach nen FT245 nehmen, AD==>FT245==>USB und nen Takt versorgt beide. dave
"Sonst: vielleicht einfach nen FT245 nehmen, AD==>FT245==>USB und nen Takt versorgt beide." hatte ich auch schon dran gedacht. die frage ist, kann der usb chip eine bestimmt datenrate garantieren? so weit ich weiss geht das bei usb nicht und dann müsste man wieder puffern
Ich dachte eher daran, dass der Benutzer zwischen Aufzeichnungsdauer und Samplerate wählen kann, so dass im Prinzip 256Byte reichen würden. Sehr viel mehr Daten lassen sich auf einem kleinen GLCD (128x128, per Tastendruck dann 2x Zoom (Ausschnitt aus 256x256)) sowieso kaum darstellen. Der Einfachheit halber würde ich dann eine 8K oder 32 KByte SRAM verwenden. Bei 8KB ließen sich 800µs bei 10MSPS oder eben eine Sekunde bei 8KSPS oder ein beliebiges anderes Verhältnis SPS:Aufzeichnungsdauer auswählen. DRAM hätte den Nachteil, dass noch Aufwand fürs Refreshen betrieben werden müsste.
ich hatte da eh an eine einstellbare Abtastrate gedacht. Ideal wäre da ein digital einstellbarer Oszillator im Bereich 1MHz bis (40MHz). Alles darunter könnte der AVR selbst übernehmen, z.B. Abtastraten 1sps,0.1sps fürs datenloggen. Dann reicht theoretisch wirklich RAM in Anzeigebreite. Kennt jemand einen programmierbaren Oszillator?
Ich versteh immer noch nicht wo das problem an der triggerung liegt. Das kann man doch so machen wie bei einem ganz normalen oszi. Was könnte man denn da z.B. für einen ADC nahmen der DMA unterstützt? Was haltet ihr davon, ein speichermodul von einem PC zu nehmen ? (z.B. PC 133) Da hätte man speicher ohne ende und hohe geschwindigkeiten. Dei den teilen stell ich mir aber die adressierung sehr schwer vor ! @Matthias H. Man könnte es doch ähnlich wie ein funktionsgenerator mit veränderbarer frequenz machen. was ist z.B. mit dem MAX 038 des teil is zwar grad nicht das billigste aber vielleicht findet sich ja nch was günstigeres. Also wenn ich jetzt alles richtig verstanden habe sieht das teil fogendermasen aus: ein ADC (8Bit) wandelt das signal in ein digitales signal um und schreibt es direkt in den Speicher ! Die Adressierung erfolgt durch einen hardwaremässigen counter. (der ggf vom µC gestartet wird wird) wenn der speicher voll ist teilt der counter dem µC mit, dass er wider bei 0 angekommen ist und das es Zeit ist die daten aus dem speicher zu laden (und auszuwerten). Das MSPS/Aufzeichnungsdauerverhältniss lässt sich einstellen. (Basis ist immer der Speicher mit 8KB). Der µC stellt die daten auf einem LCD dar (und sendet sie ggf an den PC). Sobald der µC mit der auswertung fertig ist (/der benutzer es zulässt) beginnt nach der Auswertung und darstellung der daten ein ein neue Messung bei der der speicher von 8KB wider voll geschrieben wird. Was könnte man denn als speicherbaustein verwenden? Am besten wär natürlich irgendwas was vollduplex erlaubt und trotzdem schnell genug ist um die daten aufzunehmen.
die idee mit dem pc speicher hatte ich auch schon: http://www.mikrocontroller.net/forum/read-1-130559.html#new
das Problem bei dem PC-Speicher ist, dass es DRAM ist und immer wieder refreshed werden muss. Das muss dann entweder der AVR machen oder ein passender Schaltkreis. Dadurch wird auch die Zugriffszeit wesentlich höher als bei SRAM. Die Ansteuerung ist bei SRAM günstiger und den gibts mit Zugriffszeiten von 12 oder 15ns und wenns sehr schnell gehen muss dann halt 5ns. FIFO-Speicher wäre auch nicht schlecht. Dann entfällt die ganze Adressierung.
Ich habe mich mit dem ganzen Thema auch schon ausführlich beschäftigt: FIFO: Super einfach, aber scheißteuer (20 für 32kB !) SRAM: billig, in jedem alten PC zu finden. Mit einem synchronen Adresszähler sollte es funktionieren Daten sehr schnell aufzuzeichnen. Nur das WR Timing macht mir Probleme: Laut Datenblatt muss es bei der Adressänderung deaktiviert werden. Wie machte ich nun das Timing ohne einen halben Taktzyklus für die Deaktivierung von WR zu verschwenden ? synchroner SRAM: billig, in vielen alten Pentium PC zu finden, sehr schnell, hat internen 4bit Adresszähler, aber die Ansteuerung ist etwas komplizierter als beim asynchronen. DRAM: superbillig, riesig, aber langsam. Lohnt sich nur wenn man große Daten relativ langsam speichern möchte. Der Refresh erschwert alles. SDRAM: superbillig, riesig, sehr schnell. Die Ansteuerung ist aber extrem kompliziert und ohne FPGA oder speziellen SRDAM Controller kaum zu bewältigen. 2 Layer oder noch mehr sind notwendig. Außerdem ist das Platinenlayout schon relativ kritisch. VRAM: Mischung aus DRAM und SRAM mit internem Adresszähler. Optimal für Datenströme bis 50MB/s. Leider extrem schwer zu bekommen.
Mit einem SRAM Speicher wären bei einer Zugriffszeit von 12 ns 83333332 (83Mbyte/s) Schreibzyklen/Sekunde möglich somit wär eine Abtastraten (bei 8bit AD/Auflösung) von 83 MS/S möglich. Ich glaub das wär erstmal genug g. (korrigiert mich bitte wenn ich alles falsch gesagt hab*g*) Wie siehts denn mit denen FIFOs aus ? Hab sowas noch nie verwendet. Ham die auch zugriffszeiten um die 12ns ? Und ist bei diesen FIFOs noch eine manuelle adressierung möglich ?
mit dem WR- Signal beim SRAM hab ich auch so mein Problem. Mein erster Ansatz war, mit der steigenden Taktflanke den ADC anzustoßen und den Zähler zu inkrementieren und mit der fallenden Flanke dann das WR auslösen. Besser ist vielleicht, einen ADC zu verwenden, der ein "habe fertig"- Signal ausgibt und damit das Schreiben zu starten. Dann wartet man nicht unnötig lange.
den MAX038 hab ich mir gerade mal angeschaut. Ein interessantes Bauteil, aber zum einfachen Takten wohl ein bisschen zu viel (Sinus,Dreieck,usw.). Was mir auch nicht gefällt ist, dass die Frequenz analog eingestellt wird. Ich glaube, Cypress bietet Schaltkreise an, wo man die Frequenz digital einstellen kann (CY2212), weiß aber nicht was sowas dann kostet.
das wäre auch eine Lösung, mit einem Zähler. Aber leider kommen da nicht Teilungen zustande, die Oszi- typisch sind(1µs - 1ms - 10ms - usw.).
Mal angenommen man nimmt einen Zähler als Teiler z.B. 12 Stufig (Teiler 4096). Bei einer Eingangsfrequenz von 20MHZ wäre die niedrigste Ausgangsfrequenz 1,2KHZ, was bei einem 8KB Speicher bis zu 2Sec Aufzeichnung ermöglichen würde. Soweit gut. Nur wie kann der AVR ohne erheblichen Hardwareaufwand jeweils einen beliebigen Ausgang an den Adresszähler weiterleiten?
Hab mich vertippt, die niedrigste Frquenz bei einem 12 Stufigen Teiler und 20MHZ wäre 4,8KHZ. @Mathias: Ausrechnen wäre sicherlich möglich (allerding ließe sich das Teilverhältnis 1:10 nur ungenau erreichen). Mir persönlcih reicht aber auch eine Teilung in 2-er Schritten vollkommen.
@Matthias H. Das "habe-fertig" Signal verkompliziert das Timing. In meinem 50MS Logik Analyser mit VRAMs werden die Daten bei der Low-High Flanke eingelesen. An den Eingang kann ich auch einen ADC anschließen. Der DA Wandler (ADS830) gibt ebenfalls bei der LH Flanke neue Daten aus. Aufgrund der Verzögerung durch die Leitung und dem HC245 Eingangspuffer speichert der VRAM noch die alten Daten. Bei einem SRAM ist das allerdings komplizierter: Laut Datenblatt sind die Eingangsdaten egal, bis zur Low-High Flanke von WR\ oder CE\. Zu dem Zeitpunkt wenn WR\ auf Low geht, muss auch die Adresse stabil anstehen und stabil bleiben bis WR\ wieder auf High geht. Dann bräuchte man eine kurze Zeit, die eigentlich nur vom CPLD o.ä. abhängt und solange dauert bis die neue Adresse stabil ansteht. Also entweder verwendet man einen stark unsymmetrischen Takt oder baut sonst irgendwie eine Verzögerung ein. @all Den Frequenzteiler kann man auch in den CPLD intergrieren, das ist kein Problem und man hat kein Kabelgewirr da der Multiplexer für die Frequenzauswahl auch direkt integriert ist. Der Frequenzteiler muss nicht durch 2 teilen, sondern jeder beliebige Faktor ist ohne größeren Aufwand einstellbar. Auch den Trigger könnte man einbauen. Ein bit Vergleicher ist in einem CPLD eine Kleinigkeit... Bei der Samplerate muss man aber aufpassen. z.B. der ADS830 braucht mindestens 10kHz, ansonsten driftet der S&H Verstärker und man bekommt einen merkwürdigen DC Offset.
@Benedikt Welche OV Eingangsbeschaltung hast du für den AD830 gewählt? Eine aus dem Datenblat (AC/DC)? Bin bisher bei High Speed OVs bei R. noch nicht so richtig fündig geworden. Wenns nicht zuviel Aufwand ist könntest du die ADC Eingansbeschaltung posten? Ist sicher auch von allgemeinen Interesse. Danke.
Also, ich habe mit sowas 1996 meine Doktorarbeit geschrieben. War ein 1G/Samples Speicheroszi als PCMCIA-Einschubkarte für Notebooks. Ein MAX100 zum Beispiel als A/D-Wandler. Ist ein sog. "Flash"-Wandler. Gibt es mit 6 und 8 Bit. Dazu ein schnelles PLD. Ein EPM3032 kann schon mit ca. 200MHz laufen. Als RAM-Speicher ein sog. "Cache"-RAM. Gibt es bzw. gab es damals mit 32kByte. Sind heute sicherlich größer. Der PLD bildet eine Dual-RAM-Schnittstelle. Somit kann der A/D-Wandler direkt in den RAM schreiben. Auf der anderen Seite befindet sich ein Controller, welcher nach beendeter Messung den RAM von der anderen Seite langsam ausliest und die Daten auf einer Schnittstelle Deiner Wahl überträgt. Viel Erfolg! Jörg.
Im Anhang der Schaltplan für den ADS830E. Das meiste stammt aus dem Datenblatt, nur der Opamp ist einer, der bei Reichelt erhältlich ist. Die wichtigste Funktion des Opamp ist der Überspannungsschutz und die Impedanzwandlung. Da der Opamp bis 10mA am Eingang verträgt, ist die Schaltung bis +/-50V am Eingang geschützt. Der Eingangsbereich liegt bei 2-3V, oder mit einem 10:1 Tastkopf bei -2,5V bis 7,5V. Oder auch +/-0,5 bzw. +/-5V wenn man AC Kopplung verwendet.
@Benedikt Spitze!, Danke. Kommt gleich auf die Neujahrsbestellliste. Wenn ich das DB des OPA353 richtig verstehe hat er zwar eine GBW von 44MHz ist aber etwas Slew-Rate schwach. Bei Vout p-p von 2-3V sind es nur noch um die 3MHz. Sehe ich das richtig? (Analog hab ich noch viel zu lernen)
@Jörg bei den MAX ist das Problem, wenn sie schneller werden, dann kommen die in Gehäuse, die man als Amateur wohl nicht mehr löten kann. @Benedikt ich danke dir für den OPV. Wenn man bei Reichelt was spezielles sucht, findet man es meistens nicht. Die 44MHz Bandbreite sollten wirklich ausreichen. Davor sollte dann noch ein Spannungsteiler mitsamt Analogmultiplexer, um den Spannungsbereich einstellen zu können. Das kann man dann den AVR machen lassen. Wird das Signal dann bei 255 abgeschnitten, kann er dann den Spannungsbereich ändern. Ist das Signal kleiner 30, dann auch. Langsam nimmt das Ding Gestalt an. Über Weihnachten werd ich mich mal mit den CPLDs beschäftigen. Dies scheint mir eine Lösung zu sein, mit der man auch noch nach dem Leiterplattenätzen experimentieren kann, wenns mal nicht gleich läuft.
@Kupfer Michi Den ADS830 habe ich auf 1Vss Eingangsbereich eingestellt. Das macht dann 7MHz mit dem OPA353, was mir zumindest reicht und eine hilfreiche Bandbreitenbegrenzung darstellt.
@Benedikt > hilfreiche Bandbreitenbegrenzung Meinst du damit das es wegen Stabilitätsproblemen (für Anfänger) nichts bringt schnellere OVs (und damit ADCs wie den ADS830) zu nehmen? Weil sonst hätte ich gerade noch den - OPA642 (7 bei R.) mit 4Vpp bei 20MHz und G=2 (aber Diff Input Inpedance von nur 11KOhm?) - LT1227 (5.25) mit ca. 4Vpp bei ca 10MHz und G=1 - NE5539 (1.30) 3Vpp bei ca. 20MHz gefunden. (Die Analog Welt oberhalb 1MHz ist ganz schön kompliziert) Komentare?
@Jörg: Wenn du ein 1G/Sample -Digital-Oszi als Dr.-Arbeit gebaut hast und Dual-Port-Ram genommen hast, welche Geschwindigkeit hatten di denn??? 1G-Bytes/s ist ja nun doch schon ne ganze Menge !!! Hast du vielleicht ne elektronische Version deiner Dr.-Arbeit, würde mich mal interessieren !!! Würde mich freuen, wenn du sie mir an meine E-Mail-Adresse schicken könntest !!! Danke C3PO
@Jörg Ich wär auch daran interessiert ! 1 GB/s, ist sowas überhaupt für privatpersonen machbar ? für speicheroszi ist das ja schon fast zuviel, da braucht man ja nen rießigen speicher. @All Kennt jemand Bezugsquellen für den MAX106/100, EPM3032, und den von Jörg erwähnten Cache RAM?
Soweit ich alles richtig mitbekommen habe, müsste das Schema des Teils jetzt ungefähr so aussehen. Falls der CPLD genug Pins hat, könnte er ja den Adresszähler auch gleich noch ersetzen.
den AVR könnte man doch direkt an den 8bit- Bus zwischen ADC und Speicher anhängen. Dann müssen die Daten nicht über den CPLD. Die Pins kann man dann zum Vorladen des Zählers und des Taktteilers (noch ein Zähler?) verwenden
Was für Speicher soll den verwendet werden? Bisher scheinen ja FIFO, gewöhnlicher SRAM und Dualport SRAM zur Auswahl zu stehen. Bei der Verwendung von gewöhnlichem SRAM müsste dann entweder der ADC Ausgang auf hochohmig geschaltet werden können solange aus dem SRAM gelesen wird oder die Daten des ADC müssen zunächst durch den CPLD zum SRAM gelangen.
@Kupfer Michi Die 7MHz Bandbreitegrenze nutze ich um das Signal auf halbe Samplerate zu begrenzen (zumindest so in etwa). All diese Opamps haben einen nachteil gegenüber dem OPA353: Sie kommen nicht mit +5V aus, sondern brauchen +/-5V oder mehr. Am Anfang hatte ich den TDA8703 eingesetzt und etwa 3-4 davon abgeschossen, denn dieser reagiert extrem empfindlich auf negative Spannungen am Eingang. Daher bleibe ich jetzt erstmal bei den 5V Rail2Rail Opamps, denn da kann garantiert nichts über 5V oder unter 0V rauskommen... @Malte: Der Speicher hängt davon ab, wie schnell das Ding sein soll: Mit normalem 15ns SRAM wie ihn fast jeder aus alten PCs rumliegen hat, sind rund 60MS/s möglich. FIFOs sind zwar besser, aber eben auch verdammt teuer. Hier muss man abwägen ob es sich lohnt, den Aufwand (kein Adresszähler, einfacheres Timing) zu reduzieren, indem man einen teuren FIFO zu verwendet. Für Dualport RAM sehe ich eigentliche keinen Grund, da dieser genauso teuer ist wie ein FIFO, und eigentlich keinen großen Vorteil bringt. Will man einen neueren High Speed FIFO, SRAM o.ä. nutzen, dann muss man erstmal einen finden der 100MHz schafft und mit 5V läuft, denn fast alle laufen nurnoch mit 3,3V. Davon abgesehen haben die meisten keine 9bit sondern 18 oder 36 !
"Davon abgesehen haben die meisten keine 9bit sondern 18 oder 36 !" könnte man das nich perfekt für 2 kanäle benutzen, indem man diese einfach parallel an einen speicher hängt?
Ja, aber mir sind 36 für 8k x 18 @10ns etwa zu teuer... Da würde ich lieber beim normalen SRAM bleiben und keine seltenen und schwer beschaffbaren Bauteile verwenden, denn dann kann ich gleich irgendein Projekt aus dem Internet nachbauen, wenn ich sowiso zusehen muss wo ich irgendwelche Spezial ICs bekomme. Die Low Cost Alternative: 8 oder 32k SRAM in Pseudo DMA Configuration am AVR. Dieser schafft dann rund 2MS/s @ 16MHz
Schnelle SRAMs findet man auch z.B in alten Festplatten. Ansonsten hat auch http://www.kessler-electronic.de/ genügend günstige SRAMs. (wie reagiert den R. wenn man nicht Lager/Katalog Bauteile anfragt?) FIFOs machen wirklich keinen Sinn. Ein CPLD braucht man so oder so also warum was exotisches.
Also als FIFO fände ich http://de.farnell.com/jsp/endecaSearch/partDetail.jsp?SKU=4660717&N=401 duchaus interessant. Läuft mit 5V, gibt es im DIL Gehäuse, ist mit 12ns ausreichend schnell und die Kosten sind mit ~10 ungefähr genaus so groß wie für ein GLCD von Pollin. Wer mehr als 1K haben möchte, kann den anscheinen auch einfach durch einen (dann zugegeben allerdings teuren) 16K FIFO austauschen.
Schau mal ins Datenblatt: 12ns = 50MHz max.! Da bin ich mit einem CPLD und einem 8k 15ns besser dran: 66MHz... Ich habe es noch nicht ausprobiert, aber wenn die Adressenausreichend schnell und gleichzeitig geändert wird, ohne dass WR\ vorher deaktiviert wird, dann hoffe ich, dass das SRAM keinen Mist baut. Im Anhang mal mein erster CPLD Entwurf: Im Pinzip ein synchroner Adresszähler mit umschaltbarem Takt und ein paar Sonderfunktionionen. Port ( sclk : in std_logic; --Configuartion Shift Clock sdata : in std_logic; --Configuration Data set : in std_logic; --Configuartion Latch adresse : out STD_LOGIC_VECTOR (15 downto 0); --Adressausgang reset : in std_logic; --Globaler Reset areset : in std_logic; --Adress Reset SaRe : in std_logic; --Sample / Read\ En : in std_logic; --Enable Sampling Read : in std_logic; --ReadClock wr : out std_logic; --WR\ für SRAM oe : out std_logic; --RD\ für SRAM sc : out std_logic; --Takt für ADC sci : out std_logic; --Takt\ für ADC xclock : in std_logic; --externer Takt clock : in std_logic); --interner Takt (bis zu 66MHz)
Hab mir überlegt, dass man auf 2 RAMS schreibt, um eine höhere Datenrate zu bekommen. Dann wär halt die Adressierung n bischen komplizierter. Als Statischer RAM käme z.B. http://www.kessler-electronic.de/proddetail.asp?ID=7E94C9D650B047CAA3CDC61B3BFD93E3&PROD=36512) in frage. Hat jemand einen link für mich, wo ich mich über die CPLD's informieren kann ? Und einen Beispiel-CPLD der in frage käme. Was für ein unterschied besteht zwischen GALs und CPLDs. was haltet ihr von den ispGALs ? Ich werde, wenn interesse besteht, eine Homepage über das Project erstellen. (mit forum, wo man über jeden einzelnen komponenten sich beraten kann) MfG Axos
@Axos geh auf die Xilinx Webseite, lad dir das ISEWebPack runter und fang an damit zu spielen... GALs sind zu klein, man braucht wohl schon (mehrere) XC9572XL oder XC95144XL. Einen eigene Webseite kann man machen, schmort dann aber sehr schnell im eigenen Erkenntnissaft. In einen allgemeinen Forum schaut ab und zu halt doch ein Experte vorbei...
@Kupfer Michi denkst du, dass man da mehrere brauch. Wäre nicht schlecht, wenn es in einen passen würde. Ich denke mal, die I/O-Pins sind da wohl der entscheidende Faktor. Die "inneren Werte" werden für die paar Zähler und Vergleicher wohl ausreichen.
Einer reicht auf jeden Fall. In einen XC95108 passt ein kompletter VGA Controller. Die SRAM Ansteuerung habe ich in einem XC9572 mit 44Pins gepackt. Was haltet ihr von einer kontinuierlichen Aufzeichnung die erst kurze Zeit nach der Triggerung gestoppt wird ? So kann man sich auch das Signal vor der Triggerung anschauen.
>Wäre nicht schlecht, wenn es in einen passen würde Ob eins oder mehere, das ist nicht das Problem, auch nicht die Logik in VHDL umzusetzen... Bevor hier all zuviel Euphorie vor alle den 10ns hier und 100Mhz dort aufkommnt frage ich doch einfach mal in die Runde: Wer hat schon die praktische Erfahrung und das notwendige Testequipment um ein Design in dieser Region auf den Boden zubringen? (ich nicht)
Ist das Zubehör (Programmiergerät, Software...) überhaupt noch für Amateure bezalbar ? Deswegen hab ich auch vorher die ipsGALs erwähnt, die lassen sich wie die AVRs in der schaltung programmieren. Vielleicht gibts ja auch sowas wie ispCPLD !??? @Benedikt Super idee ! Könnte man natürlich als Zusatz auch noch einbauen.
zum Programmieren der CPLD gibts die Software vom Hersteller kostenlos und die Hardware ist ein Programmierkabel ähnlich dem des AVR selbstgebastelt. Die Anleitung dazu muss ich mal schnell suchen.
Alle CPLDs lassen sich über JTAG programmieren. Die Sofware unterstützt auch direkt ein Parallelport JTAG Interface. (Ähnlich kompliziert wie der AVR ISP Adapter) Und was gibt es sonst noch an Testequpment ? Einen 8 Kanal Logic Analyser mit 32MS habe ich, den ich auch als 32MS Oszi betreibe, daher habe ich schon ein paar Erfahrungen mit dem Thema.
Xilinx Programmer, direkt ansprechbar aus ISEWebPack über LPT port (nur der obere Header wird gebraucht)
Es gibt ein kleine Synchronisierungsfummelei zwischen ADC und SRAM. Wenn man vonm ADS830 ausgeht: Neue Daten erscheinen am ADS Ausgang bezogen auf Master Clock nach 5.9-12ns (t2 New Data Delay Time). Dies ist mit den Durchlaufzeiten im CPLD und Setupzeiten vom SRAM zu synchronisieren. Bei 10MHz geht das ja alles gemütlich, aber darüber hinaus... @Benedikt kein Logicanal. :( und ein 30 jahre alter 10MHz 1 Kanal Hameg :( (Versuch z.Z. erst mit USB und nachgeschalteten Optoisolierten I2C Bus die Infrastruktur für diverse Messgeräte aufzubauen).
Hallo, zusammen. Schnelle Speicherzeiten erreicht Ihr mit Kaskadierung. Der ADC und das RAM werden mit demselben Takt angesteuert. Der Trick liegt darin, zum Beispiel mit acht Stück solcher RAMs zu arbeiten. Nehmen wir mal ein Beispiel. Wenn Ihr günstig 12ns-SRAMs bekommen habt, dann könnt Ihr mit einem davon eine theoretische Frequenz von ca. 80MHz erreichen. Kaskadiert Ihr diese nun zu acht Stück, wäre eine theoretische Frequenz von 640 MHz erreichbar; und so weiter. In der Summe steuert das CPLD also die "Verteilung" der Daten in einem kontinuierlichen Fluss von einem RAM zum nächsten. Das Layouting eines solchen Boards ist ziemlich komplex und im Hobby-Bereich kaum zu schaffen. Zudem auch ein schneller CPLD seinen Preis hat, der leicht mehrere Hundert Euro erreichen kann. Heutzutage würde ich zu einem schnellen DSP, zum Beispiel von Texas Instruments, greifen. Der letzte, den ich verwendet habe, hatte ca. 3200 MIPS. Es geht aber auch preisgünstiger: "The TMS320C6410 running at 400 MHz with 160 Kbytes total memory is $17.95." Die AD9480 von Analog Devices sind auch sehr schön. Gibt es im QFP-Gehäuse. Die etwas langsameren DSPs sind auch von TI und AD in QFP-Gehäusen verfügbar. Lustigerweise könnte man wohl tatsächlich ein solches Oszilloskop bauen ;-) - Aber wer will tatsächlich anfangen, um dann auf halber Strecke stehen zu bleiben? Kleinere Brötchen führen zum Ziel. Ein 20MHz-Speicheroszilloskop mit 200MSamples/s scheint mir durchaus auch im Hobby-Bereich machbar. Viel Erfolg! Jörg.
@Jörg >In der Summe steuert das CPLD also die "Verteilung" der Daten in einem kontinuierlichen Fluss von einem RAM zum nächsten. Aber dann muss man ja mehere Adrressen paralell und rollend generieren, oder versteh ich das falsch? Ich dachte immer dass mann (um bei deinem bsp. zu bleiben) erst 8 Bytes im CPLD aufsammelt sie dann mit einer Addr an die SRAMs gibt und am Bus anstehen lässt während man im CPLD in einem 2.ten Puffer die nächsten 8 Byte aufsammelt, und danach beginnt der Zyklus von vorne. Also vorne mit 1Byte/Clock rein und hinten mit 8Byte paralell+einer Addr alle 1/8Clock und 8Clocks dauer raus.
8 SRAMs kaskadieren ? Man kann es auch übertreiben.... Mir würde es schon reichen 100MS mit 2 SRAMs zu erreichen. Im Moment habe ich jedenfalls genug Timingprobleme mit 48MS. Bei 32MS ist noch alles OK, bei 48MS bekomme ich die lustigsten Spikes. Die 9ns die der ADS830 braucht, zusammen mit den 20ns für den 74HC245 macht 29ns, und das ist mehr als ein Taktzyklus bei 48MHz lang ist. Muss ich halt doch warten, bis meine 74AHC245 ICs kommen... Hier ist alles ja noch überschaubar. Bei einem CPLD ist das ganze sehr viel komplexer die Verzögerung zu berechnen. Wieviel soll denn das fertige Oszilloskop eigentlich kosten ? Mein 32MS 8Kanal Logikanalyser/Oszi hat rund 20 gekostet (mega8515, XC9572, 2xKM424C257, Quarzoszillator, ein paar HCMOS)
Hallo, Kupfer Michi, nein, jedes RAM ist separat über einen Treiber am ADC angeschlossen. Somit liegen stets alle 8 Bit an allen Treibern an - allerdings werden sie nicht übernommen, solange sie disabled sind. Die Enable-Leitungen werden mit sehr hoher Frequenz bedient. Aber eben nur im "1/8tel-Takt". Warum nur zwei RAMs kaskadieren, wenn es mit acht Stück wesentlich besser geht? 100MS mit zwei RAMs - oder 100MS mit fünf Stück - die Schaltung mit fünf Stück ist wesentlich stabiler aufzubauen und wird besser funktionieren. Benedikt, man kann natürlich eine solche Schaltung auch mit separaten ICs aufbauen; Spikes und andere Störeinflüsse sollte man aber innerhalb eines etwas größeren CPLDs / FPGAs oder DSPs lassen - Gegenmassnahmen zu ergreifen, ist um ein Vielfaches einfacher. Bei einem Preis von 17 Euro für einen schnellen DSP auch erschwinglich. Timing, Verzögerungen, etc. - gute Software, die in den allermeisten Fällen von den Herstellern zur Verfügung gestellt werden, gibt solche Auskünfte, mit einer Genauigkeit im Pikosekunden-Bereich. Jörg.
>Bei einem CPLD ist das ganze sehr viel komplexer die Verzögerung zu berechnen. ich ging (naiver weise) davon aus dass man für die t2 ADC Output valid verzögerung einfach mehere CPLD gatter (ohne reg) hintereinander schaltet bis man (mangels testequipment) ins richtige Zeitraster fällt (urgh!!). Die notwendigen Zeiten sind im XC9500XL Overview DB auf Seite 15 beschrieben
Ja ich sehe das Problem. Im professionellen Bereich gibt es die Möglichkeit, zum Beispiel "Leonardo" von Mentor zu verwenden. Das ist eine sehr teure Software für die Simulation von digitalen Schaltungen. Dafür gibt es dann noch passende "Add-Ons" für die führenden Hersteller, wie Altera, Xilinx, etc. Im Hobby-Bereich sollte es zum Ziel führen, wenn man sich einen PLD sucht, der etwas schneller ist als der Ziel-ADC. Zudem darf die gesamte Schaltung nur von einer Clock-Source gesteuert werden, welche idealerweise wiederum vom PLD verteilt wird. Somit gibt es keine Synchronisierungs-Probleme. Jörg.
@Jörg >jedes RAM ist separat über einen Treiber am ADC angeschlossen Ok. ( die 8 ADCs wollte ich aber eher für 8 Kanäle aufheben :-), der ADS830 ist mit theo. 60MHz ja zunächst schnell genug) >DSP Sicher ein interessantes Thema, aber mann muss sich ja auch noch was für später aufheben.
Ich hab den Thread jetzt nicht ganz gelesen, aber vielleicht findet ihr hier ja ein paar kleine Anregungen ;) http://www.bitscope.com/design/ MfG, Dominik S. Herwald http://www.dsh-elektronik.de/
@Benedikt: Hast du einen Schaltplan und Programmierbeispiele von deinem Logikanalyser/Oszi? 32MS würden mir reichen.
>Wieviel soll denn das fertige Oszilloskop eigentlich kosten ?
Oder anders gefragt was will man den mit dem Ding und was erwartet man
davon?
1) Ich spiel einfach mit dem Gedanken weil man dabei einiges lernen
kann.
2) Wenn man auf seinem Steckbrett rumspielt wäre es manchmal schon
schön wenn mann paralell 4-8 Analoge Signale auf meinem PC Monitor Live
mitverfolgen könnte (was passiert wenn ich daran zupfe?). Genau muss es
nicht sein, etwas schneller schon wenn möglich.
3) auf keinen Fall ersetzt sowas einen guten DigiOszi
@Dominik >http://www.bitscope.com/design/ Gute erinnerung! (hate die schamatics vor einem halben jahr in meinenArchiv gebunkert nach dem Motto: eines Tages werde ich auch dies verstehen... und dann ganz vergessen) Ich nehmen an vielen ist auch schon dieser oft zitierte Logic Analyzer ueber den Weg gelaufen: 32-Kanal-Logik-Analysator bis 40 Mhz http://www.qsl.net/dg5dbz/pcla/pcla.html
Wenns kein AVR sein muss versuchs mal mit einem 8051 Derivat von Analog Devices. ADUC812, ADUC814 usw. haben internen DMA Controller... Das bringt einen schönen performance Schub was das Speichern der Daten anbelangt...
Hallo Jörg, irgendwas muss ich übersehen haben: du sagst du hast letztendlich 1GSample/s herausgeholt, benutzt aber nur ein 1/8 der Frequenz zum Ansteuern der SRAMS. wie bekommst du dann die Abstände von 1ns hin wenn du nur nen Takt hast von 8ns ??? dein CPLD muss ja in Abständen von 1ns die Enable-Leitungen ein/ausschalten (jeweils gesehen zum vorhergehenden SRAM) Was meinst du mit: jedes RAM ist separat über einen Treiber am ADC angeschlossen. also mit nem 5ns CPLD und einem <=20ns SRAM dürfte eine max. Samplingrate von 200MHZ drin sein (bei nem ADC brauchts dann allerdings ne Datenbreite von 32 BIT (zu den 4 SRAMS). PS.: kann ich deine Dr.-Arbeit haben ??? Gruß
Wie wäre es mit folgender Schaltung: Ein ADS830 und ein SRAM, angesteuert von einem CPLD mit max. 60MHz. Das ganze 2x für 2 Kanäle. Einer der ADCs wird bei der positiven Flanke, der andere bei der negativen angesteuert.+ Verbindet man beide analog Eingänge, erhält man so 120MS. Das ganze einfach und ohne Timingprobleme. Und 120MS reichen eigentlich, das ist in etwa so schnell wie ein normales 20-30MHz Oszilloskop, eventuell sogar noch etwas schneller.
Wenn ich mir die DB von Standard Oszis anschaue so sind deren tr/tf Zeiten (bei >30-40MHz) selten besser als 4ns, damit hat man doch schnell ein Sample Jitter Problem am ADC? Das 830 DB schreibt hierzu: Particularly in udersampling applications, special consideration should be given to clock jitter. The clock input should be treated as an analog input in order to achieve the highest level of performance. Any overshoot or undershoot of the clock signal may cause degradation of the performance. When digitizing at high sampling rates, the clock should have a 50% duty cycle (tH = tL), along with fast rise and fall times of 2ns or less. Wenn 2 ADCs durch invertieren des CLK Signals paralell angesteuert werden wird das jitter problem noch schlimmer da die Oszi oft nur eine Waveform Symmetry von 40/60%-45/55% haben. Oder gehst du etwa von einem heruntergeteilten 120MHz Oszi aus??? (hab bisher nur einen 100MHz Oszi bei R. fuer 7.60 gesehen, ist das alles überhaupt beherrschbar?). Ansonsten ist das gegenphasige Verschränken von 2 ADCs natürlich schon elegant und einfach... Wenn man die CLK Leitung des Oszi über den CPLD laufen lässt (und dann an den ADC geht) verbessert oder veschlechtert sich dann das Jitter durch die langsame tr/tf Flanke?
hier tun sich ja Abgründe auf. Ich möchte dann die Patentrechte an dem Oszi.
Noch zwei gute Links zu DSO Projekten die ich aus meinen Favoriten ausgegraben habe: http://www.chocbar.demon.co.uk/ http://www.johann-glaser.at/projects/DSO/ Beide ziemlich interessant, aber alle nutzen FPGAs...
Der johann-glaser link ist sehr gut, geht auf einige der hier angeschnitten Punkte (z.B. Clock) ein. Werds mir mal in Ruhe anschauen... Danke!
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.