Forum: Mikrocontroller und Digitale Elektronik Arduino-Oszilloskop [Arduino-Control]


von Martin L. (sbond)



Lesenswert?

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-

von Karl S. (heaviside)


Lesenswert?

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

von Martin L. (sbond)


Lesenswert?

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-

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

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.

von Martin L. (sbond)


Lesenswert?

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.

von Martin L. (sbond)


Lesenswert?

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

von Martin L. (sbond)


Angehängte Dateien:

Lesenswert?

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

von Martin L. (sbond)


Angehängte Dateien:

Lesenswert?

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

von Kevin (Gast)


Lesenswert?

UND WARUM ALLES DOPPELT???

von Denny (Gast)


Lesenswert?

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

von chris (Gast)


Lesenswert?

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

von Martin L. (sbond)


Lesenswert?

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

von Pascal G. (Firma: http://www.pgollor.de) (mc-kalle)


Lesenswert?

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

von Pascal G. (Firma: http://www.pgollor.de) (mc-kalle)


Lesenswert?

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

von Der Strahleman (Gast)


Lesenswert?

Hallo Martin,

dürfte man deinen Autoit-Code auch mal sehen?

von Pastor Braune (Gast)


Lesenswert?

Schon wieder Weihnachten ?

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
Noch kein Account? Hier anmelden.