Hallo! Meint Ihr es wäre möglich, per ADC und UART ein Oszi zu bauen? Also am PC kann ich mit Delphi UART-Werte einlesen und entsprechend eine Oszilloskop-Software programmieren, das wäre weniger das Problem, nur wie schnell kann ein ADC maximal neue Werte einlesen? Sieht jemand noch andere schwerwiegende Probleme bei dieser Idee? Mfg Moritz
Vielleicht sagst du erst mal mit welchem µC, welchem ADwandler etc ;) Und prinzipiell: ja es ist möglich. Jedoch ist die Bandbreite von normalen UARTs sehr beschränkt ... mit USB-Seriell wandlern kommst du schneller von der stelle.
Die einfachste Version wäre wohl das hier : http://www.semifluid.com/?p=24 oder dies: http://www.semifluid.com/?p=15
Jep sorry, war etwas ungenau, also ich denke an die ATmega - Familie (8,16,..). Ich würde einen 16Mhz Quartz nehmen und in Assembler programmieren. Mir kommt es nicht, wie in einigen Threads aus der Codesammlung, soo auf die Bandbreite an, es ist mehr so ein Bastelprojekt (..mal gucken ob's geht).. Aber so ein A/D - Wandler sollte halt schon so schnell sein, das es wenigstens entfernte Ähnlichkeit mit einem Oszi hat. (Es gibt da ja so ein Theorem, das man mindestens mit doppelter Frequenz eine andere abfragen muss..?) -Eine Idee wäre noch, einen externen A/D-Wandler zu benutzen, der vielleicht schneller aktualisiert, und den A/D-Wert irgendwie an den µC weitergibt. Kennt jemand einen geeigneten? (...Ideal wäre ein 8-16 bit Ausgang) -Andere Sache: mehrere AD's (egal woher) nacheinander messen lassen, damit würde man die abfrage-frequenz erhöhen.Könnte sowas gehen? @Hauke Radtki : USB-SERIELL-Wandler: meinst du, dass am Mikko der serielle Anschluss am UART-Ausgang hängt, und der USB am PC? Kennst du einen IC-Typ, mit .dll und co, oder findet man sowas im Internet? bisher fand ich das immer sehr kompliziert mit USB, und dann mit V.Basic oder Delphi.. Ich schau auch noch mal nach zu dem Thema Danke für die Antworten, Moritz :-)
>nur wie schnell kann ein ADC maximal neue Werte einlesen?
Jedenfalls schneller als dein UART. Wenn du den richtigen ADC nimmst.
> also ich denke an die ATmega - Familie (8,16,..). Ich würde einen 16Mhz > Quartz nehmen und in Assembler programmieren. Wenn du den da eingebauten ADC nehmen willst, ist glaub ich bei ca. 15 kHz Samplerate Schluß. Da kannst du lieber gleich eine Soundkarte nehmen. Die kann mehr. > -Eine Idee wäre noch, einen externen A/D-Wandler zu benutzen, der > vielleicht schneller aktualisiert, und den A/D-Wert irgendwie an den µC > weitergibt. Ich würde einen nehmen, der das nicht nur "vielleicht" tut ;-) > -Andere Sache: mehrere AD's (egal woher) nacheinander messen lassen, > damit würde man die abfrage-frequenz erhöhen.Könnte sowas gehen? Sowas ähnliches macht man bei richtigen Digitaloszis. Da nimmt man zwar denselben ADC, aber bei jeder Periode des gemessenen Signals läßt man ihn zeitlich leicht versetzt messen. Die Ergebnisse kann man dann zusammenrechnen. Das geht dann natürlich nur, solange man periodische Signale mißt.
Die die maximale Samplerate liegt beim AVR-ADC bei etwas über 75kHz (13µs) im Free-Running-Mode, ein 35kHz Signal wäre damit abtastbar. Das kann keine (normale) Soundkarte.
Die USB-Seriell wandler arbeiten vom PC aus gesehen wie normale Serielle schnittstellen, d.h. du kannst auch entsprechend drauf zugreifen. 15kHz Samplerate ist bei höchster Auflösung garantiert oder so ähnlich. Mein ADC vom Mega16 "rennt" mit ca 76kHz samplingrate (500kHz input clock) Dabei kann man dann aber nicht mehr als ca 6-7 bit an auflösung erwarten.
Jo.. Einen AD-Wandler mit 8-16bit Anschluß ? Und geringfügig schneller als der interne...? vielleicht der... Anhang ;-)
Ok, das klingt doch alles, als wär sowas mal einen Versuch wert. ich probiers erstmal normal mit AVR-ADC in der Dauerschleife "loop: ADC rjmp loop" und UART. Was ist der Free-Running-Mode? Und wenns auch tatsächlich nur bis 7khz abtasten kann, optimieren kann man immer noch, better change a running system :-) Grüsse, Moritz
ohh der A/D-Wandler sieht net schlecht aus, muss ich sagen..bisschen zu viele pins für meinen Geschmack, aber die lassen sich auch bändigen.. Ich probier den auf jeden fall mal zu bekommen und werde ihn mir dann aufs Korn nehmen. moritz
@Moritz: Kann dir noch mehr ähnliche anbieten...
Die 40 Mb/s wirst du allerdings nicht mehr in einen AVR bekommen, und über die serielle Schnittstelle oder einen seriell-USB-Wandler auch nicht.
Die Übertragung zum PC kann man auch so gestalten dass man einfach das Signal zuerst in echtzeit im µC-RAM aufzeichnet (mit entsprechender Triggerfunktion) und dann die Daten ganz gemütlich mit UART an den PC sendet.
Das hatte ich mir auch überlegt, das wär eine praktische Alternative, auch wenn etwas Rechenarbeit nötig ist..aber das müsste gehen. und man muss ja nur sozusagen einen Puffer programmieren, der die langsame Übertragung ausgleicht. @Matthias: ich hab mir eben beim Conrad aus seinem beschränkten Sortiment mal einen TLC 549 CP besorgt (8-bit). Den teste ich mal.
ok, also der erste test hat schonmal funktioniert!! nur muss ich sagen haben alle die Recht, die meinten, das UART wäre langsam. IST ES AUCH!!!!! Puhh, jetzt muss ich eventuell doch einen Puffer im AVR programmieren. Weis jemand zufällig, ob es sowas schon gibt, ob es schwierig zu programmieren ist, und ob man nicht vielleicht einen kleinen Teil irgendwo bekommt? Ich müsste die Werte, die der ADC ermittelt, im RAM abspeichern, und dann (gleichzeitig) anfangen, von Anfang an die gespeicherten Werte zu lesen und übers UART rauszuschicken. Natürlich is dass dann auch Mist, wenn der PC nicht in Echtzeit die Spannung anzeigt, aber nun gut. Noch eine kleine Frage: hat jemand einen USB-UART IC, den er mir nennen könnte? Ich glaube dieser Weg wäre der beste! Grüsse Moritz
...man nicht vielleicht einen kleinen Teil.... bitte schön, ein kleiner Teil: uint16_t puffer[4096]; ;-) ...mand einen USB-UART IC, den er ..... FT8U232AM FT245BM zB
In Elektor 3/2006 wurde ein Oszilloskop mit dem R8C/13 vorgestellt, inkl. PC-Darstellungs-Software. Zusätzlich wird ein Grafik-LCD angeschlossen. Ich weiss, Du willst den AVR einsetzen, aber möglicherweise ist dies eine Quelle für Ideen und für die Machbarkeit. Severino
Und wenn du die 8 bit Daten parallel an die Druckerschnittstelle des PC´s sendest? Ich weis nur nicht wie schnell die beim PC ist. Der AVR kann mit 16MHz bestimmt 1MByte pro Sekunde senden. Vielleicht kommt man auch ganz ohne µC aus. Wenn man einen parallelen 8 Bit ADC direkt an den LPT anschließt und den PC die restliche Arbeit machen lässt.
Gibt es den CA3306 noch? Den hatte ich mal (war noch unter DOS-Zeiten) am Parallelport drann. Macht aber nur 6Bits. Dafür mit 15Mhz und ohne Prozessor...
Den FT232RL würde ich dir auch empfehlen, wenn es USB sein soll. Aber es ist für ein Oszilloskop nicht nötig, die Daten so schnell, wie sie gemessen werden, an den PC zu übertragen. Fülle einfach das interne RAM des AVR, wenn es voll ist, sendest du den Inhalt an den PC, was viel länger dauern darf, als das Aufzeichnen. Jeder USB-Oszi macht das so, und auch "richtige" Digital-Oszis stellen nicht so schnell dar, wie sie aufzeichnen können. Wichtig ist halt, dass du noch einen Trigger einbaust, damit du auch den Zeitausschnitt aufnimmst, der dich interessiert. Vereinfacht gesagt wartest du vor dem Aufnehmen bis der ADC einen bestimmten Wert überschreitet, oder unterschreitet (Trigger auf positive/negative Flanke). Gruss Andi
Hey Danke, das bringt mich gut weiter! Ich werde bei farnell den UART-USb Ic mal bestellen (FT232). Der sieht vielversprechend aus, und der Websupport ist top. Als nächstes werde ich mal das mit dem RAM-Puffer ausprobieren, ich werde dann sofort hier berichten! Das mit dem Parallelport ist sicher auch möglich, nur dann halt wieder ne ganz andere Schiene, und ich bin froh, das ich in Delphi das UART endlich ansteuern kann (http://www.delphipraxis.net/ sei Dank: http://www.delphipraxis.net/topic102188_uart+terminalprogramm+zur+kommunikation+mit+atmega8+c.html&highlight=). Also folgende Möglichkeiten bestehen: -[AVR-ADC]-AVR-UART (RAM) -[AVR-ADC]-AVR-UART-USB -[ext.ADC] -AVR-UART -[ext.ADC] -AVR-UART-USB -[ADC-..] -AVR-8bit-->LPT-Port Diese werde ich nun der Reihe nach mal durchchecken! Gruss Moritz
Ok, ich hab mal das mit dem SRAM ausprobiert, hier der Code. Es ist aber eine mega-Verzögerung, zwischen den einzelnen Datenfluten zu verzeichnen(einige 10 sekunden!!) Der misst jetzt, wartet, sendet (dauert), zeigt an, misst,usw... ^ |**initalisierungen und ADC-Messung vom AVR-Tut hier ausm Forum, ZL und ZH |sind mit startadresse des SRAMS beladen (0x0060) |''''''''''''''''''''''''''''''''''''''''''''''''' |... ' no_round: ; Ergebnis nach adlow und adhigh kopieren ; damit die temp Register frei werden mov adlow, temp3 mov adhigh, temp4 ;---------------------------------------------- cpi XH, 0x04 ;wenn höheres register bei 4, dann ist unteres bei 00, und 0x0400 ist die Zahl 1024 brsh outp ; das SRAM geht bis 0x045F , heisst 0x5F Stellen sind noch fürn stack frei ST X+, adlow ;-adlow in adresse 0x0060 kopieren--anschliessendes erhöhen um 1----- ST X+, adhigh ;-adlow in adresse 0x0061 kopieren--anschliessendes erhöhen um 1 rjmp Main ;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSenden: outp: ldi XH, HIGH(startaddy) ldi XL, LOW(startaddy) senden: LD adlow, X+ ;Wert von 0x0060 von SRAM in adlow ---anschliessendes erhöhen um 1 LD adhigh, X+ ;Wert von 0x0061 von SRAM in adhigh ---anschliessendes erhöhen um 1 rcall uart_s cpi XH, 0x04 ;wenn höheres register bei 4, dann ist unteres bei 00, und 0x0400 ist die Zahl 1024 brsh Main_r ;neuer messvorgang! ;´sonst rjmp senden uart_s: hier gehts weiter mit ascci-konvertierung und sendevorgang ans uart Wodurch kommt diese Verzögerung zustande zwischen messen und senden? wahrscheinlich weil ich schon mal 0x0400 - 0x006 = 928 /2 = 464 Messungen mache, und jede Messung ist ja oben schon ein Mittelwert aus 255 Messungen, heisst 255*464=118320 ADC-Messungen á 13µs sind 1,5 s und nich 20 !!!
Ok, ich hab eben nochmal nachgemessen: 26 Sekunden zwischen jeder Datenflut (es macht plopp und 458 werte kommen reingeprasselt).
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.