Arduino Uno Analog Read / Oszi

Hallo Community,

ich habe noch nicht so viel Erfahrungim Bereich Arduino und steh gerade vor einem Problem.
Die Aufgabe ist, ein Signal über Signalgenerator am analogen Eingang des Arduino zu lesen und in Labview als Graph, sozusagen als Oszi Bild darzustellen.

Dazu habe ich mir das Labview Interface for Arduino geladen und damit eigentlich soweit alles aufgebaut. Jedoch kann ich mir nur sehr kleine Frequenzen anzeigen lassen... sobald ich ein sinus oder rechteck am Eingang habe mit mehr als ca 40Hz wird der sinus zum dreieck etc...

Weis zufällig jemand wie ich das Problem lösen kann ?

Ich hab mal geschaut...bei einem Sinus von 50Hz hat er auf einer Sinuswelle gerade mal 7 Abtastpunkte...das ist laut Datenblatt ja viel zu wenig was er eig können müsste :confused:

Meine Kristallkugel sagt, daß Dein Sketch langsam ist.
Grüße Uwe

Du wirst dich mit den ADC und Timer Innereien beschäftigen dürfen
Die höchst mögliche Abtastrate bekommst du im "free running mode".

ja also als sketch habe ich nur das vorgegebene standard program genommen was seitens labview für die kommunikation gegeben wurde…

alles weitere habe ich halt nur über labview programmiert

in den free running mode komme ich einfach über den befehl: ADCSRB=0x00; oder ?

OK, ich bin raus. Hellsehen kann ich nicht.

Grüße Uwe

ja also als sketch habe ich nur das vorgegebene standard program genommen was seitens labview für die kommunikation gegeben wurde...

Im labview Forum mal fragen ?

Kennst du die Serial Plotter Funktion in der aktuellen Arduino IDE?
Wenn deins besser werden soll, musst du bei Arduino tiefer einsteigen (geht aber auch),
wenn dein labview Dingens noch schlechter ist, taugt es nichts für deine Zwecke.

In der Regel ist die Serielle Schnittstelle der Flaschenhals, nicht analogRead. (Sagt meine Kristallkugel)

michael_x:
Im labview Forum mal fragen ?

Kennst du die Serial Plotter Funktion in der aktuellen Arduino IDE?

Ja, werde ich wohl mal tun, oder es ohne das Labview plugin versuchen müssen :smiley:

Nein, die Funktion kenne ich leider nicht :confused:

Ich hab von jemanden ein labview program bekommen der es nur mit den visa module programmiert hat und bei ihm zeigt es auch locker 400Hz funktionen an :confused:

also iwas scheint in dem sketch die ganze sache zu verlangsamen/blockieren

Labview

Ist nicht meine Baustelle...

also iwas scheint in dem sketch die ganze sache zu verlangsamen/blockieren

Und da der Sketch geheim ist und auch bleiben soll, bin ich hier auch raus.

Ich kann den Code ja mal anhängen, das Problem ist für mich, das er viel zu unübersichtlich ist und man wahrscheinlich gar nicht alle bräuchte....

Versuchs doch mal mit einer abgespeckten Version, die nur die Analogwerte einliest und über Serial verschickt. Dann können wir versuchen, eventuelle Bremsen in diesem Code zu finden.

ja ich hab schon versucht einiges raus zu schmeißen was ich nicht benötige…doch dann hängt er sich meist schon beim initialisieren auf :confused:

aber ich setze mich gleich nochmal ran und versuch es erneut

LIFA_Base.zip (36.3 KB)

Es wäre einfacher, wenn Du neu anfängst, ohne irgendwelche Bibliotheken, und den Code in Code Tags </> zeigst.

DrDiettrich:
Es wäre einfacher, wenn Du neu anfängst, ohne irgendwelche Bibliotheken, und den Code in Code Tags </> zeigst.

also komplett selbst schreiben ?

Aber dann kann ich die vorgefertigten Vi’s von labview für den arduino sicherlich nicht nutzen, ode rliege ich da falsch ?

hab mein vi auch mal beigefügt falls jmd in besitz von labview sein sollte :slight_smile:

