Arduino-Control Version: 0.4.0.0 Alpha Datum: 16.12.2012 Screenshot: Linien: ganz oben (Ladung an/aus), in der Mitte (Pins der 7-Segmentanzeige), unten: Lade/Entlade-Kurve des Kondensators (10µF) Hallo Leute, Ich habe mir vor kurzem ein Arduino-Board (und noch einige andere) zugelegt und bin begeistert. Nach viel spielerei habe ich jetzt nach einer Möglichkeit gesucht, die vom Arduino gesendeten Daten (serial.print) auf einem PC zu visualisieren. ...quasi wie mit einem Oszilloskop. Leider war das Ergebnis der Suche sehr ernüchternd. :( ...und darum programmiere ich jetzt selber ein Software-Oszi. Meine Software ist noch im Alpha-Stadium und wird später natürlich als Freeware angeboten. Funktionen: -Übertragung der Daten zwischen Software und Arduino mit einer Baudrate von 250000 (ca. 31 Kb/s ,maximal) -maximale Baudrate 256000 (ich empfehle aber 250000) -Bis zu 2850 Datenpakete können pro Sekunde ausgewertet werden. -bis zu 10 Kanäle können gleichzeitig dargestellt werden (könnten noch sehr viel mehr sein, aber 10 sollten ja wohl reichen) -der Zustand aller Analoge Pins,Digitale Pins, Variablen im Arduinocode, können angezeigt und auch im laufenden Betrieb geändert werden (auch setzen von PWM) -neben dem Graph steht auch eine Konsole/Terminal zur Verfügung wird auch noch kommen: -Ping und Reaktionstest -der freie SDRAM und die Laufzeit des Arduino können angezeigt werden -Messen von Impulsen -lesen/schreiben/sichern/rücksichern/formatieren des EEPROM -Triggern von periodischen Signalen (steigende und fallende flanke) -Single-Shot-Modus -Rolling-Modus -X-Y-Betrieb -HoldOff-Modus -Mittelwertbildung von Signalen -Grenzwertüberwachung -differenzbild von zwei Signalen erzeugen -Datenlogging -Offline-Auswertung + FFT ...und was noch so ansteht ;) Zur kommunikation mit dem Arduino wird im C-Code ein header eingebunden (benötigt ca. 8KB Flash und 0,5KB SDRAM. Dieser kommuniziert dann mit der Software automatisch. Man sollte nur darauf achten, dass man in der Loop-Schleife nicht zu lange Delays einsetzt, da sonst das Oszilligramm sehr Zeitdiskret aussieht. Ohne Header kann die Software aber noch "manuell" mit dem Arduino kommunizieren und oszilloskopieren. Der einzige große Nachteil der Software.... es ist mit AutoIt geschrieben. Es ist also nur ein langsamer Interpreter. Zum Zählen von 0 auf 1 Mrd braucht es bei mir 43 sek. (C braucht 4 sek und PureBasic schafft es in 0,3 sek.) Bei meinen Tests auf verschiedenen Rechnern konnte ich 80 - 300 Messungen (aller Arduino-Eingänge/Ausgänge gleichzeitig) pro Sekunde plotten. Sehr viel schneller geht es aber eh nicht, da man mit den ca. 20-30 Kb/s die man empfängt keine Darstellungsfrequenz im KHz-Bereich schafft. Kurzes tutorial: -Arduino-Control - 0.4 Alpha.rar entpacken -den "ArduinoControl"-Ordner in arduino-1.0.3/libraries kopieren -die Arduino IDE starten - Datei -> Beispiele -> ArduinoControl -> minimal - Auf den Arduino uploaden jetzt kann man die "Arduino-Control - 0.4 Alpha.exe" starten Baudrate und COM-Port bestätigen und unten bei den Kanälen die Pins anzeigen. Habe es erfolgreich getestet mit: -Arduino Uno Rev. 3 -DFRduino nano328 (Arduino Nano v3.0 kompatibel) -Freaduino MEGA2560 v1.2-White Color ( Arduino compatible) zu der "senden"-Funktion: steht schon da drin: #s;A;0;R;1;#e #s; -> Datenpaket anfang A; -> Analog in (D, Digital in/out) 0; -> Pin 0 R; -> Lesen (W, für schreiben) 1; -> Wert (1 ja, 0 Nein) #e -> Datenpaket ende das kann der Arduino übersetzen und führt dann den Befehl aus. Beispiele: #s;A;0;R;1;#e -> Analog in, Pin 0: wird nun gelesen und dauerhaft an die Software gesendet #s;D;5;R;0;#e -> Digital in/out, Pin 5: der Zustand wird nicht mehr überwacht; es werden keine Daten mehr über diesen Pin an die Software gesendet #s;A;3;W;120;#e -> Digital out, Pin 3: setze PWM mit dem Wert 120 #s;D;4;W;0;#e -> Digital out, Pin 4: setzt den Pin auf LOW #s;D;4;W;1;#e -> Digital out, Pin 4: setzt den Pin auf HIGH Werte, die vom Arduino gesendet werden: #s;D,6,0;A,2,342;...;...;...;#e #s; -> Datenpaket anfang D, -> Digital in/out 6, -> Pin 6 0; -> Wert 0 .... weitere Werte #e -> Datenpaket ende naja... es würde mich freuen, wenn noch jemand eine gute Idee hätte, was man noch brauchen könnte. Testen könnt ihr natürlich auch. Allerdings funktioniert nur knapp die Hälfte der Funktionen (Alpha-Version ;) ) mfg -SBond-
Hallo SBond, super, das ist mal ein schönes Weihnachtsgeschenk - herzlichen Dank! Ich werde spätestens über die Feiertage ausprobieren, ob ich es auch ans Laufen kriege und hoffe, dass mir was Nützliches dazu einfällt. LG heaviside
nicht vergessen. Noch ist es eine Alpha und das Programm ist noch in Entwicklung. Updates kommen aber nächste Woche ;) ..diese Woche habe ich noch eine Prüfung und da wird gelernt ^^ lg -SBond-
Martin L. schrieb: > Nach viel spielerei habe ich jetzt nach einer Möglichkeit gesucht, die > vom Arduino gesendeten Daten (serial.print) auf einem PC zu > visualisieren. > ...quasi wie mit einem Oszilloskop. Leider war das Ergebnis der Suche > sehr ernüchternd. :( ...schaust Du hier: Beitrag "Daten von der seriellen Schnittstelle einfach darstellen" > Der einzige große Nachteil der Software.... es ist mit AutoIt > geschrieben. Es ist also nur ein langsamer Interpreter. > Zum Zählen von 0 auf 1 Mrd braucht es bei mir 43 sek. (C braucht 4 sek > und PureBasic schafft es in 0,3 sek.) Mit dem AutoIt Interpreter wirst Du das Ganze so nicht realisieren können. Und zwar aus Geschwindigkeits- und Komplexitäts-Gründen. Such Dir dazu einen adäquaten Compiler (C, Delphi usw.) und gehe Dein Vorhaben damit an. Im übrigen wird gleichzeitiges schnelles Steuern und Messen mit Sicherheit zu Problemen bei der Darstellung führen, da Du wahrscheinlich die zeitäquidistante Abtastung dann nicht mehr wirklich sicherstellen kannst.
So wie ich das jetzt so einschätze, werde ich wohl 2 Oszillograph-Modis programmieren. Mit C müsste ich mich jetzt auch erst mal schlau machen, wie ich da eine .DLL programmiere. Meine Haupt-GUI wird momentan noch in AUTOit bleiben, da ich damit wesentlich schneller und effektiver bei der GUI-Gestaltung bin. Außerdem feht es mir auch noch an wissen in den anderen Programmiersprachen, um mir ein Programm mit Oberfläche zu programmieren. Modi 1 wird für die Darstellung in Echtzeit sein, mit max. 300 Werte, die pro Sekunde geplottet werden können. Genauigkeit ca. 3-4ms. Für einfache oder langsame Prozesse durchaus nützlich. z.B. einfache Messung von Spannungen oder PIN-Zustände Modi 2 wird auf Genauigkeit ausgelegt sein: Option 1: 1 Kanal, 8-Bit-Auflösung, COM-Port mit 256000 Baudrate: max. Empfangsfrequenz, bei 10-Bit/Byte (wegen Start/Stoppbit): 25,6 KHz max. Genauigkeit (theoretisch): 36µs Abfragegeschwindigkeiten vom Arduino: Abfragemodus Frequenz [KHz] ms/Aufruf -------------------------------------------------------------------- analogRead() Standard 8,93 0,112 analogRead() beschleunigt 58,59 0,017 digitalRead() 240,96 0,004 Datenquelle: (http://www.mafu-foto.de/blog/viewpost/85) hinzu kommt auch noch die Zeit, die für das Senden der Daten benötigt wird. Option 2: 1 Kanal, 16-Bit-Auflösung, COM-Port mit 250000 Baudrate: -geringe Fehlerrate und hohe Auflösung -max. Empfangsfrequenz: < 12,5 KHz (> 80µs) Man muss abwägen, wie genau die Messung sein soll. Wer wirklich kleine Zeitabstände braucht, der muss sich ein richtiges Oszilloskop zulegen. Mit der Übertragung über die COM-Schnittstelle (bzw. USB/Seriell-Wandler) hat man keine Möglichkeiten auch nur annähernd da hin zu kommen. -------------- Bei meinem Programm liegt daher bei die Hauptpriorität bei der live-Kommunikation/Steuerung mit dem Arduino. ..also das Auslesen/Ändern der Pin-Zustände, der Variablen des Arduino-Codes, des EEPROMS und die Ausführung und Auswertung von Diagnosefunktionen.
der Thread wird hier weitergeführt: Beitrag "[Arduino-Control] - Analyse und Steuerung des Arduino (oder kompatible Boards)" Grund: Ein Oszilloskop wird mein Programm nicht mehr werden. Ich habe es etwas zu spät erkannt und möchte daher niemenden falsche Hoffnungen machen. hier ist immer die laufend aktualisierte Version: http://arduino.cc/forum/index.php/topic,141146.0.html lg SBond
Hi Leute, Ich habe nach langem hin und her noch mal etwas neues geschrieben. Ich nenne es "Arduino-Oszilloskop [Nano Version]" und mit einer Dateigröße von ca. 54 KB ist es doch relativ schlank. Mit diesen kleinen Oszilloskop kann man mit dem Arduino (bzw. mit dem reinen ATmega) Spannungsverläufe darstellen. Beim Arduino ist eine Zeitauflösung von 50µs problemlos möglich. Unterstützte Baudraten: 100 bis 1843200, wobei der Arduino bei mir bis zu 550K geschafft hat. Mit den verschiedenen Modis kann man auch periodische Signale triggern oder Signale bis zu 83 Minuten lang grafisch aufzeichnen. Die empfangenen Daten werden byteweise eingelesen und als Binärdaten interpretiert. 1 Byte entspricht ein Messwert, womit ein Messwert dem entsprechend eine Auflösung von 8 Bit (256 Werte) haben kann. Das Programm ist für einfache Messungen bis in den unteren KHz-Bereich geeignet. ;) Arduino-Sketch und weitere Daten sind im Programm hinterlegt. ...eventuell kann es ja jemand gebrauchen ;) lg SBond
kleines Update: Version 1.0.0.1 Abtastrate um das 2,44-Fache erhöht: ca. 48K Samples/Sek, Zeitauflösung ca. 21 µs lg SBond
Hallo "sbond"; Genau soetwas habe ich gesucht. Sehr gute Arbeit! Ich habe es aktuell im Einsatz und würde mich freuen wenn es noch weitere Optionen am Programm gäbe. Besteht die Möglichkeit bei Dir Wünsche oder Vorstellungen anzubringen und diese evtl. dann umzusetzten!?? Ich würde gern weiter damit arbeiten und das Tool als USB Oszi einsetzten. Ich werde natürlich versuchen zu unterstützen soweit ich das im Rahmen der Programmierung leisten kann! Vielen Dank vorab! Gruß Denny
Eine andere Möglichkeit ist, eine Programm auf dem PC als graphisches Terminal zu verwenden. Der Vorteil: es lassen sich beliebige Grafiken vom Arduino aus zeichnen. Der Nachteil: es ist langsamer. Hier eine Beispiel in Python: http://hobby-roboter.de/forum/viewtopic.php?f=4&t=139
Also wenn es Ideen gibt, dann immer her damit :D Ich bin immernoch fleißig am programmieren. Habe jetzt vor kurzen mein "Graph-Modul" fertig gestellt, der dann bis zu 500K Samples darstellen kann (Abhängig von der Graphgröße und der CPU). Das Modul habe ich gestern online gestellt (http://forums.purebasic.com/german/viewtopic.php?f=8&t=26795&sid=3b337a49daa470d3d1c5bf16a8dd330f). Nun bin ich dabei das ganze in einem schönen Oszi umzusetzen, mit Hilfslinien zum Ablesen, bessere Triggerfunktionen und was alles so zu einem Oszi dazugehört. Die "Nano-Version" ist ja wirklich sehr einfach gestrickt und war mehr so eine schnelle Notlösung. Wenn es Software-Updates gibt, dann werde ich diese hier posten. ...kann aber noch bis zu 4 Wochen dauern, da noch sehr viel zu tun ist. lg SBond
Moin Martin, ein sehr schönes kleines Programm hast du da. Daher erst mal einen herzlichen Dank dafür. Es funktionierte bei mir auf Anhieb. Ich habe da nur eine kleine Frage: Wäre es möglich den Code dazu zu veröffentlichen? Ich wäre nämlich sehr daran interessiert eine QT basierte Form zu programmieren die Plattformunabhängig ist. Nutze nämlich selten und äußerst ungern Windows. Falls nicht hätte ich da auch noch ein paar kleine Vorschläge: - Vielleicht noch ein Dropdown Menü um die Referenzspannung zu wählen, damit man die Div/V auch angezeigt bekommt. - Und das Anzeigefenster für die Grafik ein klein wenig größer als den Maximal- bzw Minimalwert zu gestalten, da bei GND und Umax die Messdaten nur sehr schwer zu erkennen sind. LG Kalle
Pascal G. schrieb: > Wäre es möglich den Code dazu zu veröffentlichen? Ich wäre nämlich sehr > daran interessiert eine QT basierte Form zu programmieren die > Plattformunabhängig ist. Nutze nämlich selten und äußerst ungern > Windows. Hatte vergessen zu erwähnen, dass ich eine OpenSource Lösung programmieren möchte. Da PureBasic ja leider kommerziell ist. LG Kalle
Hallo Martin, dürfte man deinen Autoit-Code auch mal sehen?
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.