danke erstmal bis hier her !

Test_analoger_Eingang.zip (23.5 KB)

Immer der Reihe nach. Erst mal sollte ermittelt werden, wie schnell die Analogeingabe tatsächlich ist. Dann kann man der Reihe nach die Bibliotheken hinzufügen um festzustellen, wo's klemmt.

Erst mal sollte ermittelt werden, wie schnell die Analogeingabe tatsächlich ist

Standard analogRead() braucht ca. 120 µs, das wären ca. 8000 Werte/sec, ein ganze 50 Hz Sinus-Schwingung könnte 150 mal abgetastet werden.

Bei 400 Hz hätte man nur noch 20 Messungen je Schwingung, da wäre in etwa eine Grenze, wo man überlegen könnte, ob mehr Messungen mit geringerer Auflösung (8 bit) sinnvoller wäre.

Aber, wie ich schon erwähnt habe, wenn man an ein fremdes Serielles Protokoll (labview) gebunden ist, ist die erste Frage, wie lange die Datenübertragung braucht.

Und ob/wie man Messen und Senden parallel laufen lassen kann.

michael_x:
Standard analogRead() braucht ca. 120 µs, das wären ca. 8000 Werte/sec, ein ganze 50 Hz Sinus-Schwingung könnte 150 mal abgetastet werden.

Bei 400 Hz hätte man nur noch 20 Messungen je Schwingung, da wäre in etwa eine Grenze, wo man überlegen könnte, ob mehr Messungen mit geringerer Auflösung (8 bit) sinnvoller wäre.

Das ist korrekt, soweit hab ich das auch schon ermittelt...

Jedoch reicht das völlig da ich spatter lediglich wechselspannungen von lem wandlern lesen und überprüfen möchte....

michael_x:
Aber, wie ich schon erwähnt habe, wenn man an ein fremdes Serielles Protokoll (labview) gebunden ist, ist die erste Frage, wie lange die Datenübertragung braucht.

Und ob/wie man Messen und Senden parallel laufen lassen kann.

und ich denk auch das er damit überfordert ist gleichzeitig zu lesen und zu senden über labview

es gibt ja zahlreiche osi program für den arduino die ich mal getestet habe und da zeigt es mir die 400hz sinus schwinung problemlos an....allerdings weis ich nicht wie die es gemacht haben :smiley:

die idee ist ja alles erstmal in einem array zu speichern und nach meinetwegen 1000messungen erst zu senden...doch was das umsetzen angeht fehlt mir leider der richtige ansatz für die programmierung :confused:

Für 1000 Messungen brauchst Du schon ordentlich Pufferspeicher, ein 328 ist damit jedenfalls überfordert. Aber ohne Puffer oder ordentliche Zeitsteuerung wird es schwer, die Signale unverfälscht zu erfassen. Eventuell wird das mit einer Steuerung über Timer-Interrupts besser, und die Daten gleich seriell weiterschicken. Mit einem echten DSP kann ein Arduino sowieso nicht mithalten, da muß man schon ein paar Abstriche machen.

Zu Labview kann ich nichts sagen. Gibt es da keine Möglichkeit, Daten in größeren Blöcken zu übertragen?

Ja die 1000 Messungen waren nur so als Wert in den Raum geworfen.

Was das LabView interne angeht, da muss ich mich mal in einem labview forum schlau machen, bin da auch noch nicht so drin :smiley: ist alles erst recht neu für mich aufgrund des Studiums...

Für ein "Primitiv-Speicher-Oszi" reicht eine Auflösung von y = 0 .. 255 und x = 0 .. 1023
1kB passt in den RAM eines Uno.

Das nächste wäre dann die Frage nach dem Auslöse-Trigger :wink:

Also ich werd das ganze wohl nochmal neu beginnen ohne das Plugin direct für den Arduino...

Kann mir jemand sagen wie ich Daten auf dem Arduino speichern und dann auslesen kann ?

Habe etwas über die 4 Register ADMUX, ADCSRA, ADCL und ADCH gelesen...nur besteht auch die Möglichkeit alle 6 analog Pins gleichzeitig zu lesen ? oder wird er damit überfordert sein ?